一、前言
因为家里有机柜和在多地云服务想要互联起来,刚开始参考了许多的VPN协议,最后选到了ZeroTier作为互联的协议。
与众多的VPN协议对比
| ZeroTier | WireGuard | Tailscale | |
|---|---|---|---|
| 核心技术 | 私有协议 | 原生WireGuard协议 | 魔改WireGuard协议 |
| 网络模型 | Layer2(类似交换机) | Layer3/残血Layer2 | Layer3 |
| NAT打洞 | UDP协议打洞 | 协议本身不包含NAT穿透 | STUN打洞 |
| 中继能力 | Moon节点(UDP Direct/TCP Relay) | 无 | DERP节点(TCP中TURN协议) |
| 性能 | 高 | 非常高 | 非常高 |
| 跨平台能力 | 较好 | 集成于Linux内核 | 较好 |
相对比来说ZeroTier是比较符合我这种爱折腾的玩家使用,以及后期我将会在这个网络中跑动态路由协议,Layer2层VPN支持的协议比Layer3层的协议多,综合下来我选择了ZeroTier作为我的主要网络组网核心。
二、搭建
ZeroTier可以使用官方的根服务器和自己的根服务器
| 自用Planet | 官方Planet | |
|---|---|---|
| 服务器位置与性能 | 服务器可自行选择,延迟更低,连接更稳定,尤其适合国内组网 | 服务器主要在海外,国内访问可能延迟高、不稳定 |
| 控制权与灵活性 | 完全自主控制,网络配置和优化自由度极高 | 受限于官方规则,网络配置灵活性较低 |
| 安全性 | 流量不经过第三方,私有化部署,安全性更高 | 数据经由官方服务器,依赖官方安全措施 |
| 成本 | 需自行承担云服务器费用(部分优化线路宽带流量可能价格非常高昂) | 无 |
| 技术门槛 | 需要一定的运维能力,而且部分客户端适配起来可能比较麻烦 | 即装即用,几乎没有技术门槛 |
| 网络规模与依赖 | 避免了对官方服务的依赖,但是自己的服务器挂壁了那就无法连接到Peer服务器了 | 依赖官方服务,若官方服务器故障可能影响网络 |
最后我还是选择了自行搭建Planet服务器,因为相对于官方的Planet服务器来说,就算香港连接,延迟也是一样很高,而且Planet服务器会影响到UDP打洞的性能和成功率
这是深圳服务器连接到官方ZeroTier Planet的延迟
1 | root@szcn:~# zerotier-cli peers |
这是香港服务器连接到官方ZeroTier Planet的延迟
1 | root@hk-node0:~# zerotier-cli peers |
可以看到大部分节点都在美国等地方,没有对中国优化。
当然部署自己的根服务器需要有固定公网 IPv4/IPv6,因为在官方的根文件中指定了仅解析到指定的IP段,如果是动态公网 IPv4/IPv6需要配合DDNS使用,每次更新IP之后需要手动编译mkworld文件指定到根服务器的IP上。
可以选择无根部署,使用官方的根服务器然后用自己部署的Controller进行管理整个ZeroTier网络。
这里我选用的是ZTNet进行部署,这个对配置是有稍微的要求的,如果使用传统的部署方式是需要2G以上的内存进行编译,要不然就创建足够的SWAP分区让编译的时候内存不会爆掉,如果是1G内存的推荐使用Docker方式部署。
| Docker部署 | 传统部署方式 | |
|---|---|---|
| 网络支持完整度 | Only IPv4 (经过测试IPv6容易连接失败) | 双栈 |
对于需要双栈网络来说更加推荐使用传统编译方式进行部署,使用Docker部署可能会出现在公网IP处显示容器的网桥IP
我们现在先使用传统部署方式进行操作。
根据官方的文档先更新系统以及
1 | apt update && apt install -y sudo curl lsb-release |
然后运行
1 | curl -s http://install.ztnet.network | sudo bash |

此处输入你的VPS公网IP
此处输入设置ZTNET数据库的密码
然后用最简输出回车等待安装完毕即可。
现在已经安装完毕,创建第一个账户
创建完成账号完成登录
创建第一个网络
这里有两个选择
