Mam bardzo niskie prędkości transferu OpenVPN między dwoma serwerami. W przypadku tego pytania zadzwonię do serwerów A i Server B.
Zarówno na serwerze A, jak i na serwerze B działa CentOS 6.6. Oba znajdują się w centrach danych z linią 100 Mb, a transfery danych między dwoma serwerami poza OpenVPN przebiegają z prędkością około ~ 88 Mb / s.
Jednak gdy próbuję przesłać jakiekolwiek pliki przez połączenie OpenVPN, które ustanowiłem między serwerem A i serwerem B, uzyskuję przepustowość około 6,5 Mb / s.
Wyniki testu z 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
Oprócz tych testów iperf OpenVPN, oba serwery są praktycznie całkowicie bezczynne przy zerowym obciążeniu.
Serwerowi A przypisano adres IP 10.0.0.1 i jest to serwer OpenVPN. Serwer B ma przypisany adres IP 10.0.0.2 i jest to klient OpenVPN.
Konfiguracja OpenVPN dla serwera A wygląda następująco:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
Konfiguracja OpenVPN dla serwera B wygląda następująco:
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
Co zauważyłem:
1. Moją pierwszą myślą było to, że wąskie gardło procesora na serwerze. OpenVPN jest jednowątkowy i na obu tych serwerach działają procesory Intel Xeon L5520, które nie są najszybsze. Jednak uruchomiłem top
polecenie podczas jednego z testów iperf i nacisnąłem, 1
aby zobaczyć wykorzystanie procesora według rdzenia i stwierdziłem, że obciążenie procesora było bardzo niskie na każdym rdzeniu:
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. Czasy pingowania znacznie się zwiększają w tunelu OpenVPN podczas działania iperf. Gdy iperf nie działa, czasy pingowania w tunelu wynoszą stale 60 ms (normalnie). Ale gdy iperf działa i pcha duży ruch, czasy pingów stają się zmienne. Poniżej możesz zobaczyć, jak czasy pingowania są stabilne do czwartego pingowania, kiedy rozpocząłem test iperf:
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. Jak wspomniano powyżej, uruchomiłem iperf poza tunelem OpenVPN, a przepływność była normalna - ~ 88 Mb / s konsekwentnie.
Co próbowałem:
1. Pomyślałem, że kompresja może powodować problemy, więc wyłączyłem kompresję, usuwając comp-lzo
obie konfiguracje i ponownie uruchamiając OpenVPN. Brak postępu.
2. Mimo że wcześniej stwierdziłem, że wykorzystanie procesora było niskie, pomyślałem, że domyślny szyfr może być zbyt intensywny, aby system mógł go nadążyć. Dodałem więc cipher RC2-40-CBC
do obu konfiguracji (bardzo lekki szyfr) i zrestartowałem OpenVPN. Brak postępu.
3. Czytałem na różnych forach o tym, jak ulepszenie fragmentu, mssfix i mtu-tun może pomóc w wydajności. Grałem z kilku wariantów opisanych w tym artykule , ale znowu, nie ma poprawy.
Wszelkie pomysły na to, co może powodować tak niską wydajność OpenVPN?
cipher none
choć wątpię, by to pomogło.