在上一篇搭建zerotier网络的教程,我们成功地搭建了zerotier网络,达成了远程办公的目的,你甚至还可以坐在星巴克咖啡厅里,跟生意伙伴商务活动的同时,随时调用公司内部的共享数据资料,这也是科技进步给我们带来的种种便利之一。
在zerotier网络体系中,根服务器(root server)被称为星球(planet),而每一台联网设备都被称为叶子(leaf),两台星球之间是通过星球节点握手建立隧道连接的,而zerotier作为一家总部位于加州的美国公司并没有在中国设有根服务器,因此在两台设备连接时受制于星球节点的连接质量,不免要产生高延迟,因此我们可以按照官方指引来搭建月亮(moon)节点,让设备相互连接时通过我们自己搭建的月亮节点来握手建立隧道,从而降低握手时的网络延迟、也提高联网稳定性和安全性。
首先要说明的是,搭建月亮节点的服务器对硬件要求不高,但是必须有公网IP地址,如果公司的网络环境不具备条件,可以通过购买云计算服务器来实现。现在国内的云计算服务商主要有阿里云、华为云、腾讯云、天翼云等,都可以满足你的需要,这些供应商时常有打到骨折的优惠活动,每年一两百元人民币的成本也不是什么压力,再者说来,这一台云计算服务器还可以同时为你搭建网站或者其他的应用。如果对于搭建moon节点还没有信心,可以到这些云计算供应商的国际站点注册,薅一台免费试用2-3个月的服务器来测试,其实这些云计算的香港节点与大陆站点相比延迟也差不了多少;当然国际大厂也有羊毛可以薅,谷歌云、甲骨文云、亚马逊云、微软云都提供免费试用的云主机,甲骨文云还提供终身免费的选项。
下面我就用一台全新的甲骨文云服务器教大家如何搭建自己的moon节点。
新建一台1核CPU1G内存的服务器,系统ubuntu20.04LTS,
分配IP地址,
添加ipv6路由表,
添加网络安全列表,增加出入站规则,放行出入站流量,
先测一下ping值,
用SSH客户端应用程序连接主机,
获取root权限,
sudo -i
更新可安装软件包的列表,
apt update
更新可升级软件包,
apt upgrade
查看服务器防火墙状态,
如果防火墙处于活动状态,需要执行以下步骤,
添加服务器防火墙规则,放行9993端口,
ufw allow 9993/udp
重启防火墙,让规则生效
ufw reload
查看端口是否放行。
ufw status
安装zerotier,
curl -s | sudo bash
加入ZeroTier网络,
zerotier-cli join
返回 200 join OK
(离开zerotier网络的命令:zerotier-cli leave )
验证是否联网,
zerotier-cli listnetworks
生成moon模板,
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json
修改moon.json,
vi /var/lib/zerotier-one/moon.json
进入编辑状态,
修改"stableEndpoints"为服务器公网IP,
"stableEndpoints": ["152.67.193.30/9993","2603:c024:b:a100::30/9993"]
退出编辑状态,
Esc
保存。
:wq
这是命令行修改模式,也可以利用finalshell自带的文本编辑模式,需要注意的是,文本编辑模式需要直接用root登录,否则,会因为权限不够而失败,
通过文件管理器进入zerotier安装目录并找到moon.json,
/var/lib/zerotier-one/moon.json
点击鼠标右键,打开文件,
在文本编辑器中修改"stableEndpoints"为服务器公网IP,
点击菜单保存,等待右上角文件状态显示“已完成”表示修改成功,
点击右上角【X】关闭文本编辑器回到命令行页面。
生成签名文件,
zerotier-idtool genmoon moon.json
执行之后会生产一个000000xxxxxxxxxx.moon(前六位是零,后十位是节点ID)的签名文件,下载moon签名文件备用,
通过文件管理器进入zerotier安装目录并找到000000xxxxxxxxxx.moon,
/var/lib/zerotier-one/000000xxxxxxxxxx.moon
点击鼠标右键,选择下载,等待右上角文件状态显示“已完成”表示下载成功,默认的保存位置在电脑桌面上的一个名为“fsdownload”的文件夹里,备用。
将moon节点加入网络,
mkdir moons.d
mv ./*.moon ./moons.d/
这一步骤也可以使用文本编辑模式,首先建立moons.d目录,然后把下载的000000xxxxxxxxxx.moon上传到目录中就OK,
重启zerotier,
service zerotier-one restart
验证moon节点是否正常联网,
zerotier-cli listmoons
至此,moon节点搭建完成。
接下来,将联网设备加入moon节点,有命令行模式和文本编辑模式,我分别用windows客户端和openwrt路由器来介绍,
打开已连接zerotier的电脑的命令行,先测个没有加入moon节点的ping值,
进入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
(离开moon节点的命令:zerotier-cli orbit xxxxxxxxxxx xxxxxxxxxxx)
验证是否加入moon节点,
C:\Program Files (x86)\ZeroTier\One>zerotier-cli listpeers
列表中有“MOON”表示已成功加入moon节点,
查看moon节点信息,
C:\Program Files (x86)\ZeroTier\One>zerotier-cli listmoons
用文本编辑模式将另一个局域网已经加入zerotier网络的openwrt路由器加入moon节点,
通过文件管理器进入zerotier目录,
/etc/config/zero
或者软连接:/var/lib/zerotier-one
点击鼠标右键新建文件夹moons.d,
进入moons.d目录,点击鼠标右键上传文件,
进入fsdownload目录,找到刚刚下载的000000xxxxxxxxxx.moon文件,确认,等待右上角文件状态显示“已完成”表示上传成功,刷新页面,可以显示文件,
重启zerotier,
service zerotier restart
验证是否加入moon节点,
列表中有“MOON”表示已成功加入moon节点,
至此,openwrt路由器已成功加入moon节点。
两台联网设备都打开ipv6,测个ping值,在两台设备同城并且是同一个宽带接入商(中国移动)的条件下,ping值6毫秒左右,这个级别的ping值,在感觉上基本与局域网内设备的相互连接没有区别。这是由于zerotier在两个具有公网ipv6设备之间直接建立了隧道连接,不再需要多层NAT地址转换。
需要说明的是,搭建moon节点是为了替代planet节点在联网设备握手时的作用,降低设备之间握手时的延迟,也提高你的zerotier网络的稳定性和安全性,并不能直接降低联网设备相互访问时的ping值。也许有人会质疑,既然有了公网ipv6,直接用ipv6不就可以了吗?在实际应用场景中绝大多数ipv6都是动态的,并且ipv6的地址都很难记住,不适合日常应用的场景,当然你设置了ddns除外。
好了,这期教程就到这儿了,如果教程对你有用,欢迎关注学驿站,可以学习更多的电脑、网络和数码使用技巧。