doublebu
144 天前
确实是这样,tailscale 抽风的厉害。OpenVPN 应该还是比较傻瓜式的,配置文件弄一下就好了。最后我还是折腾了一个比较“素”的方案。
我这边是有 8 个公网 IPv4 节点(家宽以及 vps ),先用 WireGuard 组成 Mesh 拓扑。然后上层跑 VXLAN (用来打通 L2 ,后面提到的动态路由协议的运行条件)。再跑 #2 提到的 babel 协议。babel 协议主要实现 Mesh 网络里面的路由,比如某条路由不可用了,那就寻找其他路由来做。(比如 A->B 的链路断掉了,会切换成 A->C->B )
这个方案比 Tailscale 稳,因为没有打洞的说法。由于 WireGuard 能够监听双栈,后面我切换到 IPv6 运行也很稳定,后面我接入更多的家宽节点,整个网络 robust 也更好 )
关于 WireGuard/UDP QoS 的问题,目前在测试用 Phantun 。
一套下来,可能比较繁琐的就是配置了。如果弄成 Tinc 那样每个机器要分发要累死。 更何况这里有 WireGuard/VXLAN/Phantun 。我的解决方法是类似 Tailscale/Zerotier 那样 C/S 架构,服务端用一个 Toml 文件做数据库,用 JS 快速糊几个接口就可以了。客户端用 Bash 脚本,放到 crontab 里面定时执行:更新 WireGuard Peer 、上报 DDNS 等。
移动设备接入就用 OpenVPN 或者 ipsec/l2tp (在有公网的 ipv4 节点上部署)。
更详情的可以参考我的博客,但还没完全写好: https://jinpeng.boo/article/build-a-mesh-network/