天涼好個秋.

ZeroTier 中阶教程

3061 阅 0 评 教程

这篇中阶教程从这个网络拓扑图说起。

本文教大家如何通过 ZeroTier 让拓扑图中的 两台 PC、两台 Router、两台 Server、iPhone 之间可以互相访问。

初阶方案

如果读过初阶教程,那一定能想得到最容易的方法:在所有的设备上都安装 Zerotier 就可以实现互相访问的目的。但这也是最麻烦的方法,毕竟要在所有设备上安装 ZeroTier。

正确的做法是什么?

只需要在两台 Router上安装 ZeroTier 并正确配置 路由表 和 防火墙 即可。

正式开始

  1. 在 Router1 上安装 Zerotier,并填写 network ID 加入 ZeroTier 网络
  2. 假设 ZeroTier 为 Router1 分配的 IP 为 10.10.10.11
  3. 在 ZeroTier 官网设置 Managed Routes 选项 如下图填写:

  4. 点击加号,等待生效。
  5. 配置 Router1 的防火墙(以 OPENWRT 路由器为例)
    # 其中 zt0 是 ZeroTier 的物理接口,可以使用  zerotier-cli listnetworks 命令查看,其中 zt0 在其他平台可能是 其他名字
    root@LEDE:~# zerotier-cli listnetworks
    200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
    200 listnetworks xxxxxxxxx MarIxs xx:xx:xx:xx:xx:xx OK PRIVATE zt0 10.10.10.11/20
    #配置防火墙
    root@LEDE:~# iptables -I FORWARD -i zt0 -j ACCEPT
    root@LEDE:~# iptables -I FORWARD -o zt0 -j ACCEPT
    root@LEDE:~# iptables -t nat -I POSTROUTING -o zt0 -j MASQUERADE
  6. 为了测试 iPhone 安装并运行 ZeroTier 并加入 ZeroTier 网络

如此 Router1 下的所有设备和 iPhone 可以互相访问了,也就是说 iPhone、Router1、PC1、Server1 任意两个之间都可以 ping 通。

比如在 iPhone 上 ping 10.10.10.11(Router1)、192.168.10.1(Router1)、192.168.10.100(PC1)、192.168.10.200(Server1) 都是没问题的。

更进一步

将 Router2 网络加入 ZeroTier,过程和 Router1 类似。

  1. 在 Router2 上安装 Zerotier,并填写相同 network ID 加入 ZeroTier 网络
  2. 假设 ZeroTier 为 Router2 分配的 IP 为 10.10.10.12
  3. 在 ZeroTier 官网设置 Managed Routes 选项 如下图填写:

  4. 点击加号,等待生效。
  5. 配置 Router2 的防火墙(以 OPENWRT 路由器为例)
    #其中 zt0 是 ZeroTier 的物理接口,可以使用  zerotier-cli listnetworks 命令查看,其中 zt0 在其他平台可能是 其他名字
    root@LEDE:~# zerotier-cli listnetworks
    200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
    200 listnetworks xxxxxxxxx MarIxs xx:xx:xx:xx:xx:xx OK PRIVATE zt0 10.10.10.12/20
    #配置防火墙
    root@LEDE:~# iptables -I FORWARD -i zt0 -j ACCEPT
    root@LEDE:~# iptables -I FORWARD -o zt0 -j ACCEPT
    root@LEDE:~# iptables -t nat -I POSTROUTING -o zt0 -j MASQUERADE

至此,拓扑图上的所有设备都可以互相访问了。而 Router1 和 Router2 所在的两个网络被无缝连接在了一起,如果两个网络在异地,那就是所谓的异地组网了。

ZeroTier 的 Managed Routes 功能

按上面教程设置后, Managed Routes 如下图,

对于熟悉路由表的朋友应该没什么难度,但对于对于网络了解很少的朋友可能会有些困难。

这里简单说明下:

  • networks/bits:填写需要被访问的网段
  • (lan):网络中接入 ZeroTier 的设备被分配的 IP

所以前面的教程例子很容易理解了,以 Router1 为例:

  • 需要被访问的是 Router1 下的设备,就是 Router1 的 lan IP 段,拓扑图上可以看出 Router1 lan IP 段为 192.168.10.1/24
  • 这部分网络,接入 ZeroTier 的是 Router1 ,被分配的 IP 为 10.10.10.11
  • 所以 networks/bits 为 192.168.10.1/24,(lan)为 10.10.10.11

用相同的思路分析 Router2 的网络,也能得到:networks/bits 为 192.168.5.1/24,(lan)为 10.10.10.12

ZeroTier 会根据你的设置,自动(智能)下发路由表到设备中,从而实现多个网段互联互通。
感兴趣的朋友可以按照教程组网,然后查看设备上路由表。

需要注意

  • 组网的多个局域网,IP 段不能冲突,
    • 如拓扑图中 Router1 192.168.10.1/24 和 Router2 192.168.5.1/24 是不冲突的。
  • 防火墙的配置可能因设备而异
    • 主要的目的是放行 ZeroTier 的数据包和 SNAT 转换。

其他 FAQ

  1. ZeroTier 一定要安装路由器上才能实现组网嘛?
    • 不,只要能运行 ZeroTier 的设备加上正确的路由表都可以实现。只是在路由器(网关上)某些配置更加方便。
  2. 只能两个局域网互相访问嘛?
    • 当然可以更多
  3. 延迟如何?
    • 实测在 4G 网络下十分不稳定。
    • 在固网(宽带)的情况下很稳定。
  4. 极路由插件什么时候出?
    • 快了快了(拖延症)

春节躺在家中刷推特,无意中发现有朋友分享初级教程到了推特上,倍感荣幸。给大家拜个晚年,新年快乐,狗年大吉~!

EOF