OpenVPN的cipher是否实际生效?OpenWRT路由器吞吐量优化疑问
优化OpenWRT上OpenVPN吞吐量的实用方案
兄弟,咱先捋捋你遇到的问题:你说降低证书位数没用,这点判断完全正确——短证书确实只缩短握手时间,对于长期在线的路由器来说,确实无关紧要。接下来咱从几个核心方向入手,解决吞吐量上不去的问题:
1. 优先启用硬件加密加速
这是OpenWRT上提升OpenVPN速度最关键的一步!很多路由器(比如MIPS/ARM架构)自带硬件加密引擎,但默认可能没被OpenVPN用上:
- 先确认你的OpenVPN版本是否支持硬件加速:运行
openvpn --version,看输出里有没有crypto-dev相关字样 - 在
server.conf里添加一行:crypto-device /dev/crypto - 如果路由器没加载加密驱动,安装对应的内核模块:
opkg install kmod-crypto-user - 确保你用的是
openvpn-openssl包(而非mbedtls版本),openssl对硬件加速的支持更完善
2. 选对高效的加密算法
不是随便改cipher就行,得挑硬件支持加速、且开销低的AEAD算法:
- 优先用
AES-128-GCM(比CBC模式效率高太多,GCM是加密+认证一体的AEAD算法,CPU开销小) - 在
server.conf里设置:cipher AES-128-GCM auth none # GCM自带认证,无需额外的auth算法,省CPU - 注意:客户端的cipher必须和服务端完全一致,否则会协商失败
3. 关闭无用的压缩功能
如果你的流量已经是压缩过的(比如视频、图片、压缩包),OpenVPN的压缩反而会增加CPU负担:
- 在
server.conf里设置:compress none - 老版本OpenVPN可以用
comp-lzo no,但推荐用compress none更明确
4. 利用多核CPU的多线程支持
OpenVPN 2.5+版本支持多线程,能充分利用路由器的多核CPU:
- 先确认版本:
openvpn --version,看是否支持--thread参数 - 在
server.conf里添加:threads 2(根据你的路由器核心数调整,比如4核就设为4)
5. 优化MTU避免分片开销
MTU设置不对会导致IP分片,严重拖慢吞吐量:
- 在
server.conf里添加:tun-mtu 1400 mtu-disc yes - 客户端也要同步设置相同的MTU值,确保两端一致
6. 先排查CPU瓶颈
先确认是不是CPU跑满了导致速度上不去:
- 在路由器上运行
top或者htop,看OpenVPN进程的CPU占用率 - 如果CPU占满100%,那核心瓶颈就是CPU,得靠上面的硬件加速、多线程来解决;如果CPU没跑满,那可能是网络带宽或者其他配置问题
关于你提到的「客户端禁用加密报错」
OpenVPN默认强制加密通信,如果你客户端设了cipher none,服务端没对应配置,肯定会握手失败(日志里会有类似TLS Error: TLS handshake failed或者Cipher negotiation failed的提示)。而且完全禁用加密不仅不安全,也不一定能提升多少速度——硬件加速的AES加密开销其实非常小,远不如优化上面几个点来得实在。
优化后的server.conf示例
port 1194 proto udp # UDP比TCP更适合VPN,延迟更低 dev tun ca ca.crt cert server.crt key server.key dh dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 # 硬件加速 crypto-device /dev/crypto # 高效加密算法 cipher AES-128-GCM auth none # 关闭压缩 compress none # 多线程利用多核 threads 2 # MTU优化 tun-mtu 1400 mtu-disc yes user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3
内容的提问来源于stack exchange,提问作者lallepot
相关产品推荐
相关产品推荐

