需求背景
继上一篇文章自建 zerotier 的 Planet 服务器,疯狂安利朋友一起使用。
被我打动之后,他实现了我之前一直未能实现的需求:与终端内部网络进行互联互通
简单说就是 类似 npx,frp 等,实现内网穿透功能,但 Zerotier 更倾向于网络路由的互通与桥接共享
历史探究
原先的构思在路由规则上,假若数据包到达了路由器之后,通过路由器到达内网的 IP,内网 IP 响应之后到达路由器,通过路由器再传送到 Zerotier 虚拟网。
之前一直纠结在末端的内网 IP 响应之后,由于没有正确的路由表导致数据包无法回到路由器,或者回到路由器之后无法进入 Zerotier 虚拟网。
再无限次失败的尝试后,我们分析了重点如下:
中间设备,核心(NAT 转发,IP 转发)
- 子网路由要配置回程路由
- 中间设备要动态 NAT(Linux、Win)
非路由设备内网互通的尝试
第一种
第二种
https://www.nuomiphp.com/t/6446232d4a9f51010c3e5424.html
- 真实网卡 (Wifi 或以太网) 适配器 属性 共享 允许其他 XX 选 Zerotier One 的虚拟网卡 确定
- Zerotier One 的虚拟网卡 设置 Ipv4 为控制台的 IP 地址
成功解决
非路由设备内网互通
Windows
- 开启路由转发功能 (并不需要)
- 开启路由服务 RemoteAccess
- 真实网卡 (Wifi 或以太网) 适配器 属性 共享 允许其他 XX 选 Zerotier One 的虚拟网卡 确定
- Zerotier One 的虚拟网卡 设置 Ipv4 为控制台的 IP 地址 Linux
- 打开路由转发功能
- 开启某网卡的 NAT 功能
iptables -t nat -A POSTROUTING -o ovs_eth0 -j MASQUERADE
自行持久化 - 套件安装
- dokcer 安装
局限:转发设备并不是路由器网关,所以路由器没有回程路由,该方式转发的内部网络无法访问 Zerotier 虚拟网,而反之则可以访问。 路由效果示例: 正向访问:192.168.1.2(本地网络)->192.168.1.1(本地路由器)/10.0.0.2(本地路由器在虚拟网中)->10.0.0.3(对端桥接设备)/192.168.2.2(不一定是路由器)->192.168.2.3(对端内网设备) 反向访问:192.168.2.3(对端内网设备)->192.168.2.1(对端网络路由器)->发送到公网中,无法路由
路由设备内网互通
Openwrt
- 安装配置好 Zerotier 服务
- 创建接口 不配置协议 Ip 地址在
ifconfig
查看 - 创建新的区域 必须打开 IP 动态伪装
- 在 Zerotier 控制台配置好路由
最终效果:全网段互联互通,路由器下的设备无需加入虚拟网络,即可通过路由器访问虚拟网络中的任意位置,而虚拟网络也可以访问到本路由下的任意位置。
路由效果示例:192.168.1.2(本地网络)->192.168.1.1(本地路由器)/10.0.0.2(本地路由器在虚拟网中)->10.0.0.3(对端桥接设备)/192.168.2.1(路由器)->192.168.2.3(对端内网设备)
响应:192.168.2.3(对端内网设备)->192.168.2.1(对端路由器)/10.0.0.3(该路由器在虚拟网中)->10.0.0.2(本地路由器)/192.168.1.1->192.168.1.2(本地网络)
最终效果
参考文章
https://zhuanlan.zhihu.com/p/383471270 https://post.smzdm.com/p/adwgkopd/ https://blog.csdn.net/weixin_44647835/article/details/109616688