使用zerotier组建异地互访的局域网

2019年10月,向运营商租了固定公网ip,p2p方案已废弃。


  • 1

一开始我想到的是直接用端口转发解决,在网关设备上跑个端口转发软件,改一下iptables把局域网内服务器需要的端口转发出去。但经过将近一周的测试,发现问题有二:一是增加服务时要需要修改iptables规则,但是咱家做的是传统行业,没有招聘网络技术人员(也没有这个必要),维护只能我一个人做;二是端口转发受服务端性能和带宽影响严重,国外服务器延迟高,国内服务器带宽贵,实在不好选。

  • 2

既然端口转发方案不行,那就考虑p2p方案,网上搜了一圈,发现有两个现成的:zerotier-one和n2n,看过两边的文档后选择了zerotier,不用维护服务端啊喂!

  • 3

于是开搞,左边是办公室网关(GL-B1300),右边是家庭网关(GL-AR750)。

使用网关设备而不是局域网服务器接入zerotier的理由是安全性和zerotier不能windows server上稳定运行。

选择GL-B1300的原因是它用了四核cortex-a7(32位ARMv7-A架构)高通IPQ4028芯片,带有一个USB3.0接口,预留了一个USB2.0接口焊位和一个三引脚3.6v GPIO,重要的是官方支持OpenWrt

选择AR750的原因是……咱原来就买了……

(↑没错这是自来水↑)

根据官方wiki官方手册分别安装上zerotier-one、在VPS建立好MOON服务器,在zerotier管理面板https://my.zerotier.com/network建立私有network后,在终端上执行zerotier-cli join yourNetworkID加入网络,执行zerotier-cli orbit yourMOONID yourMOONID绑定MOON,执行zerotier-one -d启动程序守护进程,并在zerotier管理面板批准设备接入。

在zerotier管理面板设置两条静态路由规则,为局域网互访做准备:

新建转发到wan的接口,命名为zerotier。新建允许转发到wan的防火墙区域,命名为zerotier。可以从下图(zerotier管理面板)看到,这两个路由器已经在线了。

 

在路由器分别添加以下几条iptables规则:

iptables -I FORWARD -o -j ACCEPT
iptables -I FORWARD -i yourZerotierInterface -j ACCEPT
iptables -t nat -I POSTROUTING -o yourZerotierInterface -j MASQUERADE

最新版本的zerotier-one自带动态配置静态路由,无需自行配置路由表。

查看各客户端以及和PLANET/MOON的连接情况:zerotier-cli listpeers

其中,PLANET是zerotier官方服务器,MOON是自建的加速服务器,LEAF是终端设备。

 

  • 配置完后的测试

查看B1300的路由表,可以看到192.168.7.0/24 via 192.168.196.226192.168.196.226正是AR750在zerotier虚拟局域网中的ip。然后再确认另一部路由器中有192.168.0.0/24 via 192.168.196.151192.168.196.151是B1300在zerotier虚拟局域网中的ip。至此,确认两个局域网的lan已经连接到了一起,可以互相访问。

PING测试和traceroute测试,表明两个网关路由直接连接,连接的最大带宽取决于两边设备的带宽限制:

1 条评论

发表评论

*

+ 32 = 41

  • 哦草,手机移动网络的nat类型是symmetric,zerotier穿透质量很差,丢包率达到50%以上,加入moon(双向cn2 gia)中转也没有改善。但是光纤宽带联通率可达95%以上。