Один из существенных недостатков OpenVPN его довольно низкая производительность по сравнению с аналогами. Это становится особо заметно на скоростях 100+ мегабит. В большинстве случае производительность туннеля больше всего зависит от выбранного метода шифрования и его сложности, но есть и другие нюансы.
Ниже я собрал основные параметры OpenVPN, которые нужно проверить, если вы замечаете медленную работу OpenVPN (в скобках указаны названия параметров в конфигурационном файле сервере OpenVPN server.conf):
- Попробуйте отключить сжатие и посмотреть, повлияет ли это на скорость (удалить параметр
comp-lzo yes
) - Если у вас используется TCP транспорт, замените его на UDP (
proto udp
) - Попробуйте использовать более простой метод шифрования. Например, AES-128-CBC вместо AES-256-CBC (параметр
cipher AES-128-CBC
) - Проверьте загрузку ядер процессора при тестировании производительности канала OpenVPN. Если вы обнаружите, что одно из ядер полностью загружено процессом openvpn, значит ваш CPU не справляется с обработкой подключений.
Есть ряд более сложных настроек, которые также могут повлиять на быстродействие OpenVPN:
- Размеры буферов приема и отправки в OpenVPN (параметры sndbuf и rcvbuf). Проверьте значения буфером (по умолчанию 64Кб). Попробуйте увеличить их или отключать управление со стороны OpenVPN. Настройки буферов нужно поменять на сервере и передать их клиентам.
Текущий размер буфера можно определить по следующей строке в логе подключения:
Socket Buffers: R=[65536->65536] S=[65536->65536]
Размеры буферов можно указать в server.conf:
sndbuf 524288 rcvbuf 524288
Чтобы передать новые параметры клиентов без обновления их конфигурационных файлов, вы можете передать им новые настройки с сервера через push:
push "sndbuf 524288" push "rcvbuf 524288"
- Попробуйте изменить MTU с помощью параметра
tun-mtu
. Это параметр часто бывает причиной низкой скорости туннеля - Попробуйте изменить длину очереди отправки
txqueuelen
. В большинстве случае значение по-умолчанию не нужно менять. Но если ничего не помогло, проверьте и этот параметр.