這篇中階教程從這個網絡拓撲圖説起。
本文教大家如何通過 ZeroTier 讓拓撲圖中的 兩台 PC、兩台 Router、兩台 Server、iPhone 之間可以互相訪問。
初階方案
如果讀過初階教程,那一定能想得到最容易的方法:在所有的設備上都安裝 Zerotier 就可以實現互相訪問的目的。但這也是最麻煩的方法,畢竟要在所有設備上安裝 ZeroTier。
正確的做法是什麼?
只需要在兩台 Router 上安裝 ZeroTier 並正確配置 路由表 和 防火牆 即可。
正式開始
- 在 Router1 上安裝 Zerotier,並填寫 network ID 加入 ZeroTier 網絡
- 假設 ZeroTier 為 Router1 分配的 IP 為 10.10.10.11
- 在 ZeroTier 官網設置 Managed Routes 選項 如下圖填寫:
- 點擊加號,等待生效。
- 配置 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
- 為了測試 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 類似。
- 在 Router2 上安裝 Zerotier,並填寫相同 network ID 加入 ZeroTier 網絡
- 假設 ZeroTier 為 Router2 分配的 IP 為 10.10.10.12
- 在 ZeroTier 官網設置 Managed Routes 選項 如下圖填寫:
- 點擊加號,等待生效。
- 配置 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
- ZeroTier 一定要安裝路由器上才能實現組網嘛?
- 不,只要能運行 ZeroTier 的設備加上正確的路由表都可以實現。只是在路由器(網關上)某些配置更加方便。
- 只能兩個局域網互相訪問嘛?
- 當然可以更多
- 延遲如何?
- 實測在 4G 網絡下十分不穩定。
- 在固網(寬帶)的情況下很穩定