我一直在尝试提高我的 OpenVPN 性能,这是我当前的设置:
cat /etc/openvpn/server.conf
port 443 #- port
proto tcp #- protocol
dev tun
#tun-mtu 1500
tun-mtu-extra 32
#mssfix 1450
tun-mtu 64800
mssfix 1440
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /etc/openvpn/openvpn-auth-pam.so /etc/pam.d/login
#plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-to-client
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3
客户:
client
dev tun
proto tcp
remote 18.4.26.8 443
resolv-retry infinite
nobind
tun-mtu 64800
tun-mtu-extra 32
mssfix 1440
persist-key
persist-tun
auth-user-pass
comp-lzo
verb 3
我根据在网上找到的内容对 MTU 和 MSSFIX 做了一些更改。
我可以对内核进行任何更改吗?这是一个 CentOS 6.x 盒子。我找到了一些基于 BSD 的东西,但没有一个适用于 Linux 的东西。
我知道 TCP 比 UDP 慢,但我需要能够看起来像 SSL 流量才能穿过网络上的防火墙。
还有其他想法吗?
对通过 RDP 连接到的网络上的另一个客户端进行 PING。
Pinging 10.8.0.6 with 32 bytes of data:
Reply from 10.8.0.6: bytes=32 time=152ms TTL=128
Reply from 10.8.0.6: bytes=32 time=565ms TTL=128
Reply from 10.8.0.6: bytes=32 time=152ms TTL=128
Reply from 10.8.0.6: bytes=32 time=782ms TTL=128
Ping statistics for 10.8.0.6:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 152ms, Maximum = 782ms, Average = 412ms
有没有什么方法可以提高性能或者降低 ping 值?
编辑:设置碎片设置是否有帮助?
答案1
简短回答:禁用comp-lzo
。
我知道这是一篇旧帖子,但我也曾遭受过 OpenVPN 性能不佳的困扰。我尝试了所有方法,调整 MTU、更改 snd 和 rcv 缓冲区、mss 限制,等等。CPU 负载可以忽略不计。
一时兴起,我禁用了压缩(comp-lzo
从客户端和服务器中删除),性能提高了 2-4 倍。
因此,comp-lzo
启用后我的最大性能约为 25-30 Mbit/s,而启用后我的最大性能达到 120 Mbit/s(我的互联网连接速度)。
服务器是 Xeon E5-2650,客户端是 Core i5-3320M。两者都运行 OpenVPN 2.3.10、AES-256-CBC、SHA512。我的 Intel Chromebook 也使我的网速达到极限。我的 Android 客户端的性能翻倍(14 Mbit/s -> 30 Mbit/s),与 IKEv2 隧道速度相匹配。
答案2
TCP 会比 UDP 慢很多,这是因为TCP 上问题。基本上,TCP 依靠数据包丢失/拥塞来识别连接参数,而您的 TCP-over-OpenVPN 连接不会遇到这两种情况。但您说过这不是一个选择。
您也可以尝试mtu-disc
自动发现适合您连接的最佳 MTU 设置的选项。不同的地方略有不匹配,例如 OpenVPN 的 MTU 设置,包括以太网报头的大小。[1]
您的tun-mtu
设置太大了,因为 65KB 的数据包在通过互联网时会存在很多延迟问题(IPv4 巨型数据包大小约为 9000 字节,并且主要在本地网络上工作)。请尝试使用 1460 以下的值,例如 1300,以查看 MTU 是否是您的问题所在。
答案3
尽管这可能有点晚了,但你可以尝试我所做的:
删除所有 mss、mtu 等相关选项
在您的机构进行端口扫描并选择一个 UDP 端口,通常应该打开 53 GRE /123 NDP 端口:
将这些行添加到您的服务器配置中(参考这里)
#possible bandwidth increase
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
我不完全理解这些设置,但它们确实有帮助,有人说它有很大帮助,根据我的经验,它使我的吞吐量提高了 +/- 30%
在其中一个端口上启动服务器,就可以了:P
希望这可以帮助!
答案4
sndbuf 和 rcvbuf 修正了拨号时代 linux/unix/openvpn 中的古老设置,以优化较慢的设置,即使操作系统已针对较快的设置进行了优化
sndbuf/rcvbuf 设置为 0 将仅使用操作系统的设置
push 用于确保客户端设置正确但您需要一个值。