最好用的内网穿透 / 异地组网 / 家庭 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 节点到其内部网络的路由。这样所有节点都可以互访各自的内部网段。具体步骤:
- 在 zerotier web dashboard 添加通过某个节点到其内部网段路由。
- 如果该节点就是其所属的内部网段的网关(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