Openwrt异地组网

Openwrt路由安装Zerotier异地组网异地内网互相访问

Zerotier简单说明

两地内网分别连接互联网,想通过免费方式达成内网互联以便互相访问内网资源。

使用Zerotier异地组网前提

两地内网能正常访问互联网,主路由有无公网ip无所谓

内网运行有 openwrt 系统做主路由器(或其他可安装zerotier的软路由系统)

达成效果:
两地内网设备能互相ping通、访问任意端口(http / ssh 等)

Zerotier异地组网安装步骤

两地分别正常连接互联网,并分别配置不同的内网网段。如:

网络名简称IP 段
HomeLAN 110.0.0.1/23
OfficeLAN 210.0.2.1/23
1-1
  1. 到 http://my.zerotier.com/ 注册账号,添加一个网络,简单配置分配到的IP段。如:192.168.191.*
  2. 在 openwrt 系统中找到 zerotier 功能,并填写network id
  3. 勾选上自动允许客户端NAT 选项
  4. 确认运行正常后查看获取到的 虚拟ip 或 虚拟mac地址
  5. 在 zerotier 网站中查看网络页,分别指定设备分配的 虚拟ip地址,并勾选 Allow Ethernet Bridging 选项(点击设备前面的小扳手图标),即允许通过此设备桥接其他设备
  6. 在 zerotier 网站中添加路由表
网络名称简称IP段OpenWrt IP虚拟 IP
HomeLAN 110.0.0.1/2310.0.0.1192.168.191.1
OfficeLAN 210.0.2.1/2310.0.2.1192.168.191.2
1-2

例如在LAN 1中通过ping 192.168.191.2是否能联通LAN 2的zerotier 虚拟ip

由于网络连接质量问题,可能需要稍等几分钟才能ping通。如果几分钟后还是ping不通,可尝试重启 zerotier 功能

分别在两侧openwrt的系统 – WebShell中,执行以下指令

sed -i '/^ip.*254$/d' /etc/zerotier.start && echo ip route add 10.0.2.0/23 via 192.168.191.2 table 254 >> /etc/zerotier.start

sed -i '/^ip.*254$/d' /etc/zerotier.stop && echo ip route del 10.0.2.0/23 via 192.168.191.2 table 254 >> /etc/zerotier.stop

/etc/init.d/zerotier restart

需要注意两侧应执行的指令是有区别的,见下面的路由策略解释。

指令释义

1:在 zerotier 启动脚本中增加路由策略。从此路由策略将在 zerotier 服务启动时自动生效。
2:在 zerotier 停止脚本中删除路由策略。
3:立刻重启 zerotier 服务

路由策略解释

ip route add 10.0.2.0/23 via 192.168.191.2 table 254

10.0.2.0/23 为目标网段,如LAN 1应添加LAN 2的网段,LAN 2应当添加LAN 1的网段。23为网段掩码的表述,相当于255.255.254.0

192.168.191.2 为访问目标网段的网关ip,如LAN 1应设置LAN 2的zerotier 虚拟ip,而 LAN 2则相反

table 254 中的254为 linux 系统中main路由表的代码

linux 系统维护了 4 个路由表:

  1. 0# 表 系统保留表
  2. 253# 表 defulte table 没特别指定的默认路由都放在改表
  3. 254# 表 main table 没指明路由表的所有路由放在该表
  4. 255# 表 locale table 保存本地接口地址,广播地址、NAT 地址 由系统维护,用户不得更改

重启 zerotier 服务后,可以查看路由表 (openwrt的 状态 – 路由表功能下活动的IPv4路由)

网络目标IPv4网关跃点数
wan0.0.0.0/010.16.0.10main
lan10.0.0.0/230main
ztugarihi610.0.2.0/23192.168.191.20main
mid10.0.10.0/240main
wan10.16.0.10main
wan_client192.168.1.0/240
ztugarihi6192.168.191.0/240main
1-3

表格上有两个 ztugarihi6,其中网关为192.168.191.2 的是新增规则,另一个是zerotier自动增加的NAT规则。

在LAN 1中运行ping 10.0.2.1检测是否能联通LAN 2的内网设备ip
能ping通的话,则说明路由策略成功生效


ping不通的话,再测试是否能ping通LAN 2 的zerotier ip地址192.168.191.2

ping通则为本地的策略路由没有生效,尝试重启防火墙,并再次ping
ping不通则尝试ping本地的zerotier ip,如果成功,则检查与LAN 2 的网络连接不稳定。

由于zerotier基于p2p连接,再降级通过其服务器中转。如果无法p2p连接成功,且其服务器在国外,会导致网络不稳定。


LAN 2的zerotier配置没有勾选自动允许客户端NATzerotier网站后台的网络配置中,没有为LAN 2勾选Allow Ethernet Bridging

如果ping通后延迟非常高,说明zerotier是通过国外moon服务器中转的,没有成功打通穿透内网,可以由于国内的网络环境非常复杂,而且好多都是大内网,所有不是百分百可以穿透成功可以自己搭建moon服务器以达到低延迟访问的目的。

经过以上步骤,两个内网应当都可以通过IP互相访问了。


如果想在内网中,通过设备名称互相访问,且在内网部署有额外的dns服务器,如pi-hole作为主dns服务器,则可在pihole配置中,将当前LAN主路由作为主dns来源,其他LAN主路由器作为副dns来源。

配置完成后,可能无法立即解析到其他LAN的设备名称,可以尝试重启pihole,或稍等一会再去解析另一LAN的设备名称。


如果两个LAN主路由(DNS服务器)上存在相同的设备名称,则pihole解析这个设备名称时会优先回复主DNS返回的解析结果。

最后,如果想查看 zerotier 的流量状况,可以为 zerotier 单独添加一个网络接口

openwrt固件为zerotier添加接口

  1. 在 openwrt 的 网络 – 接口界面,选择添加新接口…
  2. 输入接口名称,如ZEROTIER
  3. 接口协议选择不配置协议
  4. 包括以下接口选择以太网适配器: “ztugarihi6” (zerotier)
  5. 其中 ztugarihi6是每个设备上都不一样的,可以在上述查看路由表中查看
  6. 不要选择在多个接口上创建接口
  7. 提交生效
  8. 然后去重启 zerotier 服务
  9. 之后就可以在 网络 – 接口 界面中查看到 ZEROTIER 的网络通讯数据统计了
发布日期:
分类:杂谈

1条评论

  1. “浪漫”源于骑士文学,形容中世纪骑士阶级和贵妇人之间注定无法有结果的爱情;“Romance”的本意就是知其不可而为之,是明知不会有结果却无法停止爱你。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注