1. 背景

本来是使用FRP服务器来提供对外的网站服务的,但是FRP都是通过转发来实现,受到云服务器带宽的限制,如果想要远程看家里NAS里的视频就没法实现了,所以通过ZeroTier组建虚拟局域网,通过P2P进行连接,有效提高网速。

1.1 概念

本次使用ZeroTier需要在官网进行注册,然后需要准备一个公网服务器充当Moon服务器。这里说一下几个概念,本次搭建使用ZeroTier和Moon服务器。

PLANET 行星服务器,Zerotier 根服务器
MOON 卫星服务器,用户自建的私有根服务器,起到代理加速的作用
LEAF网络客户端,就是每台连接到网络节点

ZeroTier Moon 是一种辅助节点,充当中继点(但并不是中央服务器),通过配置 Moon 后,所有节点会优先尝试通过 Moon 节点建立直接连接,适用于需要内网穿透,且希望优化设备间连接的场景。

1.1 搭建条件

  • 一台拥有公网 IP 的服务器(例如云服务器)。
  • 已安装 ZeroTier 并完成基本配置。

2. 搭建

首先需要注册服务器,进入如下网站进行注册:

1
https://my.zerotier.com/

正常点击下一步就可以注册,注册完毕以后,记录NETWORK ID。

2.1 服务器安装Moon节点

2.1.1 安装ZeroTier

登录公网服务器,使用命令行:

1
curl -s https://install.zerotier.com/ | sudo bash

安装后显示Success则表示安装成功,输入如下指令,表示设置开机启动,并启动ZeroTier服务。

1
2
3
4
5
# 设置开机启动并使能
sudo systemctl start zerotier-one.service
sudo systemctl enable zerotier-one.service
# 查看程序状态
sudo systemctl status zerotier-one.service

如果显示Executing: /lib/systemd/systemd-sysv-install enable zerotier-one表示启动成功,则加入ZeroTier网络,这里的网络就是在ZeroTier的官网的网络。

1
sudo zerotier-cli join 你的网络ID

如果显示200 join OK表示加入成功。

2.1.2 配置Moon节点

首先生成moon文件:

1
2
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json

编辑Moon.json的文件:

1
sudo vi moon.json

将 stableEndpoints 修改为服务器的 IP 地址,并添加对应的端口号,默认端口号9993。
请注意,端口号必须是在防火墙添加可以对外提供的

1
"stableEndpoints": ["服务器IP地址/9993"]

然后生成签名文件:

1
sudo zerotier-idtool genmoon moon.json

显示wrote 000000xxxxxxx.moon (signed world with timestamp xxxxxxxx),表示执行成功。

2.1.3 加入Moon节点

执行以下命令:

1
2
sudo mkdir moons.d
sudo mv 000000xxxxxxx.moon moons.d/

然后重启服务器 zerotier:

1
sudo systemctl restart zerotier-one

2.1.4 配置服务器安全组

在共有云服务器中的安全组允许如下规则:

  • 协议:UDP
  • 端口范围:9993
  • 来源:0.0.0.0/0 或指定可信设备的 IP 范围。
    注意:是要允许UDP策略

3. OpenWrt配置

因为 OpenWrt var 目录是一个内存虚拟的临时目录,重启后原有配置不会保留。ssh 连接 OpenWrt,执行命令 vi /etc/init.d/zerotier,在 add_join() { 上方插入两行代码:

1
2
mkdir -p $CONFIG_PATH/moons.d
cp /root/moons.d/* $CONFIG_PATH/moons.d/

修改完成后在 /root 目录下创建 moons.d 文件夹,并将 000000xxxxxxx.moon 上传到该文件夹下,然后在 Web 界面重启 Zerotier ,然后重新查看

1
2
ls /var/lib/zerotier-one/moons.d/000000xxxxxxx.moon
/var/lib/zerotier-one/moons.d/

如果能看到对应的000000xxxxxxx.moon说明程序启动,可以通过以下命令验证:

1
2
3
4
5
6
# 查看zerotier是否正确启动
zerotier-cli info
# 查看openwrt是否加入Moon节点
zerotier-cli orbit 000000xxxxxxx.moon 000000xxxxxxx.moon
# 查看zerotier的节点信息
zerotier-cli listpeers

4. IOS配置

  1. 在 App Store 搜索 ZeroTier One,下载安装。
  2. 打开 ZeroTier 应用,登录后点击右上角的加号。
    • 输入 ZeroTier 网络的 Network ID(可以在 ZeroTier 控制台查看)。
    • 点击加入网络后,等待分配虚拟 IP。
  3. 在 ZeroTier 应用中,检查是否已分配到虚拟 IP(如 192.168.192.x)。
    • 确认与家里设备分配的虚拟 IP 在同一个网段。
      这个时候虽然添加了对应的Network ID,但是点开服务器,会看到Status的状态是Access Denied,说明没有在ZeroTier加白。

5. ZeroTier根服务器配置

5.1 加白配置

登录 ZeroTier 官方控制台:https://my.zerotier.com,选择你正在使用的 ZeroTier 网络 ID,选择对应的ID进行授权。

5.2 允许客户端内网NAT

首先要在路由器上打开允许客户端NAT访问内网的开关,然后在ZeroTier的高级设置中添加对应的路由表。

1
2
Target: 192.168.1.0/24 
Via: 155.144.40.4
  • 192.168.1.0/24 是 OpenWRT 的内网地址段。
  • 155.144.40.4 是 OpenWRT 在 ZeroTier 网络中的虚拟 IP。