zerotier
客户端
安装
参考: https://www.zerotier.com/download/
curl -s https://install.zerotier.com | sudo bash
安装下载的依赖包挺多的:
......
*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable zerotier-one
*** Waiting for identity generation...
*** Success! You are ZeroTier address [ 7ab42fe1c1 ].
设置开机自动启动:
sudo systemctl start zerotier-one
sudo systemctl enable zerotier-one
加入网络
sudo zerotier-cli join 41d49af6c2cf7f96
注意:一定要 sudo.
Moon
Moon 是用户自建的 zerotier 的 “卫星根服务器”,可以让设备在连接时优先通过 Moon 节点发现和中继。
因为我有一台有固定 IPV4 地址的服务器, 因此安装 moon 来加速我的 zerotier 设备的相互发现速度.
安装 moon
安装 ZeroTier:
curl -s https://install.zerotier.com | sudo bash
sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one
查看节点 ID:
sudo zerotier-cli info
输出内容为:
200 info 7c134f5bbc 1.16.0 ONLINE
格式为 “200 info
注意: moon 节点不需要加入 zerotier 网络, 也就是不要需要执行 zerotier-cli join 命令.
搭建 moon
进入生成 ZeroTier 节点身份文件:
cd /var/lib/zerotier-one/
这个目录下有 identity.public, 可以用来生成 Moon 配置文件:
sudo zerotier-idtool initmoon identity.public | sudo tee moon.json > /dev/null
编辑生成的 moon.js:
vi moon.js
在 stableEndpoints 设置公网IP地址和端口:
"stableEndpoints": ["159.75.84.176/9993"]
另外记录下 id,这个后面要作为 moonID 使用.
{
"id": "7c134f5bbc",
}
签名生成 .moon 文件:
sudo zerotier-idtool genmoon moon.json
输出为:
wrote 0000007c134f5bbc.moon (signed world with timestamp 1763809887879)
把生成的 .moon 文件放到 /var/lib/zerotier-one/moons.d/ 目录下,并重启服务:
sudo mkdir -p /var/lib/zerotier-one/moons.d
sudo cp 000000*.moon /var/lib/zerotier-one/moons.d/
sudo systemctl restart zerotier-one
使用 moon
linux 客户端
在 zerotier 的客户端如另外一台 linux 机器上执行命令:
sudo zerotier-cli orbit 7c134f5bbc 7c134f5bbc
输出:
200 orbit OK
验证一下:
sudo zerotier-cli listpeers
输出的信息中有 moon 节点, 就说明成功了:
200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 41d49af6c2 35.208.126.89/24893;19203;19203 270 1.15.3 LEAF
200 listpeers 778cde7190 103.195.103.66/9993;-1;4557 300 - PLANET
200 listpeers 7c134f5bbc 159.75.84.176/9993;4857;4796 47 1.16.0 MOON
200 listpeers 9b0823e410 202.182.98.67/26883;9863;9575 261 1.14.2 LEAF
200 listpeers a0ddbe8017 192.168.4.1/9993;14869;14850 12 1.14.2 LEAF
200 listpeers a599bc239e 14.145.158.2/29427;2717;2717 174 1.10.6 LEAF
200 listpeers cafe04eba9 84.17.53.155/9993;4858;4559 249 - PLANET
200 listpeers cafe80ed74 185.152.67.145/9993;34887;174552 164 - PLANET
200 listpeers cafefd6717 79.127.159.187/9993;28942;29337 170 - PLANET
openwrt 客户端
ssh 登录 openwrt 机器或者在 pve 页面上操作控制台, 创建目录:
mkdir -p /etc/zerotier/moons.d
scp 从 moon 节点机器上复制 moon 文件过来:
scp sky@skyao.net:/var/lib/zerotier-one/moons.d/0000007c134f5bbc.moon /etc/zerotier/moons.d
再执行 orbit 命令:
zerotier-cli orbit 7c134f5bbc 7c134f5bbc
重启 zerotier:
/etc/init.d/zerotier restart
检查:
zerotier-cli listpeers
如果看到 moon 节点说明生效了:
......
# 连接 moon 中(时间大于10秒)
200 listpeers e329f95577 - -1 - MOON
# 连接 moon 完成后
200 listpeers 7c134f5bbc 159.75.84.176/9993;4857;4796 47 1.16.0 MOON
如果不再需要 moon 节点, 可以执行 zerotier-cli unorbit 命令:
zerotier-cli unorbit 7c134f5bbc
再次检查:
zerotier-cli listpeers
附录 - zerotier基本概念
节点
可以通过执行 zerotier-cli listpeers 命令列出和当前节点相关的其他对端信息,如:
200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 41d49af6c2 35.208.54.217/21040;1330;1330 -1 1.15.3 LEAF
200 listpeers 778cde7190 103.195.103.66/9993;44970;74783 197 - PLANET
200 listpeers 7ab42fe1c1 114.87.0.22/61914;1;2 28 1.16.0 LEAF
200 listpeers 9b0823e410 202.182.98.67/3126;14955;14726 229 1.14.2 LEAF
200 listpeers a0ddbe8017 121.228.151.51/64087;4947;4945 3 1.14.2 LEAF
200 listpeers a599bc239e 14.145.158.61/9993;9952;9920 32 1.10.6 LEAF
200 listpeers b23346cdea 116.21.253.112/41867;9952;6003 30 1.10.6 LEAF
200 listpeers cafe04eba9 84.17.53.155/9993;44970;74767 215 - PLANET
200 listpeers cafe80ed74 185.152.67.145/9993;44970;74828 152 - PLANET
200 listpeers cafefd6717 79.127.159.187/9993;44970;74804 178 - PLANET
200 listpeers e329f95577 159.75.84.176/27453;4947;4910 36 1.16.0 MOON
第一行标记了格式, 为 200 listpeers <ztaddr> <path> <latency> <version> <role>. 字段含义如下:
| 字段 | 含义 |
|---|---|
<ztaddr> |
节点的 ZeroTier ID(唯一标识符,通常显示前 10 位)。 |
<path> |
当前通信路径,格式为 IP:端口;本地端口;远端端口,反映 NAT 映射情况。 |
<latency> |
与该节点的延迟(毫秒),-1 表示未测到直连。 |
<version> |
对端运行的 ZeroTier 版本号。 |
<role> |
节点角色(见下表)。 |
节点角色说明:
| 角色 | 含义 |
|---|---|
| PLANET | 官方的根服务器(Earth 节点),用于节点发现和引导。 |
| MOON | 自建的 Moon 节点(自定义根服务器),客户端 orbit 后会显示。 |
| LEAF | 普通客户端节点(网络中的其他成员)。 |
实例如下:
200 listpeers cafe04eba9 84.17.53.155/9993;4587;4372 215 - PLANET
- ID:
cafe04eba9 - 路径:
84.17.53.155:9993 - 延迟: 215ms
- 版本: 未显示(可能是根节点)
- 角色: PLANET(官方根服务器)
200 listpeers e329f95577 159.75.84.176/27453;4587;4550 36 1.16.0 MOON
- ID:
e329f95577 - 路径:
159.75.84.176:27453 - 延迟: 36ms
- 版本: 1.16.0
- 角色: MOON(自建的 Moon 节点,说明客户端已成功使用)
200 listpeers a0ddbe8017 121.228.151.51/9993;14589;24587 3 1.14.2 LEAF
- ID:
a0ddbe8017 - 路径:
121.228.151.51:9993 - 延迟: 3ms(非常快,说明直连成功)
- 版本: 1.14.2
- 角色: LEAF(普通客户端)
网络速度分析, 官方的 PLANET 节点,延时都在 150 - 200 ms 期间:
200 listpeers 778cde7190 103.195.103.66/9993;44970;74783 197 - PLANET
200 listpeers cafe04eba9 84.17.53.155/9993;44970;74767 215 - PLANET
200 listpeers cafe80ed74 185.152.67.145/9993;44970;74828 152 - PLANET
200 listpeers cafefd6717 79.127.159.187/9993;44970;74804 178 - PLANET
我自己建立的 moon 服务器, 延迟是 36 毫秒,符合日常 ping 值:
200 listpeers e329f95577 159.75.84.176/27453;4587;4550 36 1.16.0 MOON