我在两台服务器之间遇到极慢的OpenVPN传输速率。对于这个问题,我将服务器称为服务器A和服务器B。
服务器A和服务器B都在运行CentOS 6.6。两者都位于具有100Mbit线路的数据中心中,OpenVPN外部的两台服务器之间的数据传输速度接近88Mbps。
但是,当我尝试通过服务器A和服务器B之间建立的OpenVPN连接传输任何文件时,我的吞吐量大约为6.5Mbps。
iperf的测试结果:
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
除了这些OpenVPN iperf测试之外,两台服务器实际上都是零负载的完全空闲状态。
服务器A被分配IP 10.0.0.1,它是OpenVPN服务器。服务器B被分配IP 10.0.0.2,它是OpenVPN客户端。
服务器A的OpenVPN配置如下:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
服务器B的OpenVPN配置如下:
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
我注意到的是:
1.我首先想到的是,我是在瓶颈服务器上的CPU。OpenVPN是单线程的,这两个服务器都运行速度不是最快的Intel Xeon L5520处理器。但是,我top
在iperf测试之一中运行了一个命令,并按按1
内核查看CPU利用率,发现每个内核的CPU负载都很低:
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2.在iperf运行时,通过OpenVPN隧道的Ping时间大大增加。当iperf未运行时,通过隧道的ping时间始终为60ms(正常)。但是,当iperf运行并推动大量流量时,ping时间变得不稳定。在开始iperf测试之前,您可以在下面看到ping时间如何稳定直到第4次ping:
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3.如上所述,我在OpenVPN隧道之外运行了iperf,吞吐量是正常的-始终约为88Mbps。
我尝试过的
1.我以为压缩可能会使事情更糟,因此我通过comp-lzo
从两个配置中删除并重新启动OpenVPN 来关闭了压缩。没提升。
2.即使我以前发现CPU利用率很低,我还是认为默认密码可能过于密集,以至于系统无法跟上。因此,我添加cipher RC2-40-CBC
了两个配置(非常轻巧的密码)并重新启动了OpenVPN。没提升。
3.我在各种论坛上阅读了有关调整片段,mssfix和mtu-tun可能对性能有何帮助的信息。我按照本文所述进行了一些改动,但仍然没有任何改善。
关于什么可能导致如此差的OpenVPN性能的任何想法?
cipher none
尽管我怀疑这会有所帮助。