你是否有一些家中的设备无法运行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 pi@raspberrypi.local
或者
ssh pi@
-
更新操作系统:
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和本地网络之间的桥接,以便更轻松地管理和访问你的设备。