服务器调优
本页介绍 rVPN 服务器的操作系统级调优,特别针对高延迟或有丢包的国际线路(例如,中国的客户端连接位于美国的服务器)。
调优可以缓解的症状
Section titled “调优可以缓解的症状”- 通过 VPN 的 ping 起初正常,随时间增长(例如从 500 毫秒 → 5–12 秒)。
- 尽管服务器带宽充裕,吞吐量却降到几十 kbps。
ss -ti显示极小的拥塞窗口(cwnd: 2)、高重传,以及不断增长的bytes_retrans。- 同一客户端和服务器在其他网络下工作正常(例如手机 5G vs 固网 Wi-Fi)。
这些症状通常意味着客户端与服务器之间的 TCP 连接经过了一条有丢包或严重整形的链路。Linux 的默认拥塞控制算法 CUBIC 会将丢包视为网络拥塞并激进地缩小发送窗口,导致延迟迅速攀升。
切换到 BBR 拥塞控制
Section titled “切换到 BBR 拥塞控制”BBR(Bottleneck Bandwidth and RTT)对链路建模,而不是把丢包当作拥塞。在高丢包、高 RTT 的路径上,它比 CUBIC 能保持更高的吞吐量和更稳定的延迟。
检查可用算法
Section titled “检查可用算法”sysctl net.ipv4.tcp_available_congestion_control如果列表中没有 bbr,请加载模块:
sudo modprobe tcp_bbr要在开机时自动加载 tcp_bbr,创建 /etc/modules-load.d/tcp_bbr.conf:
tcp_bbr立即应用 BBR
Section titled “立即应用 BBR”sudo sysctl -w net.ipv4.tcp_congestion_control=bbr让 BBR 在重启后保持
Section titled “让 BBR 在重启后保持”创建 /etc/sysctl.d/99-rvpn-tcp-tuning.conf:
# rVPN TCP tuning for high-latency / lossy international pathsnet.ipv4.tcp_congestion_control=bbrnet.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 262144 16777216net.ipv4.tcp_wmem=4096 262144 16777216net.ipv4.tcp_notsent_lowat=16384应用:
sudo sysctl --system增大缓冲区可为每个 TCP 连接留出足以覆盖 250–350 毫秒 RTT 路径带宽时延积的余量。
验证当前连接正在使用 BBR
Section titled “验证当前连接正在使用 BBR”重连 VPN 客户端后(已有连接会保留旧的拥塞控制算法):
sudo ss -ti | grep -A5 'YOUR_CLIENT_IP'查找:
bbr wscale:...如果仍显示 cubic,说明客户端尚未重连。
FreeBSD 调优
Section titled “FreeBSD 调优”FreeBSD 也通过 cc_bbr 内核模块支持 BBR,对于高丢包、高 RTT 的路径这是最佳选择。
加载 BBR
Section titled “加载 BBR”检查模块是否已加载:
kldstat | grep cc_bbr若未加载:
sudo kldload cc_bbr要在开机时自动加载,将下行添加到 /boot/loader.conf:
cc_bbr_load="YES"应用 BBR 并调整缓冲区
Section titled “应用 BBR 并调整缓冲区”sudo sysctl net.inet.tcp.cc.algorithm=bbrsudo sysctl kern.ipc.maxsockbuf=16777216sudo sysctl net.inet.tcp.recvspace=16777216sudo sysctl net.inet.tcp.sendspace=16777216要让这些设置在重启后保持,创建 /etc/sysctl.conf:
# rVPN TCP tuning for high-latency / lossy international pathsnet.inet.tcp.cc.algorithm=bbrkern.ipc.maxsockbuf=16777216net.inet.tcp.recvspace=16777216net.inet.tcp.sendspace=16777216在 FreeBSD 上验证
Section titled “在 FreeBSD 上验证”检查当前的拥塞控制算法:
sysctl net.inet.tcp.cc.algorithmFreeBSD 不像 Linux 的 ss 那样便捷地暴露每个连接的拥塞控制名称,因此请在重连客户端后使用 ping 和 iperf3 检验吞吐量和延迟。
其他要检查的事项
Section titled “其他要检查的事项”- 接口 MTU:Google Cloud VPC 默认使用 1460 字节 MTU。rVPN 的 TUN MTU 为 1420,加上 TLS/WebSocket 开销后仍能舒适地容纳在 VPC MTU 内。
- CPU:
rvpn-server每连接的加密是单线程但异步的;1 vCPU 的虚拟机通常足以应对一两个客户端,但在更高吞吐量下可能成为瓶颈。 - 磁盘 / 日志:在默认
INFO级别下,服务器会为每个帧记录日志。繁忙的客户端会产生大量journaldI/O。请在生产中考虑降低日志详细程度。
如果在 BBR 与缓冲区调优之后延迟和丢包依然存在,问题可能不在服务器:
- 国际段的 ISP/路由问题
- 针对 443 端口 TLS 的运营商级 DPI 或限速
- 本地 Wi-Fi 路由器的激进 QoS 或过小缓冲区
这些情况下,请尝试不同的客户端网络(手机热点、不同 ISP),或选择距离客户端更近的服务器位置。