在两台路由器上用 2.0.9 遇到了这个问题:开启自动打洞后,连接跟踪表很快被大量 UDP 条目占满,连原有网络也会受影响。希望能保留 IPv4 UDP 直连,但把打洞的连接数量控制住。
环境是官方 VNT 2.0.9 / VNTS 2.0.6,TUN 三层。两端分别为 MIPSel / Linux 4.4.198 和 ARMv7 / Linux 3.14.77,其中一端走 5G 蜂窝网络。VNT 由自己的管理程序启动,使用官方未修改的二进制。两台的 conntrack 上限都是 16384。
实测过程:
- 原配置为
no_punch = false,没有设置 punch_model。启动前两端连接表大约只有 100~160 条。
- 保持一端运行,重新启动另一端 VNT,约 9 秒后两端都达到
16384/16384。大量条目是发往对端公网地址的 UDP / UNREPLIED,源端口和目标端口都在变化,同时出现 SSH 超时和原有 IPsec 路径连续 ping 不通。
- 停止打洞后连接数回落。随后两端都改为
no_punch = true 做中转对照,运行约 3 分 45 秒,连接数分别在 31~91、127~158 之间,虚拟 IP 双向 ping 各 10/10。管理链路仍有零星丢包,但没有再次把连接表撑满。这个对照时间比较短,还不算长稳测试。
测试期间没有调整 conntrack 上限、超时或防火墙,也没有清空连接表。VNT 没有接管 IPv4 默认路由。
顺着 2.0.9 对应的源码看了一下,VNT 在 task.rs 里固定设置了 max_assistant_sockets(82);锁定的 rustp2p 在对称 NAT 打洞分支里,每轮预测最多 60 个端口,再随机扫描 1200~1499 个端口。每个目标都会通过 try_send_via_all 从主 socket 和所有辅助 socket 发包,然后才等待 2ms。这样一轮可能产生的五元组组合远多于路由器连接表容量。这里是源码推算,实测捕获的是连接表达到上限。
看到了已有的并发打洞限制和重试退避,不过单轮扫描本身似乎还是太大了。配置文件和命令行里暂时没找到调整辅助 socket 数量、单轮扫描数量或发包速率的选项。
想请教一下:有没有现成的限制办法?如果目前没有,能否把这些参数开放出来,或者加一个适合路由器的打洞预算,按实际发出的五元组数量限制,并让多个打洞任务共享这个预算?单纯关闭 IPv4 UDP 打洞会损失我们需要的直连能力,调大 conntrack 也不一定能解决上游 NAT 的容量问题。谢谢。
在两台路由器上用 2.0.9 遇到了这个问题:开启自动打洞后,连接跟踪表很快被大量 UDP 条目占满,连原有网络也会受影响。希望能保留 IPv4 UDP 直连,但把打洞的连接数量控制住。
环境是官方 VNT 2.0.9 / VNTS 2.0.6,TUN 三层。两端分别为 MIPSel / Linux 4.4.198 和 ARMv7 / Linux 3.14.77,其中一端走 5G 蜂窝网络。VNT 由自己的管理程序启动,使用官方未修改的二进制。两台的 conntrack 上限都是 16384。
实测过程:
no_punch = false,没有设置punch_model。启动前两端连接表大约只有 100~160 条。16384/16384。大量条目是发往对端公网地址的UDP / UNREPLIED,源端口和目标端口都在变化,同时出现 SSH 超时和原有 IPsec 路径连续 ping 不通。no_punch = true做中转对照,运行约 3 分 45 秒,连接数分别在 31~91、127~158 之间,虚拟 IP 双向 ping 各 10/10。管理链路仍有零星丢包,但没有再次把连接表撑满。这个对照时间比较短,还不算长稳测试。测试期间没有调整 conntrack 上限、超时或防火墙,也没有清空连接表。VNT 没有接管 IPv4 默认路由。
顺着 2.0.9 对应的源码看了一下,VNT 在 task.rs 里固定设置了
max_assistant_sockets(82);锁定的 rustp2p 在对称 NAT 打洞分支里,每轮预测最多 60 个端口,再随机扫描 1200~1499 个端口。每个目标都会通过 try_send_via_all 从主 socket 和所有辅助 socket 发包,然后才等待 2ms。这样一轮可能产生的五元组组合远多于路由器连接表容量。这里是源码推算,实测捕获的是连接表达到上限。看到了已有的并发打洞限制和重试退避,不过单轮扫描本身似乎还是太大了。配置文件和命令行里暂时没找到调整辅助 socket 数量、单轮扫描数量或发包速率的选项。
想请教一下:有没有现成的限制办法?如果目前没有,能否把这些参数开放出来,或者加一个适合路由器的打洞预算,按实际发出的五元组数量限制,并让多个打洞任务共享这个预算?单纯关闭 IPv4 UDP 打洞会损失我们需要的直连能力,调大 conntrack 也不一定能解决上游 NAT 的容量问题。谢谢。