你是否有一些家中的设备无法运行ZeroTier?你是否想要远程访问这些设备?你是否已经在使用ZeroTier?你可以使用一台小型Linux PC作为ZeroTier虚拟网络和物理网络之间的桥接设备。
假设和要求
在开始之前,请确保满足以下假设和要求:
- 你正在在家庭网络上进行操作,并可以登录到你的路由器并找到DHCP设置。
 - 你有一个键盘、显示器和以太网电缆连接到你的树莓派。因为在配置过程中可能会破坏网络,导致无法远程连接,所以这些物理设备很重要。
 - 你对命令行和SSH有一定的了解。
 - 本教程将使用systemd networking。如果你对systemd有异议,你可能需要自行适应不同的Linux网络配置系统。
 - 我们在编写本文时使用的是树莓派2,但树莓派3或4也应该可以正常工作。任何运行基于Debian 10的发行版的设备都应该可以正常工作。不一定非要使用树莓派,但某些指令可能特定于Raspbian系统。
 
准备信息
在开始之前,请准备以下信息以在配置过程中使用:
- 物理LAN子网
 - 物理LAN DHCP范围
 - ZeroTier自动分配范围
 - 默认网关IP地址(路由器)
 - 桥接IP地址(将静态分配)
 - 创建一个新的ZeroTier网络并获取其ID。保留旧网络以作为连接已使用ZeroTier的设备的备用方法。
 - DHCP范围和ZeroTier自动分配范围应该位于相同的子网中,但不重叠。你可能会基于已在你的路由器上配置的内容进行设置。
 
以下是一个示例计划:
- 物理LAN子网:192.168.192.0/24
 - 物理LAN DHCP范围:192.168.192.65到192.168.192.126
 - ZeroTier自动分配范围:192.168.192.129到192.168.192.190
 - 默认网关IP地址:192.168.192.1
 - 桥接IP地址:192.168.192.2/24(或使用DHCP)
 - ZeroTier网络ID:d5e04297a19bbd70
 
步骤
步骤1:使你的桥接设备运行起来
首先,确保你的树莓派设备已经启动并运行。按照以下步骤进行操作:
- 
遵循树莓派的安装指南,下载并安装操作系统。你可以使用以下版本:Raspbian Buster Lite。
 - 
启用SSH以便远程登录到树莓派,详细说明请参考这里。
 - 
使用SSH连接到树莓派,例如:
ssh [email protected]或者
ssh pi@<树莓派的IP地址> - 
更新操作系统:
sudo apt update && sudo apt -y full-upgrade && sudo reboot - 
在重启后重新登录。
 
步骤2:安装ZeroTier
接下来,安装ZeroTier。请遵循Linux系统的安装指南,具体指南请参考这里。基本上,你可以运行以下命令:
curl -s https://install.zerotier.com | sudo bash
在安装完成后,设置一些shell变量以在后续配置中使用:
NETWORK_ID=<你的网络ID>
BR_IF="br0"
BR_ADDR=<你的桥接地址>
GW_ADDR=<你的网关地址>
然后,加入ZeroTier网络:
sudo zerotier-cli join $NETWORK_ID
sudo zerotier-cli listnetworks
我们不希望ZeroTier在$ZT_IF上管理地址或路由,我们会在下面的步骤中手动进行配置。
sudo zerotier-cli set $NETWORK_ID allowManaged=0
再设置一个变量,用于存储ZeroTier网络接口的名称,你可以从listnetworks输出中找到它,它通常会类似于:zt3jvirser。
ZT_IF=<你的ZeroTier接口名称>
步骤3:在my.zerotier.com上配置设备
前往my.zerotier.com,找到你的ZeroTier网络($NETWORK_ID),然后在“Members”部分添加你的设备。打开高级设置的扳手图标,并选中以下选项:
- 允许桥接
 - 不自动分配
 - 授权成员
 
步骤4:切换到systemd networking
现在,我们将切换到systemd networking。首先,删除已有的网络配置:
sudo apt remove --purge --auto-remove dhcpcd5 fake-hwclock ifupdown isc-dhcp-client isc-dhcp-common openresolv
然后,启用systemd-networkd:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf;
sudo systemctl enable systemd-networkd;
sudo systemctl enable systemd-resolved;
sudo systemctl enable systemd-timesyncd;
接下来,配置网络接口。我们将在下面的步骤中创建网络配置文件。以下是示例配置文件:
cat << EOF | sudo tee /etc/systemd/network/25-bridge-br0.network
[Match]
Name=$BR_IF
[Network]
Address=$BR_ADDR
Gateway=$GW_ADDR
DNS=1.1.1.1
EOF
cat << EOF | sudo tee /etc/systemd/network/br0.netdev
[NetDev]
Name=$BR_IF
Kind=bridge
EOF
cat << EOF | sudo tee /etc/systemd/network/25-bridge-br0-zt.network
[Match]
Name=$ZT_IF
[Network]
Bridge=$BR_IF
EOF
cat << EOF | sudo tee /etc/systemd/network/25-bridge-br0-en.network   
[Match]
Name=eth0 # 可能是en*
[Network]
Bridge=$BR_IF
EOF
完成配置后,请检查网络配置文件:
tail -n+0 /etc/systemd/network/*
如果需要,使用你喜欢的文本编辑器编辑这些文件。如果一切看起来正常,重新启动树莓派以应用配置:
sudo reboot
你现在应该能够从物理LAN连接到树莓派,使用$BR_ADDR作为目标地址。
如果在启动过程中等待网络连接时间较长,有时物理接口可能会出现长的“可预测接口名称”,例如“enb827eb0d4176”,有时只是“eth0”,这取决于Raspbian版本。如果出现这种情况,请连接键盘和显示器,并检查/etc/systemd/network/25-bridge-br0-en.network以匹配接口名称。
步骤5:配置ZeroTier网络
前往my.zerotier.com/network/$NETWORK_ID,然后在“设置” -> “Advanced”中进行以下配置:
- 删除默认的Managed Route,添加新的Managed Route $ZT_ROUTE
 - 将IPv4自动分配更改为Advanced,
 - 删除现有的Pool,创建新的Pool,其范围从$ZT_POOL开始和结束。
 
为了文档记录,将$BR_ADDR分配给ZeroTier桥接成员。
结论
至此,你已经成功创建了一个树莓派桥接设备,用于将ZeroTier虚拟网络和物理网络连接起来。你可以从物理LAN连接到树莓派,并通过它访问ZeroTier网络中的设备。
如果一切正常,你应该能够在一分钟后通过$BR_ADDR重新使用SSH连接到树莓派。如果有任何问题,树莓派不再在网络上,你需要使用键盘和显示器来查找问题。
希望这个教程能够帮助你成功创建一个ZeroTier和本地网络之间的桥接,以便更轻松地管理和访问你的设备。



