跳转至

通过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.confallowDefault=0改为allowDefault=1,即可达到同样的效果。

手机

​ 手机就不演示了,很好找相关配置,AndroidISO都一样的配置,我测试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这个我的虚拟网卡,请用ifconfigip 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去处理
  1. 验证设置
  2. 使用ping测试从异地设备访问10.0.0.0/24网络的设备。
  3. 使用curlping测试异地设备访问互联网。

常见命令

  • 查看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.confnetwork.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。