如何提高高丢包网络环境下 OpenVPN 的性能

如何提高高丢包网络环境下 OpenVPN 的性能

我正在尝试将我的笔记本电脑连接到另一个大陆的服务器,但似乎链接非常不可靠(ping 时大约有 58% 的数据包丢失)。

当通过默认的 OpenVPN 密钥设置(使用 UDP)使用 VPN 时,VPN 中的 ping 报告大约有 57% 的数据包丢失(它以诸如 SSH 建立速度慢等方式困扰着我)。

在这种情况下,有没有一种有效的方法可以降低数据包丢失率?我对我的笔记本电脑和服务器都有管理控制权。


以下是从我的笔记本电脑到服务器的部分跟踪路由结果:

 8  221.176.27.254 (221.176.27.254)  16.870 ms
 9  * * *
10  221.183.30.246 (221.183.30.246)  197.288 ms
11  223.118.10.30 (223.118.10.30)  201.422 ms

答案1

使用UDP加速器. 它用带宽开销来换取抗数据包丢失能力。

在服务器端,启动

speederv2_amd64 -s -l 0.0.0.0:1193 -r 127.0.0.1:1194

在客户端,启动

speederv2_amd64 -c -l 127.0.0.1:1194 -r your_server_ip:1993

然后将 OpenVPN UDP 客户端指向 127.0.0.1:1194。

使用--fec参数来调整冗余量。

答案2

您可以在配置中将 OpenVPN 切换到 TCP(同时执行客户端和服务器,并在禁用 UDP 服务之前或之后确保您的 TCP OpenVPN 是安全的)。这将确保所有数据包最终都能通过。这仍然会很慢,但至少值得一试。来自 openvpn.net:

如果您希望 OpenVPN 服务器监听 TCP 端口而不是 UDP 端口,请使用proto tcp而不是proto udp(如果您希望 OpenVPN 同时监听 UDP 和 TCP 端口,则必须运行两个单独的 OpenVPN 实例)。


至于数据包丢失,您只能修复数据包所走的路径。从两端使用 traceroute 来查找链接的有问题部分,并考虑绕过它或使其更强大。

不要全程使用 TCP,尝试看看是否可以租用靠近问题链路的基础设施时间,以便通过薄弱的链路将 TCP 隧道传输到目的地。这将使 UDP 数据包尽可能地飞行,而无需在整个隧道长度上(只有糟糕的部分)进行 TCP 确认或重新传输。

如果薄弱环节位于中间,那么租用薄弱环节两端的基础设施可能会有益,而不是只租用一侧的基础设施,但如果我们谈论的是南极洲,也许这会很困难。

如果您选择测试这条路线,我建议使用 udptunnel 作为一种可能的解决方案。(udptunnel在 Ubuntu 上它有自己的包,但其他选项如 socat 或 creative netcat 管道也可以使用。)

相关内容