Bug: Title: Kernelspace WireGuard 执行导致 VPN- side NAT 映射在闲置的 UDP 流量( 崩溃 torrent DHT) 中过期, 用户空间不
问题描述 当使用自定义的WireGuard提供商(Privado,没有官方的端口转发)时,将gluetun的WireGuard实现从用户空间切换到内核空间(当内核模块可用时的当前自动默认)会导致在给定端口上出现低出站流量的情况下,入站UDP流量在一段时间内默默停止传输 - 特别是对通过network_mode:service:gluetun运行的qBittorrent的BitTorrent DHT造成破坏。 当WIREGUARD_IMPLEMENTATION=userspace时,DHT节点数量在多小时的空闲期间保持稳定。 当使用auto/kernelspace时,DHT节点数量逐渐衰减到0,并且在没有完全重启容器的情况下永远不会恢复。 可重现步骤 运行gluetun,VPN_SERVICE_PROVIDER=custom,VPN_TYPE=wireguard,连接到没有官方端口转发的提供商(我的情况下是Privado) 运行qBittorrent(linuxserver镜像),网络模式为service:gluetun 让客户端大部分时间处于空闲状态(没有活动下载),持续数小时 观察qBittorrent的WebUI中DHT节点数量逐渐降至0,并且永远不会恢复 重启堆栈 - DHT在一段时间内短暂地重新填充,然后再次衰减 期望行为 DHT节点数量在空闲期间应该保持稳定,与在使用WIREGUARD_IMPLEMENTATION=userspace时观察到的行为一致。 实际行为 仅在使用内核空间WireGuard(自动默认,通过日志已确认:使用可用的内核空间实现)时才出现。 明确设置WIREGUARD_IMPLEMENTATION=userspace完全解决了问题 - 在数小时没有活动后,DHT节点仍然保持填充。 环境 gluetun镜像:qmcgaw/gluetun:latest(请注意实际版本标签/提交,如果您能获取它 - 请参阅下面的说明) VPN_SERVICE_PROVIDER:custom VPN_TYPE:wireguard 提供商:Privado(没有官方端口转发支持) 主机:[添加:操作系统/内核版本,例如Ubuntu 24.04,内核6.x] qBittorrent镜像:lscr.io/linuxserver/qbittorrent:latest 额外上下文 此问题出现后,重新构建了Docker主机并重新拉取了:latest镜像 - 相同的WireGuard密钥,相同的VPN服务器和相同的compose配置在之前的旧gluetun版本上已可靠地工作了数月,而(据我所知)一直使用用户空间实现,因为内核空间检测还不存在。 我的工作理论:内核空间WireGuard的NAT/conntrack刷新行为与用户空间实现不同,导致VPN提供商的出口服务器NAT映射对于稀疏/低频率UDP流量(如DHT)会过期,而用户空间的行为则使其保持活动。 这没有被gluetun自己的健康检查捕获,因为连接到VPN服务器的WireGuard隧道本身从未下降 - 仅在bound reachability中,即在VPN服务器的入站端口上,DHT节点数量会逐渐降低。 我无法确定这是否是一个bug,因为我没有在VPN服务器上运行gluetun,因此无法确定是否存在任何问题。
内容来源: passteque/gluetun