通过Zerotier实现异地设备访问局域网并使用局域网设备上网
通过Zerotier实现异地设备访问局域网并使用局域网设备上网
网络环境
- 局域网:10.0.0.0/24
- 设备:10.0.0.52(Zerotier IP:172.25.27.213)
- 异地设备:已加入Zerotier网络,但不在10.0.0.0/24网段
系统环境
- Ubuntu22.04
目标
1.让异地设备访问10.0.0.0/24网段的设备。 2.所有流量通过10.0.0.52进行上网。
Zerotier操作
1.安装Zerotier: 根据你的操作系统,使用合适的包管理器安装Zerotier。例如,在Ubuntu上可以使用:
curl -s https://install.zerotier.com | sudo bash
2.加入Zerotier网络:
使用以下命令加入Zerotier网络(用你的网络ID替换<network_id>):
sudo zerotier-cli join <network_id>
3.确认加入状态: 运行以下命令查看Zerotier状态,确认设备已成功加入网络:
zerotier-cli info
4.取消加入Zerotier网络: 如果需要取消加入Zerotier网络,可以使用以下命令:
sudo zerotier-cli leave <network_id>
5.查看已加入的网络: 如果你想查看当前加入的所有Zerotier网络,可以运行:
zerotier-cli listnetworks
设置步骤
1.在10.0.0.52上启用IP转发:
编辑/etc/sysctl.conf,确保有以下配置:
net.ipv4.ip_forward = 1
sudo sysctl -p
解释:
这里解释一下为什么要配置net.ipv4.ip_forward = 1,配置此选项可以达到所有流量都走zerotier的作用,但是前提是在节点控制器上面需要配置静态路由,比如你想让所有流量都走zerotier分配的172.25.27.213(这里的IP是举例,根据你的节点所分配到的IP填写)这个节点,哪么就可以配置静态路由0.0.0.0/0 via 172.25.27.213,另外防火墙规则配置请看下面详解,不配置防火墙规则也可能导致无法成功让所有流量走想要走的节点。
Tips:
对于特定环境可以使用这样的访问来切换IP
Windows
在windows下开启Allow Default Router Override这样你的就会发现你的IP变成172.19.19.2的公网IP了

Liunx
在liunx下这个配置的选项在

然后nano / vi / vim (我比较喜欢用nano,用习惯了- =)编辑xxx.local.conf将allowDefault=0改为allowDefault=1,即可达到同样的效果。
手机
手机就不演示了,很好找相关配置,Android和ISO都一样的配置,我测试Android貌似有点问题。
1.查看虚拟网卡
ifconfig
ifconfig安装命令sudo apt install net-tools
网卡信息
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.1.15 netmask 255.255.255.0 broadcast 172.18.1.255
ether fa:27:a2:4d:37:9e txqueuelen 1000 (Ethernet)
RX packets 5776206 bytes 2133298429 (2.1 GB)
RX errors 0 dropped 74024 overruns 0 frame 0
TX packets 4651112 bytes 1847234212 (1.8 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ztto76lud3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800
inet 172.25.27.213 netmask 255.255.255.0 broadcast 172.25.27.255
inet6 fe80::80ea:3cff:fef4:5fb4 prefixlen 64 scopeid 0x20<link>
ether 82:ea:3c:f4:5f:b4 txqueuelen 1000 (Ethernet)
RX packets 167151 bytes 13821834 (13.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 171624 bytes 59210208 (59.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.配置iptables:
-
允许ens18与局域网之间的流量转发:
iptables -I FORWARD -i ens18 -j ACCEPT iptables -I FORWARD -o ens18 -j ACCEPT iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE -
允许Zerotier与局域网之间的流量转发:
iptables -I FORWARD -i ztto76lud3 -o ens18 -j ACCEPT iptables -I FORWARD -i ens18 -o ztto76lud3 -j ACCEPT iptables -t nat -I POSTROUTING -o ztto76lud3 -j MASQUERADE -
这里要强调一下
iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE iptables -t nat -I POSTROUTING -o ztto76lud3 -j MASQUERADE第一条是入站规则,第二条是出站规则,第二条规则不配置会导致无法成功让所有流量走想要走的节点,并且客户端不能正常上网。这里再说明一点
ztto76lud3这个我的虚拟网卡,请用ifconfig或ip a查看自己的zerotier创建的虚拟网卡。
在异地设备上设置路由:(在网络控制上设置)
此条规则是配置异地直接访问局域网的情况。
添加默认路由,指向10.0.0.52:
sudo ip route add default via 10.0.0.52
10.0.0.0/24 via 172.25.27.213
# 说明:这里是指10.0.0.0/24网段下的ip都交给172.18.2.205去处理
- 验证设置:
- 使用
ping测试从异地设备访问10.0.0.0/24网络的设备。 - 使用
curl或ping测试异地设备访问互联网。
常见命令
- 查看Zerotier状态:
zerotier-cli info - 查看已加入的网络:
zerotier-cli listnetworks - 查看iptables规则:
sudo iptables -L -v -n - 查看网络接口:
ip link show - 查看路由配置:
ip route show
Linux/Unix 系统: 配置文件通常位于 /var/lib/zerotier-one 目录下,其中 local.conf 和 network.conf 是常见的配置文件。
例如:
/var/lib/zerotier-one/identity.secret(存储节点的身份)/var/lib/zerotier-one/identity.public(存储节点的公钥)/var/lib/zerotier-one/authtoken.secret(存储用于 API 访问的密钥)
Windows 系统: 配置文件通常位于:
C:\ProgramData\ZeroTier\One\
macOS 系统: 配置文件位于:
/Library/Application Support/ZeroTier/One/
在 Linux 系统中,你可以通过以下几种方式重启 ZeroTier 服务:
1. 使用 systemctl 命令重启
Linux 发行版(如 Ubuntu、Debian、CentOS 等)上推荐的方式:
sudo systemctl restart zerotier-one
2. 使用 service 命令重启
如果你使用的是旧版本的 Linux 发行版,service 命令也可以用于重启服务:
sudo service zerotier-one restart
3. 手动停止并启动
你也可以先停止服务,再启动服务:
sudo systemctl stop zerotier-one
sudo systemctl start zerotier-one
通过这几种方式,你可以成功地重启 ZeroTier 服务。
备注
- 安全性:在使用Zerotier时,确保网络安全设置,以防止未授权访问。
- 检查连接:在配置过程中检查每一步的结果,以便及时发现和解决问题。
- 网络ID:确保你在加入和取消加入网络时使用正确的网络ID。