ZeroTierOne创建大局域网

本文最后更新于:2024年9月16日 下午

ZeroTier原理

这个过程如下:

  • A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 R。

  • 如果 R 有直接链接到 B,它会转发数据包给 B。否则它会继续向上游发送数据包,直到达到行星根(planet)。行星根知道所有节点,所以如果 B 在线,最终数据包将到达 B。

  • R 还向 A 发送一个名为会和的消息,包含有关它如何到达 B 的提示。同时,将会和发给 B,通知 B 它如何到达 A。

  • A 和 B 获取它们的会合消息并尝试相互发送测试消息,可能会对 NAT 或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继。

  • 如果无法建立直接路径,则通信可以继续中继(速度慢)

  • ZeroTier 官方搭建了一个行星根服务器叫做地球 Earth,行星根服务器唯一的且是免费的,它记录了所有的路径信息,一般情况下大家都直接用的这个。除此之外还有 12 个遍布全球的根服务器,这些是收费的服务。所以如果使用免费套餐,连接时的延迟可能会很高,另外由于 Earth 在国外,一些不确定因素可能会影响到使用。考虑到网络的不确定性,ZeroTier 能自己创建根服务器月球 Moons,这样就能在大局域网中得到更好的体验了。

安装

ZeroTier 是跨平台的,能安装在几乎任何平台

Windows、macOS、Linux、iOS、Android、QNAP、Synology、西数 MyCloud NAS,下载地址:https://www.zerotier.com/download.shtml

在linux安装

一键安装

1
curl -s https://install.zerotier.com  sudo bash

加入网络

1
sudo zerotier-cli join <network_id>

在路由器安装

路由器推荐安装 Entware 后使用 opkg install zerotier 命令安装, vi /etc/config/zerotier,找到以下两处进行修改: config zerotier sample\_config option enabled 0 (这里把0替换成1,让选项生效) list join ‘8056c2e21c000001’ (替换为自己的网络ID),然后重启路由器

路由器防火墙配置(关键)

在防火墙->自定义规则页面,增加下面三条记录:

1
2
3
iptables -I FORWARD -i ztc3qwyx5l -j ACCEPT 
iptables -I FORWARD -o ztc3qwyx5l -j ACCEPT
iptables -t nat -I POSTROUTING -o ztc3qwyx5l -j MASQUERADE
ztc3qwyx5l是路由器的ZeroTier虚拟接口的名称,在终端可以使用ifconfig命令查看,请自行替换。

设置完成后,点击重启防火墙。

实测命令:

1
2
iptables -A FORWARD -d 192.168.50.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE

然后就发现通过学校可以访问家里的192.168.50.0/24网段了

在vps配置moon服务节点(可选操作)

安装 moon

1
curl -s https://install.zerotier.com/  sudo bash

生成moon配置文件

1
2
3
cd /var/lib/zerotier-one  #安装好zerotier后,自动会安装到此目录

sudo zerotier-idtool initmoon identity.public > moon.json #该命令将id文件转换为能用于配置的json

修改配置文件moon.json

1
"stableEndpoints": [ "23.23.23.23/9993" ] #修改为vps的ip,端口9993

该配置里面,有一个id字段,10个字符,如: ["id": "18fasd2319"], 就是moon的id, 在客户端连接时,需要用到它.

生成moon文件

1
sudo zerotier-idtool genmoon moon.json 

执行该命令后,会在在/var/lib/zerotier-one目录下生成一个类似00000018fasd2319.moon的文件..这个文件非常重要,所有的客户端要连接上moon都是依靠该文件关联的..

使moon配置文件生效

在/var/lib/zerotier-one目录下,新建一个 moons.d 文件夹,并将刚生成的moon配置文件放到该文件夹下

1
mv 00000018fasd2319.moon moons.d/

重新启动moon服务器

1
systemctl restart zerotier-one

客户端连接并使用服务器上的Moon

linux

直接在zerotier目录下,创建moons.d文件夹,并且将生成的00000018fasd2319.moon文件拷入,并重启服务即可.

Windows 10

打开C:\ProgramData\ZeroTier\One文件夹,并且在其下建立moons.d文件夹,然后将moon服务器下生成的000xxxx.moon文件,拷贝到此文件夹内..再重启该服务即可..

验证moon是否生效

必须是管理员权限运行cmd 在开始上点右键,选择windows powershell 管理员,打开窗口后再运行命令即可

1
zerotier-cli listpeers

若有类似地址,即可证明moon连接成功

200 listpeers 18fasd2319 23.23.23.23/9994;4242;4038 224 1.2.12 MOON

验证时看不到本机

其他方案

frps,nps,tinc,smartgate

使用效果记录

经过一周的试用,发现用国外的vps建立的moons节点连接速度非常慢,效果并不理想,还不如不建立moon,直接用官方的就行了。下一步打算使用一下tinc

参考教程

padavan安装zerotier: https://www.right.com.cn/forum/thread-367080-1-1.html


ZeroTierOne创建大局域网
https://andyppang.github.io/2020/10/15/ZeroTierOne创建大局域网/
作者
PL
发布于
2020年10月15日
许可协议