我在两台服务器之间遇到极慢的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尽管我怀疑这会有所帮助。
                
