本文目录导读:

你提到的 tcp_autocork_openvpn 看起来像是一个拼写错误或组合词,可能是指 TCP auto-corking 与 OpenVPN 的结合使用,在 Linux 网络栈中,tcp_autocorking 是一个内核特性,用于优化小数据包的发送(自动合并小包以减少发送次数)。
如果你想在 OpenVPN 使用 TCP 模式时启用或优化 tcp_autocorking,以下是几种实现方式:
检查当前内核是否支持 tcp_autocorking
Linux 3.14+ 内核默认支持,可以通过以下命令查看是否开启:
cat /proc/sys/net/ipv4/tcp_autocorking
- 返回值
1表示开启 - 返回值
0表示关闭
开启/关闭 tcp_autocorking
临时修改(重启后失效):
# 开启 sudo sysctl -w net.ipv4.tcp_autocorking=1 # 关闭 sudo sysctl -w net.ipv4.tcp_autocorking=0
永久修改(写入 sysctl.conf):
echo "net.ipv4.tcp_autocorking=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
OpenVPN 中如何利用 tcp_autocorking
OpenVPN 本身没有 tcp_autocork_openvpn 这个参数,但你可以通过以下方式间接优化:
方案 A:使用 TCP 模式并启用内核 auto-corking
在 OpenVPN 服务端或客户端配置中指定 TCP 协议:
proto tcp
同时确保内核 tcp_autocorking 开启,这样 OpenVPN 的小数据包(如 TLS 握手、控制包)会被内核自动合并,减少网络拥塞。
方案 B:调整 OpenVPN 的发送缓冲区
适当增大 OpenVPN 的 TCP 发送缓冲区,让 auto-corking 有更多数据可合并:
# 在 sysctl.conf 中 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.wmem_default = 65536 net.core.wmem_max = 16777216
方案 C:使用 --tcp-nodelay 配合 auto-corking(注意冲突)
OpenVPN 默认禁用 Nagle 算法(--tcp-nodelay),这会阻止 auto-corking 的效率,如果你希望启用 auto-corking,可能需要:
# 不设置 --tcp-nodelay,让内核的 auto-corking 自行决定是否合并
但注意:不推荐在 OpenVPN 中同时依赖 auto-corking 和禁用 Nagle,两者意图相反。
测试优化效果
使用 ss -ti 或 tcpdump 观察 TCP 数据包大小:
# 查看 OpenVPN 进程的 TCP socket 信息 ss -ti | grep openvpn
可以查看 cwnd、rtt 等参数变化,以及是否有明显的小包合并(packet size 变大)。
注意事项
- TCP auto-corking 只对 TCP 模式的 OpenVPN 有效(UDP 模式无效)。
- OpenVPN 默认推荐使用 UDP,TCP 模式会引入 TCP over TCP 问题(性能下降)。
- 如果你的 OpenVPN 必须使用 TCP(如防火墙只放行 TCP 443),建议同时开启
--mssfix和--tun-mtu调整 MTU。
tcp_autocork_openvpn 不是一个真实的内核参数或 OpenVPN 选项,你可能想要的是:
在 OpenVPN TCP 模式下,通过 Linux 内核的 tcp_autocorking = 1 来优化小数据包发送。
如果你的情况是 OpenVPN 使用 TCP 且性能不佳,建议优先尝试调整 MTU、MSS、开启 fastopen,而不是过度依赖 auto-corking,如果需要更具体的配置,请提供你的 OpenVPN 版本和内核版本。
标签: OpenVPN