ZeroTier内网穿透
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 | # 设置开机启动并使能 |
如果显示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 | cd /var/lib/zerotier-one |
编辑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 | sudo mkdir 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 | mkdir -p $CONFIG_PATH/moons.d |
修改完成后在 /root 目录下创建 moons.d 文件夹,并将 000000xxxxxxx.moon 上传到该文件夹下,然后在 Web 界面重启 Zerotier ,然后重新查看
1 | ls /var/lib/zerotier-one/moons.d/000000xxxxxxx.moon |
如果能看到对应的000000xxxxxxx.moon说明程序启动,可以通过以下命令验证:
1 | # 查看zerotier是否正确启动 |
4. IOS配置
- 在 App Store 搜索 ZeroTier One,下载安装。
- 打开 ZeroTier 应用,登录后点击右上角的加号。
- 输入 ZeroTier 网络的 Network ID(可以在 ZeroTier 控制台查看)。
- 点击加入网络后,等待分配虚拟 IP。
- 在 ZeroTier 应用中,检查是否已分配到虚拟 IP(如
192.168.192.x
)。- 确认与家里设备分配的虚拟 IP 在同一个网段。
这个时候虽然添加了对应的Network ID,但是点开服务器,会看到Status
的状态是Access Denied
,说明没有在ZeroTier加白。
- 确认与家里设备分配的虚拟 IP 在同一个网段。
5. ZeroTier根服务器配置
5.1 加白配置
登录 ZeroTier 官方控制台:https://my.zerotier.com,选择你正在使用的 ZeroTier 网络 ID,选择对应的ID进行授权。
5.2 允许客户端内网NAT
首先要在路由器上打开允许客户端NAT访问内网的开关,然后在ZeroTier的高级设置中添加对应的路由表。
1 | Target: 192.168.1.0/24 |
192.168.1.0/24
是 OpenWRT 的内网地址段。155.144.40.4
是 OpenWRT 在 ZeroTier 网络中的虚拟 IP。