跳到主要内容

OpenVPN 已经用了很长时间,选项也多得惊人,这既是优点也是陷阱。网络论坛里充斥着带十几项调整的配置片段,从一个环境复制到另一个环境,却没人测量过它们是否真的有帮助。这些调整大多数毫无作用,少数反而有害,真正能改变性能的只有寥寥几项。

本文讲解 OpenVPN 性能调优的基础:究竟什么限制了速度,哪些设置值得动,按什么顺序,以及如何确认改动确实有帮助。它面向能够控制自己配置的人,例如自建服务器或手上有配置文件的人,同时也能帮助任何想弄明白同一个协议为何在某套环境里很快、在另一套里却很慢的读者。文中不声称任何具体服务使用 OpenVPN。如果你用的是隐藏了这些选项的消费级应用,合理的做法是保持其默认设置,而这里的通用道理仍然能解释发生了什么。刚接触该协议的话,请先读 OpenVPN 是什么。

先测量,再调整

不测量就调整,等于瞎猜。改任何东西之前,先收集基线。

  1. 尽可能用网线连接,并关闭后台应用。
  2. 记录三次下载和上传速度,取中位数。
  3. 用一百次 ping 记录空闲延迟,并记下范围作为抖动以及丢包情况。
  4. 记录大文件下载进行时的延迟。
  5. 观察运行隧道的设备的处理器占用。
  6. 把以上内容连同日期、时间和服务器一起写下来。

处理器的数字比多数人想象的更重要。OpenVPN 的数据路径传统上运行在单个线程上,因此某一个处理器核心会成为限制,而其他核心空闲。如果该核心已满载,任何网络设置都无济于事,你需要更快的核心、更轻量的加密算法,或硬件加密支持。如何测试 VPN 更详细地讲了测量的部分。

设置一:UDP 还是 TCP 传输

OpenVPN 可以通过 UDP 或 TCP 承载隧道。这是最大的单项选择。

  • UDP 发送封包,自身不做重传,延迟低,并避免了所谓的 TCP-over-TCP 问题。
  • TCP 可靠,但把一条本身就承载 TCP 流量的隧道再包上一层 TCP,丢包时可能导致重复重传和急剧变慢。

两者都可用时,UDP 通常在速度和响应性方面更好。TCP 主要是针对封锁或干扰 UDP 的网络的后备。完整对比以及什么时候 TCP 才是正确答案,见 OpenVPN 的 TCP 与 UDP。

实用规则:如果你的连接用的是 TCP 且感觉迟钝,尤其在有丢包时,先试 UDP,再动别的。

设置二:封包大小、MTU 与 mssfix

每条网络链路都有最大封包尺寸。隧道会添加自己的头部,因此应用在隧道内能发送的最大封包比平时更小。封包过大就必须分片,这会损失性能,或者被丢弃,导致卡顿。RFC 1191 描述了沿路径发现最大可用尺寸的机制,但它依赖路径上每台设备的配合,而且有些网络会过滤它所使用的消息。

封包大小问题的症状:

  • 有些网站只加载一部分,或页面前半部分之后就卡住,而其他网站正常;
  • 大文件上传卡住,小文件却成功;
  • 速度远低于预期,处理器和网络方面都找不到原因。

常见的补救措施是配置文件中的指令:

  • mssfix 让隧道限制通过它的 TCP 数据段大小,使封包无需分片即可通过。常见做法是设为一个保守的值,例如 1400,然后测试。
  • tun-mtu 设置接口的封包大小。通常没有 mssfix 那么必要。
  • fragment 让隧道自己拆分较大的 UDP 封包。它只适用于 UDP 并增加开销,应视为最后手段。

一次只测试一个值。如果降低 mssfix 能让卡住的页面恢复而速度没有损失,就保留;如果变慢,就改回去。不要比必要的程度更缩小封包,因为封包越小,每字节的开销越大。

设置三:加密算法与处理器成本

加密需要处理时间,选择的算法会影响耗时多少。现代配置中常见两大类:

  • AES 的 GCM 模式在内置 AES 加速的处理器上很快,包括大多数现代笔记本、手机和许多服务器。
  • ChaCha20-Poly1305 设计上在软件中也很快,因此在没有 AES 硬件支持的设备上,如部分旧手机、小型路由器和单板计算机,可能是更好的选择。

正确的选择取决于你的硬件。测试方法很简单:打开处理器监视器,分别用每种算法运行吞吐量测试,比较速度和处理器占用。选择能达到所需速度又留有处理器余量的那种。不要为了速度选择弱的或过时的算法;在现代硬件上收益很小,而安全上的代价是真实的。关于它存在的原因,可参阅简短的 ChaCha20-Poly1305。

记住,隧道两端必须就算法达成一致,所以对于你不能控制的配置,这是该问服务器运营者的问题。

设置四:保持压缩关闭

旧教程建议用压缩指令挤出更多数据。如今这一建议已经过时,有两个原因。其一,研究人员已经证明,加密隧道内的压缩可能泄露关于数据的信息,所以目前的指导意见是避免使用。其二,大多数流量本来就已加密或压缩,比如视频、图片和一切 HTTPS 内容,无法再压缩,收益接近于零,而处理器成本依旧存在。如果你接手的配置里有压缩行,请先向来源确认再删除,但不要自己添加。

设置五:套接字缓冲区

缓冲区保存隧道与操作系统之间正在传输的数据。如果在高速链路上过小,突发数据到来时封包可能被丢弃,吞吐量就会受损。相关指令是 sndbuf 和 rcvbuf。

  • 许多系统的默认值相对快速连接所需来说偏小。
  • 把两者都设为更大的值,例如 512 KiB,可能对高速链路有帮助,尤其是在隧道接口上看到丢包而底层连接没有丢包时。
  • 操作系统会限制最大值,过大的值可能被悄悄降低。

两者一起改,测试,只有确实有帮助才保留。在慢速链路上,更大的缓冲区没有作用,还可能增加延迟。

设置六:保活与重连

保活设置不会让连接更快,但决定了失效的隧道多快被发现并重建,当你在不同网络之间移动时,这会像性能一样被你感受到。

  • keepalive 指令会定期发送 ping,并在 ping 不再到达时重启隧道。典型的一对数值是每十秒一次 ping,沉默六十秒后重启。
  • 更短的间隔能更快发现失效链路,但会略多用一点流量和电量。
  • 在经常于 Wi-Fi 与移动数据之间切换的移动设备上,较短的间隔加自动重连能带来更好的体验。

如果你主要关心保持连接,改善 VPN 连接稳定性 讲了实际操作方面。

其他有时会有影响的选项

  • **多核利用。**OpenVPN 的经典设计是每条隧道单线程,因此在多核服务器上,运行多个隧道进程,或在你的版本支持时使用较新的数据通道卸载功能,是用上更多硬件的办法。
  • **硬件加密卸载。**如果可用,它能把加密算法的工作从主处理器上移走。
  • **DNS 设置。**网页起步慢可能来自域名解析慢,而不是隧道。单独测试一次解析。
  • **服务器负载与位置。**即使配置完美,也无法修复过载或遥远的服务器。较近的位置往往比上面所有的调整都更有效。更全面的清单见 为什么我的 VPN 很慢。

一次完整的调优过程示例

下面是一个虚构但贴近现实的过程,用来展示节奏。

用户在家里的小型计算机上运行自建的 OpenVPN 服务器,并用笔记本通过 300 Mbps 线路连接。不走隧道的基线为 280 Mbps;走隧道时只有 45 Mbps,家里那台计算机的处理器在一个核心上占用 100%。

步骤 改动 结果
0 带隧道的基线 45 Mbps,一个核心满载
1 从 TCP 改为 UDP 70 Mbps,仍然满载
2 把加密算法从旧默认值改为 AES-GCM 选项,因为这台小计算机有硬件 AES 160 Mbps,核心占用 70%
3 删除继承来的压缩行 165 Mbps,处理器占用略降
4 增大 sndbuf 和 rcvbuf 190 Mbps,隧道接口上的丢包消失
5 尝试更低的 mssfix 速度无变化,两个卡住的网站现在能加载
6 为会休眠的笔记本调整 keepalive 速度无变化,休眠恢复后重连更快

最大的收益来自传输方式和加密算法,这与本文的顺序一致。后续步骤带来了较小但真实的改善。没有一步需要用到冷僻的选项。还要注意,用户每一步只改一项,并每次都做了测量。

不要这样做

  • **不要照搬论坛里的长配置,**除非你理解每一行。
  • **不要为了速度关闭加密或认证。**那等于让隧道失去意义。
  • 不要因为更轻量就选用旧的加密算法。
  • **不要同时改很多项。**你将无法知道是什么起了作用或造成了损害。
  • **不要在客户端上去弥补过载服务器的问题。**如果服务器过载,就换服务器或位置。
  • **不要在没有客服指导的情况下改动受管理应用的设置,**默认值是为那项服务选定的。

总结

OpenVPN 的性能主要取决于几件事:尽可能用 UDP 而不是 TCP,封包大小与路径相匹配,加密算法与硬件相称,保持压缩关闭,缓冲区按高速链路设置,以及与你移动方式相符的保活。先测量基线,一次改一项设置,记录结果,只保留确有明显帮助的改动。如果处理器已满载或服务器很远,任何设置都救不了结果,所以先检查这两项。

如果你更想跳过配置,直接使用现成的应用和短期固定天数的通行证,请查看 价格页面,免费的 VPNclient 应用可在 下载页面 获取。

常见问题

加快 OpenVPN 最有效的方法是什么?

通常是尽可能选择 UDP 传输、使用较近的服务器,并确保设备的加密速度足够快。缓冲区、封包大小等细节设置要在这些基础都正确之后才有意义。

如果我的 VPN 应用没有这些选项,还要改设置吗?

不用。大多数面向消费者的 VPN 应用会在内部管理这些设置。请保持应用的默认值,有问题就联系客服。本文的选项主要适用于你自己能控制的配置文件,例如自建的服务器。

压缩能提升 OpenVPN 的速度吗?

现在不能了。隧道内的压缩曾被发现与安全弱点有关,而且已加密或已压缩的数据本来也压不小。请保持关闭。

mssfix 是什么?什么时候需要?

它限制通过隧道的数据段大小,使封包无需分片即可通过。当某些网站卡住或只加载一部分、而其他网站正常时,它很有帮助,这通常指向封包大小问题。

怎么知道改动是否真的有帮助?

在相同条件下改动前后各测多次,比较吞吐量、延迟、抖动和丢包的中位数。一次只改一项设置,这样才知道是哪一项起了作用。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

VPN 安全

OpenVPN 详解:TCP、UDP 与安全性

OpenVPN 如何建立隧道、TCP 与 UDP 为何手感不同、怎样的配置才算安全,以及连接失败时如何一步步排查。

阅读约 9 分钟

VPN 安全

OpenVPN 的 TCP 与 UDP 有什么区别?

OpenVPN 可以通过 UDP 或 TCP 传输隧道数据。本文说明两者的区别、默认用 UDP 的原因、什么时候该用 TCP,以及怎样自己动手测试。

阅读约 9 分钟

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟

VPN 安全

如何自己评测 VPN:一份测试清单

许多 VPN 评测是为赚取佣金而写的。这份清单教你自己测试任何 VPN:哪些能验证,哪些不能,以及如何给结果打分。

阅读约 9 分钟

故障排除

VPN 为什么很慢?如何让它变快

VPN 变慢时的实用排查清单:先测速,再排除自己网络的问题,然后逐步处理 Wi-Fi、后台应用、设备设置和视频卡顿。

阅读约 7 分钟