两个 WireGuard 隧道之间的转发性能较差

两个 WireGuard 隧道之间的转发性能较差

我有一台专用服务器(Ubuntu Server 20.04),运行两个 WireGuard 接口:

  • wg0用于连接最终用户,如笔记本电脑、移动设备等。
  • wg1是通向第三方 VPN 服务的隧道

wg1在服务器本身上设置为默认路由:

~ ip route get 8.8.8.8
8.8.8.8 dev wg1 table 51820 src 10.13.128.233 uid 0

然后,设置 NAT,将来自wg0隧道(最终用户)的流量伪装到wg1隧道(第三方 VPN 服务):

iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE

因此简化的方案如下所示:

(end-users) ----> wg0 ----> (Hetzner server) ----> NAT ----> wg1 ----> (3rd-party VPN)

wg0配置非常简洁,没有指定 MTU 选项。笔记本电脑客户端使用默认 MTU,下面的 iperf 测试是在笔记本电脑上进行的。

wg1配置指定 1420 作为 MTU 值。

问题是,我在终端用户设备上的互联网浏览性能不佳。我相信问题出在服务器配置上,而不是网络,因为我进行了三项测试:

  1. 运行命令行测试在服务器上对于 Fast.com,使用 awesome快速命令行和 SpeedTest.net CLI 实用程序。两者均显示通过wg1从服务器到互联网的隧道实现 1 Gbps 的性能。
  2. iperf 从多个最终用户设备到服务器通过wg0隧道。测试表明从最终用户到服务器的性能为 80-90 Mbps。
  3. 最后,我运行了 Fast.com 和 SpeedTest.net 测试在最终用户设备上wg0测试表明,当通过wg1隧道和互联网转发来自最终用户的流量时,性能范围为 20 到 27 Mbps。

总结一下:WireGuard 服务器到互联网的性能在 1Gbps 时很好。最终用户到服务器的性能也很好,几乎达到 100 Mbps。但是,如上图所示,通过两个 WireGuard 隧道,最终用户到互联网的性能下降到 20-27 Mbps。

我的 IPv4 堆栈设置都是默认设置,除了通常的转发选项。

我不知道这是否正常,但 70-75% 的带宽损失似乎很多。非常感谢您就此事提供任何建议,因为我不太确定如何进一步排除故障!

相关内容