远程控制软件 rustdesk 及自建服务器

疫情原因又要在家办公了,然而却有需求连单位电脑。以前用了一段时间向日葵远程,虽然免费版限速300kB/s,但也还能用。然而最近却经常出现连接不稳定的情况,时不时就卡死或断掉,而且最新版软件还会时不时自动退出软件。试用了两天的付费版,除了速度快了以外其他的稳定性问题照旧。于是寻求替代软件,最开始试了 realVNC,结果实在是太卡了,几乎没法用,只有偶尔一小会不怎么卡。然后又找到了 ToDesk,这是一个不错的国产软件,免费版不限速,稳定性感觉比向日葵好,不过也有一点小问题,那就是被控端(ubuntu 20.04)被控制时的CPU占用较高,而且有时候也会断掉,而且重连时却连不上,此时只有在被控端重启todeskd服务后才能重新连接。最后又发现了一个开源的 rustdesk 软件,可从 GitHub 免费下载,连接也很简单,而且不用注册,前面的三个软件都要注册才行。不过,rustdesk 默认的服务器不在国内,连接速度并不快,而且也不是很稳定。但是这个软件好在它支持自建服务器,如果自己搭建一个服务器只给自己用,那速度和稳定性将会有质的提升,于是尝试自建服务器。

GitHub 上的 rustdesk-server 项目就是 rustdesk 的服务器程序,主要包括 hbbs 和 hbbr 两个可执行程序,前者是“ID服务器”而后者是“中继服务器”,二者需配合才可正常使用,可参见官方说明。服务器设在家里的NAS上,使用最新的 1.1.5 版本的 rustdesk-server 的 docker 镜像,设置与host使用相同网络。设NAS的IP为 192.168.0.110,而我的win10是 192.168.0.109。我要从win10通过自己服务器连到单位的linux上,两端的 rustdesk 客户端都是 1.1.9 版。

最初设置

最开始的设置是 hbbs 和 hbbr 的运行命令分别为

hbbs -r 192.168.0.110  #其实 -r 指定中继服务器不是必需的,只不过这里指定后客户端就可以不指定了
hbbr

win10 上的“ID服务器”设为 192.168.0.110,而(远程) linux 上的“ID服务器”则设为 DDD(其他几项可以不填),其中 DDD 是我家公网IP(114.246.x.y)的动态域名。两边之所以设的不一样是因为在家里根本无法访问 DDD 或 114.246.x.y,很是奇怪,外面能 ping 通里面却 ping 不通!此外还要在路由器上设置好端口映射,将外部访问 DDD 的 21115, 21116, 21117 三个端口映射到 NAS 192.168.0.110 上。这一切都设好后,尝试连接,然而却总也连不上,最后提示“无法通过注册服务器建立连接”。从 hbbs 和 hbbr 的输出中可以看出,两段到服务器的网络应该是通的,说明端口映射正常,但奇怪就是无法连到远程电脑。通过在官方交流群里提问,说是应该把所有的内网 IP 192.168.0.110 换成外网 IP 114.246.x.y。然而这在我这里是行不通的,因为我的情况是在内网根本无法访问 114.246.x.y,根本不认,网络不可达;而外网又不可能认识内网的 192.168.0.110,所以内外网只能分别用不同的 IP 来与 NAS 建立连接。但是在这种情况下 rustdesk 却又梁步上远端。

问题解决

本来想看看家里的光猫设置上能否让内网也能访问公网 IP,结果找了半天无果。如果能破解进入其系统或许有办法设置,但是不想这么折腾,也怕把光猫搞坏掉,疫情之下修都修不了那就麻烦了。有人说如果光猫能设置 NAT reflection (或叫 NAT loopback)就可以解决该问题,然而同样是不支持这种设置;另一个可行方案是本地解析域名。于是尝试把两段的“ID服务器”都设成 DDD,hbbs -r 后也用 DDD,然后在 win10 和 NAS 上都修改 hosts 文件,加上一行

192.168.0.110  DDD

也就是强行将 DDD 这个公网IP的动态域名在内网解析为 NAS 的IP。经过这样一试,果然连接上了!通过传输文件,发现速度可达2MB/s以上,而之前用默认服务器时也就几十上百kB/s的样子,看来速度确实有明显提升。

总结要点

  • win10 上必须改 hosts 文件,而改了 hosts 后“ID服务器”处无论是填 DDD 还是 192.168.0.110 都能连上。当然远程端只能填 DDD。
  • NAS 上的 hosts 文件不改也能连。
  • hbbs 可以不加 -r 参数(前提是与 hbbr 在同一机器上运行),但如果加的话应该加 DDD 而不是 192.168.0.110。

其他

hbbs -c 后可加配置文件,在其中指定相应参数,比如

relay-servers=DDD

hbbs 和 hbbr 可以通过 -k 参数指定加密的公钥,即 id_ed25519.pub 文件中的内容,指定后将只对使用该公钥的客户端提供服务,而客户上在指定服务器的地方最后一行的 Key 里也要设置该公钥内容,这样就可以建立加密连接了,而且这个服务器只对自己有效。此外,hbbs 和 hbbr 在指定公钥时可以使用 _ 代表使用默认文件中的公钥,即实际可通过如下命令运行

hbbs -k _    # 省略 -r 参数,使用本机的中继器
hbbr -k _

你可能感兴趣的:(远程控制软件 rustdesk 及自建服务器)