rkonfj / peerguard

Another p2p network library in Go 🌍
GNU General Public License v3.0
203 stars 12 forks source link

[BUG] 一个公网 一个内网 #7

Closed clywm520 closed 1 month ago

clywm520 commented 2 months ago

A在一个公网网段 B在一个内网可以访问A网段。但B会更换NAT地址,比如中国移动网络,当B更换NAT地址后,生成的VPN网络,就断开了,再也连接不上了

rkonfj commented 2 months ago
  1. websocket 断开重连后会进行一次 peer 发现
  2. peer 与 peer 之间会有 udp 心跳,3 次心跳间隔之后标记直连断开
  3. 与 peer 通信时,如果发现不是直连会尝试发现 peer

NAT 地址更换不会影响 VPN 的使用。可以使用-V -4打印更多信息,便于诊断是否存在 bug

clywm520 commented 2 months ago

还有一个场景,这个肯定是BUG。 A服务器是公网IP,同时配置STUN服务器, B 服务器是内网,可以访问公网A。 A服务器与B服务器搭建k8s使用clilium,利用pgcli组建k8s集群 A内网IP为 192.168.8.1 B内网IP 192.168.8.2. 当K8S集群组建OK后,会自动生成一个 cilium_host 网卡,网卡网段为 A服务器 IP为 10.0.0.113, B服务器为 10.0.1.122 此时 A服务器 pgcli显示日志 ADDPEER 10.0.1.122, 然后接着 REMOVE PEER 公网IP (xxx.xxx.xxx.xxx:29877) 然后网络全部断开了,K8S集群 A,B 网络就失败了。 也就是说 原来AB已组建好,在K8S集群又添加了一个网卡,代码监听网络变化时有一个BUG。

rkonfj commented 1 month ago

90b598e2c5fecec4b85aed342b4523b0fc23321c 这个提交使用操作系统调用订阅网络变化事件,并重新启动 udp/ws 相关 listener

试试看是否会改善该问题?

clywm520 commented 1 month ago

好的,我测测. 我是改了源码 将 cilium 加入网卡白名单解决了.建议将网卡白名单列为配置项哈

rkonfj commented 1 month ago

我是改了源码 将 cilium 加入网卡白名单解决了.建议将网卡白名单列为配置项哈

5ce55ef392da3231e393c0910298be04ca778660 这个提交加了 --disco-ignored-interface 标志,自定义忽略的网卡名前缀,可以指定多次

rkonfj commented 1 month ago

如果还有其他问题,欢迎创建新的 issue 。关闭这个了