0%

远程学习(一):基于ZeroTier的异地组网及Moon转发节点搭建

最前

疫情之下,很多同学无法回到学校使用高性能台式机进行学习与科研活动,影响了一部分科研进度。实际上,云盘同步、远程唤醒、远程控制电脑可以使我们随时随地用上千里之外的电脑或数据。然而,很多人并没有这样的使用习惯。在一月份离校前,我非常侥幸地在实验室路由器上设置了网络唤醒(Wake-on-LAN,WOL),并给主机加上了块4T的机械硬盘(真的是非常侥幸,不然我的毕业论文数据处理将遇到很大的麻烦)。本文主要介绍基于ZeroTier的异地组网及Moon转发节点搭建。后续有空的话,再介绍下WOL及云盘同步软件。

各类远程控制软件对比

说到远程控制,主要知名的软件无非是国外的Teamviewer、AnyDesk、国产的向日葵以及系统自带的Microsoft Remote Desktop。然而在国内复杂的网络背景下,其优劣差异明显。

就我个人环境而言,

  • 家里:上海移动300M下行20M上行,支持IPv6但无公网IP。

  • 寝室:上海电信50M下行4M上行,仅IPv4但为公网IP。

  • 实验室:上海教育网、电信、联通、移动四网出口,100M对等上下行,有公网IPv4、IPv6,但被学校防火墙拦截,无法在校园网外直接访问。

我的使用体验如下:

  • Teamviewer:这款软件可以直接控制实验室电脑。但由于其服务器主要在国外,在家里上海移动网络下当使用IPv6连接时,被迫绕美中转,速度非常慢;当使用IPv4连接时,可以直连,速度较快。然而,一回到学校后,在上海电信环境下远程控制实验室电脑,马上被判断为商业行为,五分钟后被迫下线(实际上根本不到五分钟就被踢了)。网上查了下据说更换使用的IP会导致判断为商业行为,我在官网进行了申诉,然鹅无果。放弃!

  • AnyDesk:这款软件应该是我最早用于远程控制的软件(如果不算QQ的话),然而当时(已有N年)使用体验不佳,频繁掉线,所以这次也没测试。主要原因应该还是其服务器也在国外。放弃!

  • 向日葵:这款软件的服务器在国内,然而它并不像前两款软件采用网络较好时直连计算机,仅在网络质量较差情况下使用中转模式的策略,而是全部中转流量。作为免费版,它又只给到了1M的带宽,机房线路仅有苏州电信,对移动线路极其不友好。收费版速度会明显提高,但我对于中转模式比较介意,总觉得在使用时有人窥屏。放弃!

    上面三款软件,在使用时还有个明显的问题,即被控电脑仍然会显示我的所有一举一动,尽管TV、向日葵都说提供了黑屏功能,但实际使用时总有一些异常Bug导致黑屏失败,除非物理关掉显示器,否则如下:

  • Microsoft Remote Desktop:微软出品,必属精品。然而它需要被控制端的机器有公网IP地址。实验室电脑虽然有公网IP,但由于我校设置了防火墙,并不能直接连接。

    因此,我需要先连入我校VPN再远程控制,多少有些麻烦,另外VPN线路由于使用的人太多,多少有些不稳定,速度较慢,也影响本机其他软件的网络活动。但作为系统级的远程控制软件,延迟流畅度、显示效果以及安全性均不是上面三个能够比的。如果能够直连控制,那么再好不过。解决方案当然有,那就是使用ZeroTier进行异地组网。

ZeroTier注册及服务设置

  • 首先在ZeroTier的官网(https://my.zerotier.com/login)注册账号。免费账户可以部署100个ZeroTier节点,对于个人使用,完全够用!

  • 点击NetWorks,然后点击Create a NetWork即可获取到一串数字ID。

  • 点击ID,可以进行设置私有模式或公开模式,个人使用请选择私有模式。

  • 可以设置异地组网的IP段,建议选择一个好记的。

  • 以上即完成了服务设置。

ZeroTier客户端设置

本文以Windows客户端为例

  • 从官网上下载ZeroTier客户端安装后,右击托盘区图标,选择加入网络,填写刚刚那串数字ID即可。

  • 由于是私有网络,需要在后台允许该客户端访问,点击IP地址前的选择框即可,前面的绿色实线表示同意接入,红色虚线表示拒绝接入。此外,在右侧,还能手动指定设备的IP。

  • 设置完成,程序会创建一张虚拟网卡,并提示是否连入,选择连入即可。

  • 在微软远程控制中,输入手动指定的内网IP段,即可远程控制,成功直连!

Moon转发节点搭建

  • 事实上,当国内网络无法较好地基于UDP协议连接被控电脑时,也会进入转发模式,但由于ZeroTier的官方服务器也在国外,所以情况并不会改善,反而有可能更糟糕。有条件的同学可以在国内搭建VPS服务器,建立Moon节点(也就是卫星节点)进行国内流量转发,即控制端→国内个人VPS→被控端。

  • 在VPS上执行一键命令安装Moon程序。

    1
    curl -s https://install.zerotier.com/ | sudo bash
  • 将VPS加入网络,也需要在网站上同意。

    1
    zerotier-cli join 网络ID
  • 进入安装目录,并生成Moon的模板。

    1
    2
    cd /var/lib/zerotier-one
    zerotier-idtool initmoon identity.public > moon.json
  • 修改moon.json文件。

    修改文件中的“stableEndpoints”为 VPS的IP地址及开放的端口号,例如“stableEndpoints: [“8.8.8.8/9993”]

  • 生成签名文件,一个000000xxxx.moon的文件,需要将此文件下载下来。

    1
    zerotier-idtool genmoon moon.json
  • 在安装目录下创建一个moons.d的文件夹,并将000000xxxx.moon移入,并重启服务。

    1
    service zerotier-one restart
  • 以上就完成了节点的搭建,剩下需要做的就是把两端的电脑也加入到节点中。

客户端加入Moon节点设置

本部分仍然以Windows为例,此外手机客户端目前不支持加入Moon

  • 打开服务程序services.msc, 找到服务ZeroTier One,找到其可执行文件路径。我的目录在C:\ProgramData\ZeroTier\One中,注意不要找到ZeroTier的客户端所在文件夹,比如C:\Program Files (x86)\ZeroTier\One,在这里是无效的。事实上,只要服务开启,该软件是否运行,并不影响虚拟组网的成功。

  • 在上述C:\ProgramData\ZeroTier\One目录下,创建一个moons.d的文件夹,将000000xxxx.moon复制进入即可。

  • 然后在服务程序里重启服务,无需关机,重启托盘区那个软件无效。

  • 在命令行环境(可能需要管理员权限),运行如下命令进行检查。

    1
    zerotier-cli listpeers

    结果中应当包括所用的国内VPS IP,并在后面写上了Moon的标签,表明连接成功,可在国内直接转发。

总结

  • 至此,基于ZeroTier的异地组网及Moon转发节点搭建全部结束。

  • 使用微软远程控制还遗留下一个问题,那就是ENVI软件无法正常启动,经查ENVI授权为单机使用,通过微软远程控制则需要联机版授权。但是使用Teamviewer不存在这个问题,所以目前只好交替使用emmm。