我正在尝试将我的笔记本电脑连接到另一个大陆的服务器,但似乎链接非常不可靠(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 管道也可以使用。)