Ich habe extrem langsame OpenVPN-Übertragungsraten zwischen zwei Servern. Bei dieser Frage rufe ich die Server Server A und Server B an.
Sowohl auf Server A als auch auf Server B wird CentOS 6.6 ausgeführt. Beide befinden sich in Rechenzentren mit einer 100-Mbit-Leitung, und die Datenübertragung zwischen den beiden Servern außerhalb von OpenVPN erfolgt mit ca. 88 Mbit / s.
Wenn ich jedoch versuche, Dateien über die von mir eingerichtete OpenVPN-Verbindung zwischen Server A und Server B zu übertragen, erhalte ich einen Durchsatz von ungefähr 6,5 Mbit / s.
Testergebnisse von 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
Abgesehen von diesen OpenVPN-Iperf-Tests sind beide Server mit null Last praktisch vollständig inaktiv.
Server A wird die IP 10.0.0.1 zugewiesen und es ist der OpenVPN-Server. Server B erhält die IP 10.0.0.2 und ist der OpenVPN-Client.
Die OpenVPN-Konfiguration für Server A lautet wie folgt:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
Die OpenVPN-Konfiguration für Server B lautet wie folgt:
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
Was mir aufgefallen ist:
1. Mein erster Gedanke war, dass ich einen Engpass bei der CPU auf dem Server hatte. OpenVPN ist Single-Threaded und auf beiden Servern laufen Intel Xeon L5520-Prozessoren, die nicht die schnellsten sind. Ich habe jedoch top
während eines der iperf-Tests einen Befehl ausgeführt und auf gedrückt 1
, um die CPU-Auslastung nach Kern anzuzeigen. Dabei stellte ich fest, dass die CPU-Auslastung auf jedem Kern sehr niedrig war:
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. Die Ping-Zeiten im OpenVPN-Tunnel erhöhen sich erheblich, während iperf ausgeführt wird. Wenn iperf nicht läuft, betragen die Ping-Zeiten über den Tunnel durchgehend 60 ms (normal). Aber wenn iperf rennt und starken Verkehr pusht, werden die Ping-Zeiten unregelmäßig. Sie können unten sehen, wie die Ping-Zeiten bis zum 4. Ping stabil sind, wenn ich den Iperf-Test gestartet habe:
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. Wie oben erwähnt, habe ich iperf außerhalb des OpenVPN-Tunnels ausgeführt und der Durchsatz war normal - ~ 88 Mbit / s durchgehend.
Was ich versucht habe:
1. Ich dachte, die Komprimierung könnte comp-lzo
Probleme verursachen. Deshalb habe ich die Komprimierung deaktiviert, indem ich beide Konfigurationen entfernt und OpenVPN neu gestartet habe. Keine Verbesserung.
2. Obwohl ich zuvor festgestellt habe, dass die CPU-Auslastung niedrig ist, dachte ich, dass die Standardverschlüsselung möglicherweise etwas zu intensiv ist, als dass das System mithalten könnte. Also habe ich cipher RC2-40-CBC
beide Configs hinzugefügt (eine sehr leichte Chiffre) und OpenVPN neu gestartet. Keine Verbesserung.
3. Ich habe in verschiedenen Foren darüber gelesen, wie das Optimieren des Fragments, von mssfix und mtu-tun die Leistung verbessern kann. Ich habe mit ein paar Variationen gespielt, wie in diesem Artikel beschrieben , aber auch hier keine Verbesserung.
Irgendwelche Ideen, was solch eine schlechte OpenVPN-Leistung verursachen könnte?
cipher none
obwohl ich bezweifle, dass es helfen wird.