RustDesk做为开源免费的跨平台远程桌面连接软件,广泛用于跨平台远程访问场景。但是因为其中转服务器在外海的原因,比较依赖双方用户的网络环境,如果没办法直连的话,延迟和画面质量还是影响非常大的。本篇文章使用Lucky STUN搭配免费Frp实现自建RustDesk中转服务器
一、前提要求
1、需要会使用Lucky STUN穿透功能
2、安装Lucky设备具备Docker功能
3、会使用Frp功能
这里的免费Frp提供商如果自己有或者使用免费都可以。因为Frp的作用只是用于hbbs的ID 注册和心跳服务,所以Frps对于带宽和延迟并没有什么需求,真正用于中转的服务器会直连STUN穿透端口

二、搭建Frp
配置让frp监听本地的21116端口,注意21116的监听端口对应的公网端口一定要同一个端口,不然无法正常使用。如果你的frp可以同时监听默认的21116端口的话,也可以把frp默认公网监听端口设定为211116,这样的话服务器地址就可以省略端口号了

三、Lucky配置
在lucky->STUN->创建STUN穿透规则来创建一条规则,并且做好端口转发和防火墙放行,这条规则用于hbbr实际中转使用。


四、搭建中转服务器
在lucky部署的机器上运行下列命令来创建docker容器
#拉取rustdesk镜像
docker pull rustdesk/rustdesk-server
#创建配置文件存放目录
mkdir /root/rustdesk&cd /root/rustdesk
#创建hbbs
docker run -d --name hbbs --net=host --restart=always \
-v /root/rustdesk:/root/ \
rustdesk/rustdesk-server hbbs -r {你的STUN穿透ip:port} -k _
#创建hbbr
docker run -d --name hbbr --net=host --restart=always \
-v /root/rustdesk:/root/ \
rustdesk/rustdesk-server hbbr -k _ShellScript如果你的frp和stun可以正常使用的话此时在你的2个rustdesk客户端都粘贴下列内容就可以正常走中转直连了
- ID服务器:Frp公网ip:端口号
- key:/root/rustdesk/id_ed25519.pub内的密钥
五、动态更新中转地址
在lucky的stun规则内添加自定义脚本触发,内容如下:
docker rm -f hbbs
docker run -d --name hbbs --net=host -v /root/rustdesk:/root --restart=always rustdesk/rustdesk-server hbbs -r ${ipAddr} -k _ShellScript此时如果STUN端口发生变化的话就可以自动更新ID服务器的中继节点了
后记
经过博主的测试,发现由于QoS的原因,跨运营商的话RustDesk画面传输会比较卡顿,如果想实现流畅访问的话还是建议控制端和被控制端都是同一运营商下比较合适











本人nat1下,直接主机3389虚拟地址至路由打开,再用stun穿透一个公网IP:port ,已经用了很久,稳定,就一个缺点每次需要重新手输端口号。
不稳定就意味着没办法推广至任意人群和设备,因此如果只是自己使用的话直接使用组网服务更为方便,不需要记住端口号
如果有支持ip4p的rdp类似的软件就方便了
ip4p是啥,有详细的文章介绍吗?
我在natmap上看到有相关描述。既然需要客户端支持,那还不如客户端直接使用标准SRV记录解析或者更灵活的TXT记录解析更加标准和实践
思路很棒!但是有个问题。更新IP后客户端后要不要手动填写中继服务器?能不能使用lejianwen的rustdesk-api?
API填写的话只需要填写ID服务器+Key就可以了,中继服务器靠ID服务器下发就行了,不需要手动填写中继服务器。另外,关于rustdesk-API我没有做过相关研究,这个没办法回复
提示连接被对方关闭。是不是网络太差导致的?
反过来连接呢?有可能是你的配置问题,又或者是运营商的问题
反过来一样。手机连电脑。电脑连手机都提示连接错误。连接被对方关闭。还有是不是自编译客户端的问题?我看docker容器的日志没发现什么错误。局域网连接虚拟机但是能联通。应该还是网络问题。
你可以在本地使用内网地址连接看看是否有这样的问题。如果有的话估计是docker的问题,检查一下frp或者stun穿透端口是否可以正常使用
教程很有用,就算中间步骤不够细,基础差的实施起来还有点难度
后期的很多内容都是基于前期的一些基础在实现的,可以翻看之前的文章来学习。
如果每一篇文章都是从头开始写的话文章是非常长并且繁琐的
况且我在“一、前提要求”里面写清楚了,你在学习本篇文章之前是要先学会使用这些基本功能的
有公网IPv6,没有公网IPV4,挺头疼的,这个是兼容两个的方案吗
是仅IPV4方案,不需要具备公网IPV4