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

zerotier-managed-routes

启用 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-