通常,ZeroTier 虚拟网络与您的普通 Internet 连接和其他网络一起运行。如果您想通过 ZeroTier 路由所有 Internet 流量,您需要将其配置为默认路由覆盖又名“完整隧道”模式,并在您的虚拟网络上设置路由器/网关。
第 1 步:将边缘路由器放在您的虚拟局域网上
ZeroTier 创建了虚构的 LAN。默认路由覆盖意味着您想象中的 LAN 上的计算机将通过它路由 Internet 流量。就像真正的 LAN 一样,您想象中的 LAN 现在需要一个网关。此处的设置几乎与您为传统有线 LAN 配置 NAT 网关所做的设置相同。
VPS是一个很好的低成本网关。对于大多数应用程序,每月 5 美元的选项已经绰绰有余,因为您的网关不需要太多的 RAM、磁盘或 CPU。或者,您可以在您自己的位置使用虚拟机或物理设备,或者其他任何可以运行 ZeroTier 并配置为路由 IP 数据包的设备。(用 35 美元的 Raspberry Pi 替换您的 VPN 设备?)
在您的网关上安装 ZeroTier,加入您的网络并对其进行授权,然后将其配置为基本的 IPv4 NAT 路由器。(正如我们上面提到的,IPv6 还没有经过测试,但是一旦我们这样做了,我们就会更新它。)这是我们在 Digital Ocean 上为我们自己的 ZeroTier 公司内部网创建的 CentOS/Linux 网关的示例配置:
net.ipv4.ip_forward = 1 |
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth0 -s 10.6.4.0 /22 -j SNAT --to- source 45.32.69.220 COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD DROP [0:0] -A FORWARD -i zt+ -s 10.6.4.0 /22 -d 0.0.0.0 /0 -j ACCEPT -A FORWARD -i eth0 -s 0.0.0.0 /0 -d 10.6.4.0 /0 -j ACCEPT :OUTPUT ACCEPT [0:0] COMMIT |
我们的网络是 10.6.4.0/22。您需要将其更改为您使用的任何 IPv4 方案。还要将 SNAT 行中的 45.32.69.220 更改为网关的公共 IP。 如果您的“路由器”没有公共 IP 地址,您可以使用伪装而不是 SNAT。见文末。
该文件取决于CentOS/Fedora上的软件包: /etc/sysconfig/iptables
iptables-services
yum install -y iptables-services systemctl enable iptables systemctl start iptables |
Debian 和其他发行版有自己的方法,因此您必须弄清楚这一点。
步骤 2:添加默认路由
登录 ZeroTier Central 并通过新虚拟边缘路由器的 IP 地址添加到 0.0.0.0/0 的路由。
这是我们的样子:
在我们的网络上,10.6.4.0/22 是我们的网络,10.6.6.2 是我们的虚拟边缘路由器的内部 IP 地址(ZeroTier 网络内部)。显然,您会想要使用自己网络的 IP 而不是我们的。
如果您运行自己的控制器,则必须通过其本地 JSON API 执行相同操作。
步骤 3:允许成员设备上的默认路由覆盖
ZeroTier 使加入虚拟网络就像加入聊天室一样简单。因此,我们的许多用户确实以这种方式使用它。“嘿,加入网络### 并查看我的新网站设计...”这就像真正的社交网络!(或社交实际网络?)
加入网络总是会让您面临一定程度的安全风险。您不应该加入由您不信任的人运营的网络。但由于人们确实随意使用 ZeroTier,我们希望通过要求用户批准网络来做真正侵入性的事情来至少稍微降低这种风险……例如接管您的 Internet 连接并通过它们路由您的所有流量。
为了限制这种危险的网络设置,我们引入了本地网络权限。要使用默认路由覆盖,您必须在相关网络上将 allowDefault 设置为 true。Mac 和 Windows 客户端具有执行此操作的 UI。以下是通过命令行执行此操作的方法:
sudo zerotier-cli set <networkId> allowDefault= 1 |
设置这些选项后,尝试点击http://ifconfig.io/并检查您的外部 IP。在某些操作系统上,您可能需要重新启动 Web 浏览器和其他应用程序,因为操作系统在将路由更改应用于现有套接字和连接还是仅对新套接字和连接应用路由更改方面有所不同。(这是我们无法更改的操作系统级行为。)
如果它不起作用,请像往常一样使用主机上的 traceroute 和网关上的 tcpdump 进行调试。
避免同时在多个网络上启用 allowDefault。这样做的结果将取决于您的操作系统,但也不太可能是您想要的。(在 GUI 中,我们可能会禁止这样做。)
步骤 3a:Linux 陷阱:rp_filter
Linux 的网络堆栈很复杂,而且功能丰富得几乎荒谬。这是好事也是坏事。你几乎可以用它做任何事情,可能包括但不限于通过鸟类运营商的 IP。但它也有很多奇怪的小边缘情况可以咬人。
对于通过 ZeroTier 网络路由的 Linux 主机,您可能(取决于发行版)需要更改名为 rp_filter 的设置:
sudo sysctl -w net.ipv4.conf.all.rp_filter= 2 |
RedHat 有一篇文章解释了这个细节。将其放在 /etc/sysctl.conf 中以使其永久化。
奇怪的是,网关/路由器不需要这样做,只有运行 Linux 的参与成员想要启用allowDefault
.