zerotier

zerotier

最好用的内网穿透 / 异地组网 / 家庭 VPN 方案。免费(限制是最多接入 50 个节点,以前是100个,阉割了),简单易用。

Install (Linux)

curl -s https://install.zerotier.com | sudo bash

P2P

zerotier 尽量使用 P2P 在两端节点之间直连。如果两端节点至少有一个有公网 IP,那么几乎肯定能够使用 P2P。如果两端节点都没有公网 IP,zerotier 会尝试使用 upnp 和 / 或 NAT-PMP 获取公网的端口映射,但实测不稳定。如果两端节点都没有公网 IP 并且 upnp 未成功,zerotier 会尝试使用 udp nat 打洞。最后,如果无法建立 P2P 连接,zerotier 会用服务器中转传输。

尽量在路由器上部署 zerotier 作为网关。如果路由器具有公网 IP,可以保证与其他任何安装 zerotier 的节点之间都 P2P 传输。

Managed Route

zerotier 的 Managed Route 可以设置通过某个 zerotier 节点到其内部网络的路由。这样所有节点都可以互访各自的内部网段。具体步骤:

  1. 在 zerotier web dashboard 添加通过某个节点到其内部网段路由。
  2. 如果该节点就是其所属的内部网段的网关(gateway),那么节点上无需任何额外设置。否则,需要在该节点上做 SNAT,Linux 下直接用 iptables -t nat 对流出内部网段网卡的所有流量做 MASQERADE 即可;windows 不知道怎么搞(也许用 Windows 的 Internet Connection Sharing 可以实现,没试过)。

路由冲突

某些情况下,zerotier 的 managed route 与某些机器本地路由冲突。最常见的场景是本地网络里多台机器都安装了 zerotier,其中某台设为了到本地网络各网段的 zerotier managed route 的网关,则本地网络其他安装 zerotier 的机器上的 managed route 可能会冲突,导致性能下降或网络故障。

目前 zerotier 添加的 managed route 无法设置 metric。Linux 下固定使用 main route table, metric 未设置(即为 0)。Windows 下 zerotier 添加的 route metric 由 Windows 自动设置(测试设为 200多)

这种情况可能需要手工设置路由表增加静态路由

Windows

route add -p 192.168.150.0/24 mask 255.255.255.0 192.168.130.1 metric 100
route add -p 192.168.130.0/24 mask 255.255.255.0 192.168.130.1 metric 100
route add -p 192.168.167.0/24 mask 255.255.255.0 192.168.130.1 metric 100

route 使用 -p 参数标记路由条目为 persistent。(持久化,保存到注册表里,每次 TCP/IP 协议栈初始化时会自动添加)

我遇到过傻逼 Windows 把路由错误地添加到其他网卡上,这种情况下需要手工指定网卡:

route print 查看 interface 的数字 id,例如:

===========================================================================
Interface List
 14...ff ff ff ff ff ff ......Realtek PCIe GbE Family Controller
...
===========================================================================

然后:

route add 192.168.150.0/24 mask 255.255.255.0 192.168.130.1 metric 100 if 14

Linux (由于 zerotier 添加的路由 metric 为 0,只能用 ip rule 建一个新表才能覆盖)

ip rule add table 1 prio 1
ip route add 192.168.130.0/24 dev ens3 table 1 # 本地(直连的)二层子网
ip route add 192.168.150.0/24 via 192.168.130.1 table 1 # 本地三层子网
ip route add 192.168.167.0/24 via 192.168.130.1 table 1

Last update: 2021-10-25 06:13:30 UTC