通过 ZeroTier 异地组网 实现远程访问局域网
前言
ZeroTier 是一款与 Tailscale 类似的异地组网工具,它可以将不同网络环境的设备组成一个虚拟局域网,使其可以互相访问。我们只需要在路由器或者 Nas 上安装 ZeroTier 进行组网,就可以实现以下效果:
- 连接到 ZeroTier 的设备,可以直接使用内网 IP 访问家庭局域网
- 内网设备可以直接使用 ZeroTier 分配的 IP 来访问连接到 ZeroTier 的设备
- 支持多个局域网互相访问,每个局域网只需一台设备安装 ZeroTier (每个局域网的网段不能相同)
与 Tailscale 相比,在使用上 ZeroTier 主要有以下几点不同:
- ZeroTier 只需网络号 (Network ID) 即可完成组网,无需登录账号,方便邀请朋友加入
- ZeroTier 可以自定义虚拟网络的网段与每个设备的 IP
- ZeroTier 设置访问整个局域网需要配置 iptables,比起 Tailscale 较为繁琐
安装步骤
- 打开 ZeroTier 官网,点击右上角的 Login,可以直接选择 Google 或者 Microsoft 授权登录
- 根据提示下载对应平台的客户端
- Android (国区 Play Store 无法直接下载,可以在 APKMirror 下载)
- Linux 一键安装脚本
curl -s https://install.zerotier.com | sudo bash
- 卸载:
dpkg -P zerotier-one
rm -rf /var/lib/zerotier-one/
- 登录成功后,点击最上方的 Create A Network 创建一个网络
- 创建成功,进入该网络的设置,将 Access Control 设置为 Private,name 可以随意填写,同时记下 Network ID
- 下面来到网段的设置,没有特殊需求的话,在下方任意选择一个即可
- 如果需要自定义的话则需要点击 Advanced 后,将其中自带的网段进行删除,然后在上方填写想要的网段,下方填写地址池 (类似DHCP地址池)
- 有图形化界面的平台,直接填入刚刚记下的 Network ID 即可;而在无图形化界面的平台上,需要输入
zerotier-cli join <Network ID>
- 返回到 ZeroTier 控制面板,在下方设备列表中,勾选加入网络的设备;同时记下设备的 IP
- 完成以上步骤后,启动客户端,即使用列表中的 IP 进行直接访问
访问局域网
此时,只有连接到 ZeroTier 的设备可以互相访问,并不能直接使用内网 IP 来访问整个局域网,我们还需要进行以下配置
开启 IP 转发
编辑
sysctl.conf
文件vim /etc/sysctl.conf
将以下代码取消注释
txt
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
- 加载内核参数
sysctl -p
配置客户端路由
- 输入
ifconfig
,记录下物理网卡以及 ZeroTier 的虚拟网卡 - 将网卡名字导出为环境变量
sh
PHYSICAL_IFACE=<物理网卡>
ZEROTIER_IFACE=<ZeroTier 虚拟网卡>
- 更新路由表
sh
iptables -t nat -A POSTROUTING -o $PHYSICAL_IFACE -j MASQUERADE
iptables -A FORWARD -i $PHYSICAL_IFACE -o $ZEROTIER_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $ZEROTIER_IFACE -o $PHYSICAL_IFACE -j ACCEPT
iptables-save
- 持久化路由表
sh
mkdir -p /etc/sysconfig/
sh -c "iptables-save > /etc/sysconfig/iptables"
- 在
/etc/rc.local
文件的末尾添加一行
txt
/sbin/iptables-restore < /etc/sysconfig/iptables
配置 ZeroTier 路由规则
- 例如我的路由器地址为 10.0.0.1,光猫地址为 192.168.1.1,则需要配置的网段为 10.0.0.0/24 与 192.168.1.0/24
- 在 ZeroTier 控制面板中,Destination 填写网段,Via 填写内网客户端的 IP 地址
经过以上设置,即可在连接 ZeroTier 后,直接使用局域网 IP 对整个局域网的设备进行访问
访问 ZeroTier 设备
通过上面的设置,已经实现了连接到 ZeroTier 的设备使用内网 IP 访问局域网,但是局域网内的设备仍然无法使用 ZeroTier 分配的 IP 来访问那些连接到 ZeroTier 的设备,我们还需要在路由器中配置静态路由
- 网络 / 主机 IP: 与 ZeroTier 网段保持一致
- 网络掩码: 与 ZeroTier 掩码保持一致 (/24 为 255.255.255.0)
- 网关: 安装 ZeroTier 设备的内网 IP
参考资料
预览: