У мене надзвичайно повільні швидкості передачі OpenVPN між двома серверами. Для цього питання я зателефоную на сервери Server A і Server B.
І сервер A, і сервер B працюють під управлінням CentOS 6.6. Обидва розміщені в центрах обробки даних лінією 100 Мбіт, а передача даних між двома серверами поза OpenVPN працює близько ~ 88 Мбіт / с.
Однак, коли я намагаюся перенести будь-які файли через з'єднання OpenVPN, яке я встановив між сервером A і сервером B, я отримую пропускну здатність близько 6,5 Мбіт / с.
Результати тестування від 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.
Конфігурація OpenVPN для сервера A така:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
Конфігурація OpenVPN для сервера B така:
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. Першою моєю думкою було те, що я обмежував вузький процесор на сервері. OpenVPN є однопотоковою, і обидва ці сервери працюють з процесорами Intel Xeon L5520, які не найшвидші. Однак я запустив top
команду під час одного з тестів iperf і натиснув 1
для перегляду використання процесора ядром і виявив, що завантаження процесора було дуже низьким для кожного ядра:
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. Час Ping значно збільшується в тунелі OpenVPN, поки працює iperf. Якщо iperf не працює, частота пінг-проходу через тунель постійно становить 60 мс (нормально). Але коли iperf працює і штовхає великі затори, пінг-часи стають нестабільними. Нижче ви можете бачити, наскільки стабільні періоди ping до 4-го ping, коли я розпочав тест 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. Як було сказано вище, я пробіг iperf поза тунелем OpenVPN, і пропускна здатність була нормальною - ~ 88Mbps послідовно.
Що я спробував:
1. Я думав, що стиснення може зіпсувати речі, тому я вимкнув стиснення, видаливши comp-lzo
з обох конфігурацій і перезапустивши OpenVPN. Поліпшення немає.
2. Незважаючи на те, що раніше я виявив, що використання процесора низьке, я вважав, що шифр за замовчуванням може бути трохи надто інтенсивним для того, щоб система не відставала. Тому я додав cipher RC2-40-CBC
до обох конфігурацій (дуже легкий шифр) і перезапустив OpenVPN. Поліпшення немає.
3. Я читав на різних форумах про те, як налаштування фрагмента, mssfix та mtu-tun може допомогти в продуктивності. Я грав з декількома варіаціями, як описано в цій статті , але знову ж таки, без покращення.
Будь-які ідеї щодо того, що може спричинити такі низькі показники OpenVPN?
cipher none
хоча я сумніваюся, що це допоможе.