在上一篇搭建zerotier网络的教程,我们成功地搭建了zerotier网络,达成了远程办公的目的,你甚至还可以坐在星巴克咖啡厅里,跟生意伙伴商务活动的同时,随时调用公司内部的共享数据资料,这也是科技进步给我们带来的种种便利之一。

  在zerotier网络体系中,根服务器(root server)被称为星球(planet),而每一台联网设备都被称为叶子(leaf),两台星球之间是通过星球节点握手建立隧道连接的,而zerotier作为一家总部位于加州的美国公司并没有在中国设有根服务器,因此在两台设备连接时受制于星球节点的连接质量,不免要产生高延迟,因此我们可以按照官方指引来搭建月亮(moon)节点,让设备相互连接时通过我们自己搭建的月亮节点来握手建立隧道,从而降低握手时的网络延迟、也提高联网稳定性和安全性。

  首先要说明的是,搭建月亮节点的服务器对硬件要求不高,但是必须有公网IP地址,如果公司的网络环境不具备条件,可以通过购买云计算服务器来实现。现在国内的云计算服务商主要有阿里云、华为云、腾讯云、天翼云等,都可以满足你的需要,这些供应商时常有打到骨折的优惠活动,每年一两百元人民币的成本也不是什么压力,再者说来,这一台云计算服务器还可以同时为你搭建网站或者其他的应用。如果对于搭建moon节点还没有信心,可以到这些云计算供应商的国际站点注册,薅一台免费试用2-3个月的服务器来测试,其实这些云计算的香港节点与大陆站点相比延迟也差不了多少;当然国际大厂也有羊毛可以薅,谷歌云、甲骨文云、亚马逊云、微软云都提供免费试用的云主机,甲骨文云还提供终身免费的选项。

  下面我就用一台全新的甲骨文云服务器教大家如何搭建自己的moon节点。

  新建一台1核CPU1G内存的服务器,系统ubuntu20.04LTS,

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  分配IP地址,

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  添加ipv6路由表,

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  添加网络安全列表,增加出入站规则,放行出入站流量,

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  先测一下ping值,

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  用SSH客户端应用程序连接主机,

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  获取root权限,

  sudo -i

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  更新可安装软件包的列表,

  apt update

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  更新可升级软件包,

  apt upgrade

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  查看服务器防火墙状态,

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  如果防火墙处于活动状态,需要执行以下步骤,

  添加服务器防火墙规则,放行9993端口,

  ufw allow 9993/udp

  重启防火墙,让规则生效

  ufw reload

  查看端口是否放行。

  ufw status

  安装zerotier,

  curl -s | sudo bash

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  加入ZeroTier网络,

  zerotier-cli join

  返回 200 join OK

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  (离开zerotier网络的命令:zerotier-cli leave )

  验证是否联网,

  zerotier-cli listnetworks

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  生成moon模板,

  cd /var/lib/zerotier-one

  zerotier-idtool initmoon identity.public > moon.json

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  修改moon.json,

  vi /var/lib/zerotier-one/moon.json

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  进入编辑状态,

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  修改"stableEndpoints"为服务器公网IP,

  "stableEndpoints": ["152.67.193.30/9993","2603:c024:b:a100::30/9993"]

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  退出编辑状态,

  Esc

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  保存。

  :wq

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  这是命令行修改模式,也可以利用finalshell自带的文本编辑模式,需要注意的是,文本编辑模式需要直接用root登录,否则,会因为权限不够而失败,

  通过文件管理器进入zerotier安装目录并找到moon.json,

  /var/lib/zerotier-one/moon.json

  亚马逊云端服务器_亚马逊云服务器_亚马逊 云服务器 ipv6

  点击鼠标右键,打开文件,

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  在文本编辑器中修改"stableEndpoints"为服务器公网IP,

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  点击菜单保存,等待右上角文件状态显示“已完成”表示修改成功,

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  点击右上角【X】关闭文本编辑器回到命令行页面。

  生成签名文件,

  zerotier-idtool genmoon moon.json

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  执行之后会生产一个000000xxxxxxxxxx.moon(前六位是零,后十位是节点ID)的签名文件,下载moon签名文件备用,

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  通过文件管理器进入zerotier安装目录并找到000000xxxxxxxxxx.moon,

  /var/lib/zerotier-one/000000xxxxxxxxxx.moon

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  点击鼠标右键,选择下载,等待右上角文件状态显示“已完成”表示下载成功,默认的保存位置在电脑桌面上的一个名为“fsdownload”的文件夹里,备用。

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  将moon节点加入网络,

  mkdir moons.d

  mv ./*.moon ./moons.d/

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  这一步骤也可以使用文本编辑模式,首先建立moons.d目录,然后把下载的000000xxxxxxxxxx.moon上传到目录中就OK,

  重启zerotier,

  service zerotier-one restart

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  验证moon节点是否正常联网,

  zerotier-cli listmoons

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  至此,moon节点搭建完成。

  接下来,将联网设备加入moon节点,有命令行模式和文本编辑模式,我分别用windows客户端和openwrt路由器来介绍,

  打开已连接zerotier的电脑的命令行,先测个没有加入moon节点的ping值,

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  进入zerotier客户端应用程序批处理脚本的安装目录(zerotier默认安装目录是C:\ProgramData\ZeroTier\One,这个目录下的执行命令是 zerotier-one_x64.exe -i 或者 zerotier-one_x86.exe -i 代替 zerotier-cli ),

  C:\Program Files (x86)\ZeroTier\One>zerotier-cli orbit xxxxxxxxxxx xxxxxxxxxxx(moon节点ID两次,中间带空格)

  返回 200 orbit OK

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  (离开moon节点的命令:zerotier-cli orbit xxxxxxxxxxx xxxxxxxxxxx)

  验证是否加入moon节点,

  C:\Program Files (x86)\ZeroTier\One>zerotier-cli listpeers

  列表中有“MOON”表示已成功加入moon节点,

  亚马逊云服务器_亚马逊云端服务器_亚马逊 云服务器 ipv6

  查看moon节点信息,

  C:\Program Files (x86)\ZeroTier\One>zerotier-cli listmoons

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  用文本编辑模式将另一个局域网已经加入zerotier网络的openwrt路由器加入moon节点,

  通过文件管理器进入zerotier目录,

  /etc/config/zero

  或者软连接:/var/lib/zerotier-one

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  点击鼠标右键新建文件夹moons.d,

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  进入moons.d目录,点击鼠标右键上传文件,

  亚马逊 云服务器 ipv6_亚马逊云服务器_亚马逊云端服务器

  进入fsdownload目录,找到刚刚下载的000000xxxxxxxxxx.moon文件,确认,等待右上角文件状态显示“已完成”表示上传成功,刷新页面,可以显示文件,

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  重启zerotier,

  service zerotier restart

  亚马逊云端服务器_亚马逊 云服务器 ipv6_亚马逊云服务器

  验证是否加入moon节点,

  列表中有“MOON”表示已成功加入moon节点,

  亚马逊云服务器_亚马逊 云服务器 ipv6_亚马逊云端服务器

  至此,openwrt路由器已成功加入moon节点。

  两台联网设备都打开ipv6,测个ping值,在两台设备同城并且是同一个宽带接入商(中国移动)的条件下,ping值6毫秒左右,这个级别的ping值,在感觉上基本与局域网内设备的相互连接没有区别。这是由于zerotier在两个具有公网ipv6设备之间直接建立了隧道连接,不再需要多层NAT地址转换。

  亚马逊 云服务器 ipv6_亚马逊云端服务器_亚马逊云服务器

  需要说明的是,搭建moon节点是为了替代planet节点在联网设备握手时的作用,降低设备之间握手时的延迟,也提高你的zerotier网络的稳定性和安全性,并不能直接降低联网设备相互访问时的ping值。也许有人会质疑,既然有了公网ipv6,直接用ipv6不就可以了吗?在实际应用场景中绝大多数ipv6都是动态的,并且ipv6的地址都很难记住,不适合日常应用的场景,当然你设置了ddns除外。

  好了,这期教程就到这儿了,如果教程对你有用,欢迎关注学驿站,可以学习更多的电脑、网络和数码使用技巧。

最后修改:2024 年 07 月 15 日
如果觉得我的文章对你有用,请随意赞赏