用飞牛跑RustDesk,再借TCP隧道走RDP:远程连接又清楚又省事
最近远程软件越用越别扭,要么限速,要么画质发糊。
后来我把RustDesk自建在飞牛上,再用它的TCP隧道把Windows远程桌面(RDP)引出来,体验比直接用RustDesk画面好很多。整套东西不复杂,记一下过程,给同样想自己折腾的人参考。
我这边三台机器分工很简单:
1.电脑A:飞牛NAS,常年开机,跑RustDesk服务端,负责设备注册、打洞和中继;
2.电脑B:家里那台Windows,真正要远程操作的;
3.电脑C:在外面用的笔记本或手机,发起连接,最终用RDP连电脑B。

一、飞牛上把RustDesk服务端跑起来
RustDesk服务端其实是两个容器:hbbs管ID注册、心跳、打洞,hbbr管中继。只装一个不行,两个都要。
我在飞牛Docker里建个Compose项目,目录用自己习惯的就行,比如:
/vol1/1000/docker/rustdesk
Compose按官方推荐用host网络最省事,不用一个个映射端口,hbbs/hbbr直接复用宿主机网络。内容大概这样:
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r 你的域名或飞牛IP:21117
volumes:
- /vol1/1000/docker/rustdesk:/root
network_mode: "host"
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- /vol1/1000/docker/rustdesk:/root
network_mode: "host"
restart: unless-stopped
/root映射出来很重要,密钥、设备库都在里面。第一次启动后,去这个目录找id_ed25519.pub,里面一串就是客户端要填的Key。换容器、升版本都别删这个目录,删了所有客户端要重填。
端口这块不用记太多,实际用得到的有:
• 21115/TCP:NAT类型测试
• 21116/TCP和UDP:核心,ID注册、心跳、打洞,UDP一定别漏
• 21117/TCP:hbbr中继
• 21118、21119:网页客户端用,我个人不用网页端,直接不开放
飞牛系统防火墙放这几个端口;如果在外网用,路由器再做转发到飞牛内网IP。用IPv6就放AAAA和IPv6防火墙,用IPv4就做UDP/TCP端口映射。
二、电脑B开RDP,但别直接暴露到公网
电脑B如果是Windows专业版/企业版/教育版,设置—系统—远程桌面打开。高级里勾“要求网络级别身份验证”,这个先验证账号再建会话,比直接弹登录界面安全。
接着别急着把3389映射到公网。我的做法是:
1. 电脑B固定内网IP,比如192.168.1.20;
2. RDP端口可继续用3389,也可改成冷门端口,但改了后面隧道要对应;
3. 专门建一个远程账号,强密码,不用空密码,不用日常管理员账号远程;
4. 组策略里设登录失败3次锁10分钟;
5. Windows防火墙“远程桌面”入站规则,远程IP只放本机回环和家里网段,例如127.0.0.1、192.168.1.0/24,公网IP不放。
这样外面就算扫到RDP端口也进不来,真正入口走RustDesk。
三、电脑C用RustDesk建TCP隧道,再连RDP
电脑B和电脑C都装RustDesk,设置—网络里填:
• ID服务器:飞牛域名或IP,默认21116可只写域名
• 中继服务器:可留空让hbbs下发,也可直接写域名:21117
• API服务器留空
• Key:贴飞牛rustdesk目录里id_ed25519.pub的内容

然后电脑C连电脑B的RustDesk ID。
连上后在主控端安全/权限里确认“启用TCP隧道”是开的。

在电脑C的Rustdesk里,点击连接上的电脑B,点击右侧的3个点,选择“TCP隧道”

在弹出的窗口中,按如下内容填写:
1.本地端口:随便挑个不冲突的,比如1338
2.远程主机:空着就行
3.远程端口:电脑B的远程桌面端口,默认是3389

填写完后点击添加,不要关闭当前窗口,在电脑C上打开系统远程桌面:
计算机填127.0.0.1:1338,用户名密码填电脑B的Windows账号。体验设置选“局域网”,32位色,字体平滑、桌面合成都勾上,连进去就是RDP画质,文字清楚、窗口拖动比RustDesk自带视频流顺很多。

手机也差不多:装RustDesk连上电脑B,开TCP隧道把本地端口转到3389,再用Microsoft Remote Desktop填127.0.0.1:本地端口。没有电脑时临时用RustDesk自带画面也行,只是高清需求还是RDP更舒服。
四、几个我踩过的小坑
1.21116只开TCP不开UDP,外面经常连不稳,打洞全靠UDP心跳。
2.hbbs别加ALWAYS_USE_RELAY=Y,加了强制走中继,RDP再清楚也受家里上行限制。
3.电脑B防火墙如果只放127.0.0.1,但RustDesk隧道远端填的是内网IP,就会连不上;先看电脑B本机netstat确认3389监听在0.0.0.0还是127.0.0.1,再决定隧道远程主机填哪个。
4.用host模式的Compose最省心;飞牛某些环境host不习惯,可改bridge并手动映射21115、21116tcp/udp、21117,但别漏UDP。
5.Key一定要从自己服务端拿,不要用官方公共服务器;不然就不是自建了。
五、为什么我觉得这套适合家用
飞牛一直开机,RustDesk服务端几乎不占资源;电脑B平时sleep都行,要远程先唤醒或用RustDesk连。真正传画面走RDP,比纯RustDesk视频流清楚,又不用把3389裸露到公网。外面电脑、手机都能用,家里IP变了靠域名,电脑C没有固定IP也无所谓,因为连的是飞牛RustDesk,不是直接连电脑B。
折腾一次,后面基本不用管。对不想买商业远程套餐、又嫌开源方案画质差的人,这个组合挺合适。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
