ZeroTier 注册
ZeroTier 允许自建,无任何限制,具体参考官网文档 。
ZeroTier 提供免费服务,最多支持25个设备连接,1个管理员,对于个人来说足够使用了。在使用之前需要先去官方网站(https://www.zerotier.com)注册一个账号,成功注册之后在网络(Networks)那里创建一个私有网络(Create A Network)即可获取到16位的网络ID(Network ID)。
ZeroTier 安装
Windows、macOS、Linux、Android、iOS客户端均可以在官方网站下载。
# Windows
https://download.zerotier.com/dist/ZeroTier One.msi
# Windows 7 已不再支持,但可以使用1.6.6老版本
https://download.zerotier.com/RELEASES/1.6.6/dist/ZeroTier One.msi
# macOS
https://download.zerotier.com/dist/ZeroTier One.pkg
# Linux(DEB/RPM)
curl -s https://install.zerotier.com | sudo bash
# 获取地址和服务状态
zerotier-cli status
# 加入、离开、列出网络
zerotier-cli join <network_id>
zerotier-cli leave <network_id>
zerotier-cli listnetworks
如果有防火墙的话需要开启端口(以 ufw 为例)
ufw allow 9993/udp
Ubuntu 22.04 apt-key deprecation警告处理办法
最近部分机器升级到Ubuntu 22.04,在使用apt
命令时会有如下弃用警告:
W: http://download.zerotier.com/debian/jammy/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
可以使用如下命令修复此警告:
curl -s http://download.zerotier.com/contact%40zerotier.com.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/zerotier.gpg > /dev/null
然后使用apt update
命令,有关 zerotier 软件包存储库的警告将消失!
认证设备
客户端加入之后,需要到后台管理界面的Auth
进行勾选,即允许入网,这里还能自定义入网机器的IP地址。
ZeroTier Moons 设置
由于国内网络的复杂的情况, ZeroTier 的点与点连接很有可能建立失败。此时机器之间的连接就会绕道国外,造成较大的延迟和丢包率。这里就需要用到“自定义根服务器”,又称 Moons。通过自定义的服务器作为跳板加速内网机器之间的互相访问。
ZeroTier 定义了几个专业名词:
PLANET
行星服务器,ZeroTier 各地的根服务器,有日本、新加坡等地MOON
卫星级服务器,用户自建的私有根服务器,起到中转加速的作用LEAF
相当于各个枝叶,就是每台连接到该网络的机器节点
生成及修改 moon.json
首先登陆到具有公网IP的服务器上,以 Debian 11 为例,前往配置文件目录 /var/lib/zerotier-one
,运行命令:
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public >>moon.json
此命令会在当前目录下生成一个文件 moon.json
,内容摘自官网举例
:
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "deadbeef00:0:34031483094...",
"stableEndpoints": []
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}
其中 id
为 moon 主机在 ZeroTier 中的 id,上面的是 deadbeef00
。
修改 "stableEndpoints"
为moon主机的公网 IP/9993,9993为 ZeroTier 用到的端口,如:
"stableEndpoints": [ "1.2.3.4/9993" ]
如果公网机器有 IPv6 地址,则将其修改为
"stableEndpoints": [ "1.2.3.4/9993","2001:1bcd:abcd::1/9993" ]
生成签名文件
修改完 moon.json
后,执行命令
zerotier-idtool genmoon moon.json
此命令会生成一个签名文件在当前目录下,文件名如 000000deadbeef00.moon
( moon 服务器id 为 deadbeef00
)
将 moon 节点加入网络
在配置文件目录中建立子文件夹 moons.d
将生成的 000000deadbeef00.moon
拷贝进 moons.d
文件夹中,并重启 ZeroTier 服务。
systemctl restart zerotier-one.service
不同系统下默认配置文件目录如下:
- Windows:
C:\ProgramData\ZeroTier\One
- macOS:
/Library/Application Support/ZeroTier/One
- Linux:
/var/lib/zerotier-one
- FreeBSD/OpenBSD:
/var/db/zerotier-one
使用 moon 节点
在已组网的其他机器上使用如下命令即可使用, id
为 moon 主机在 ZeroTier 中的 id:
zerotier-cli orbit <id> <id>
zerotier-cli orbit deadbeef00 deadbeef00
验证
zerotier-cli listpeers
列表中出现带有“MOON”字样的公网 IP 节点则说明部署成功。
删除 moon 节点
zerotier-cli deorbit <id>
zerotier-cli deorbit deadbeef00
使用家里 Debian 11 服务器桥接 ZeroTier 和本地局域网
首先准备好 IP 及网段信息,具体如下:
ZeroTier 网段:10.1.0.0/16
局域网网段:192.168.3.0/24
局域网内 Debian 11 服务器的 ZeroTier IP 地址:10.1.1.11
配置 ZeroTier 托管路由
在ZeroTier 后台 添加托管路由到 ZeroTier 网络,如下所示:
Destination: 192.168.3.0/24
Via: 10.1.1.11
启用 IP 转发,配置 iptables
编辑 /etc/sysctl.conf
以启用转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
开启 MASQUERADE
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE
最后用电脑 ping 测试一下家里的设备,通了就成功了。
参考资料:
Route between ZeroTier and Physical Networks
-EOF-