一、前言

因为家里有机柜和在多地云服务想要互联起来,刚开始参考了许多的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
2
3
4
5
6
7
8
root@szcn:~# zerotier-cli peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
778cde7190 - PLANET 220 DIRECT 2656 77480 103.195.103.66/9993
cafe04eba9 - PLANET 192 DIRECT 32670 197591 84.17.53.155/9993
cafe80ed74 - PLANET 180 DIRECT 32670 177586 185.152.67.145/9993
cafefd6717 - PLANET 182 DIRECT 32670 197601 79.127.159.187/9993

这是香港服务器连接到官方ZeroTier Planet的延迟

1
2
3
4
5
6
7
root@hk-node0:~# zerotier-cli peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
778cde7190 - PLANET 211 DIRECT 29483 104334 103.195.103.66/9993
cafe04eba9 - PLANET 234 DIRECT 29483 164379 84.17.53.155/9993
cafe80ed74 - PLANET 140 DIRECT 29483 164472 185.152.67.145/9993
cafefd6717 - PLANET 49 DIRECT 4463 876 79.127.159.187/9993

可以看到大部分节点都在美国等地方,没有对中国优化

当然部署自己的根服务器需要有固定公网 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

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

这里有两个选择