我在使用 OpenVPN 时遇到了一个非常奇怪的问题。
除了这个 VPN 之外,大多数 VPN 都运行良好。这里 TCP 连接的性能很差,但 CPU 负载很低(所以不是 CPU 问题)。
OpenVPN 配置有 UDP、AES-256-CBC 密码、SHA256 身份验证且无压缩。
以下是我使用 iperf 进行的一些测量:
无需 VPN 的网络连接:
iperf -c external.ip result:300 - 500mbps (good)
iperf -c vpn.int.ip result: 20-30mbps (not good)
两端的 CPU 使用率都很低。好的,也许某些 ISP 会调整或过滤 UDP 数据包。
iperf -c external.ip -b 500M result: no packet loss
嗯...如果我强制通过 VPN 进行 UDP 流会怎么样
iperf -c vpn.int.ip -b 100M result: no packet loss
iperf -c vpn.int.ip -b 180M result: packet loss ~0.1%
因此,根据 UDP 的结果,我的 VPN 连接应该可以达到 180mbps,但事实并非如此。我还得到了非常奇怪的 tcptrace 图表。
良好的测试如下(不使用 VPN,使用外部 IP):
如您所见,发送的数据包停留在黄线附近,这意味着接收窗口几乎保持满状态。图表的这一部分靠近连接的开始,之后,发送的数据包实际上位于黄线的顶部。
以下是我从 VPN 获得的图表:
现在由于某种原因,发送方表现得好像窗口非常小,即使它很大(我将窗口设置为什么并不重要,尝试保持默认设置和 4MB)并且仅以小突发发送数据包。
这是我第一次看到这样的图表?可能是什么原因造成的?ISP 的一些 UDP 过滤、OpenVPN 本身,还是其他原因?
编辑:使用 TCP 而不是 UDP 运行 VPN 可实现 10mbps 的吞吐量。
答案1
我已经解决了。或者说,我知道如何让它更快,但不知道它为什么会慢。似乎 AES 密码会以某种方式干扰此特定服务器上的 TCP,并导致性能低下。如果我将密码更改为 3des(“openssl speed”报告的速度较慢),我得到 150mbps。经过几次尝试,我现在使用这个:
cipher camellia-128-cbc
auth sha1
tun-mtu 9000
现在,单个流的速度为 300mbps,多个流的速度为 450mbps。