Вопрос или проблема
У меня есть фаервол pfsense (2.7.2-RELEASE), работающий в облаке с 4 выделенными CPU и 16GB RAM. За фаерволом находится сервер с доступом в интернет через pfSense. Я также могу подключить свой ноутбук с помощью OpenVPN Client и получить доступ к серверу по локальному IP.
Если я протестирую с помощью iperf3 с ноутбука до сервера через интернет, моя скорость ВВЕРХ и ВНИЗ составляет не менее 500 Мбит/сек.
Если я использую внутренний IP через OpenVPN, моя скорость на ВВЕРХ составляет около 30 Мбит/сек, а на ВНИЗ — около 3 Мбит/сек с многими падениями до 0.
Для полноты картины я провел этот тест также со всевозможными комбинациями между серверами за фаерволом, внешними серверами и несколькими ноутбуками, используя внутренние и внешние IP, и все скорости находятся в пределах от 500 Мбит/сек до 1,5 Гбит/сек.
Единственная проблема возникает через OpenVPN.
OpenVpn/pfSense:
Шифры данных: AES-256-GCM, CHACHA20-POLY1305
Суммирование: SHA256
Параметры D-H: 2048 бит
Тип процессора AMD EPYC Processor
4 CPU: 1 пакет(ы) x 2 ядра x 2 аппаратных потока
AES-NI CPU Crypto: Да (активно)
QAT Crypto: Нет
Аппаратное шифрование AES-CBC, AES-CCM, AES-GCM, AES-ICM, AES-XTS, SHA1, SHA256
Загрузка процессора и памяти менее 10%
Есть идеи, как ускорить соединение через VPN?
Конфигурация сервера config.ovpn
dev ovpns1
verb 1
dev-type tun
dev-node /dev/tun1
writepid /var/run/openvpn_server1.pid
script-security 3
daemon
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
proto udp4
auth SHA256
up /usr/local/sbin/ovpn-linkup
down /usr/local/sbin/ovpn-linkdown
client-connect /usr/local/sbin/openvpn.attributes.sh
client-disconnect /usr/local/sbin/openvpn.attributes.sh
multihome
engine rdrand
tls-server
server 10.33.30.0 255.255.255.0
client-config-dir /var/etc/openvpn/server1/csc
username-as-common-name
plugin /usr/local/lib/openvpn/plugins/openvpn-plugin-auth-script.so /usr/local/sbin/ovpn_auth_verify_async user ##PASS## false server1 1194
tls-verify "/usr/local/sbin/ovpn_auth_verify tls '##HOST##' 1"
lport 1194
management /var/etc/openvpn/server1/sock unix
push "route 10.33.0.0 255.255.0.0"
push "register-dns"
duplicate-cn
capath /var/etc/openvpn/server1/ca
cert /var/etc/openvpn/server1/cert
key /var/etc/openvpn/server1/key
dh /etc/dh-parameters.2048
tls-auth /var/etc/openvpn/server1/tls-auth 0
data-ciphers AES-256-GCM:CHACHA20-POLY1305
data-ciphers-fallback CHACHA20-POLY1305
allow-compression no
topology subnet
fast-io
explicit-exit-notify 1
Клиент.ovpn
dev tun
persist-tun
persist-key
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC
data-ciphers-fallback AES-256-CBC
auth SHA256
tls-client
client
resolv-retry infinite
remote ##HOST## 1194 udp4
nobind
verify-x509-name "##HOST##" name
auth-user-pass
remote-cert-tls server
explicit-exit-notify
<ca>
-----BEGIN CERTIFICATE-----
##@@@##
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
##@@@##
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
##@@@##
-----END PRIVATE KEY-----
</key>
key-direction 1
<tls-auth>
#
# 2048 бит статический ключ OpenVPN
#
-----BEGIN OpenVPN Static key V1-----
##@@@##
-----END OpenVPN Static key V1-----
</tls-auth>
Ответ или решение
Рассматривая возникшую проблему медленной работы OpenVPN через pfSense, стоит принять во внимание несколько аспектов конфигурации и производительности, которые могут быть источником проблемы.
Теория
OpenVPN функционирует как виртуальная частная сеть, создающая защищенный канал связи между клиентом и сервером. Ключевые параметры, влияющие на скорость VPN-соединения, включают алгоритмы шифрования и целостности, настройки MTU (Maximum Transmission Unit), метод передачи данных (TCP или UDP), а также оборудование, используемое для обработки трафика.
Пример
Помимо вашей конфигурации, лучший практический опыт показывает, что использование более легких шифров и оптимизация параметров трансфера может значительно улучшить производительность соединения:
-
Шифрование: В вашей конфигурации используются алгоритмы AES-256-GCM и CHACHA20-POLY1305. Это современные и надежные алгоритмы, но они могут требовать значительных вычислительных ресурсов. Иногда уменьшение сложности шифра, например, использование AES-128-GCM, может облегчить нагрузку на процессор без существенного снижения безопасности.
-
Транспортный протокол: Вы используете UDP, что является правильным выбором для OpenVPN, так как он обеспечивает меньшую задержку по сравнению с TCP.
-
MTU: Неправильная настройка размера MTU может привести к фрагментации пакетов и, как следствие, снижению производительности. Стоит протестировать различные значения MTU, чтобы найти наиболее оптимальное для ваших условий.
-
Параметры keepalive: У вас активирован keepalive с интервалом 10 60. Пробуйте увеличить значения, чтобы снизить частоту проверок связи и уменьшить нагрузку.
Применение
-
Оптимизация шифрования: Рассмотрите возможность использовать AES-128-GCM на обеих сторонах связи — как серверной, так и клиентской. Это может улучшить производительность без существенных компромиссов по безопасности из-за сильных преимуществ AES.
-
Настройка MTU: Добавьте в файл конфигурации параметр
mssfix
илиfragment
и протестируйте значения начиная с 1300, постепенно увеличивая или уменьшая, оценивая изменения в скорости соединения. -
Анализ логов и QoS: Проверьте логи OpenVPN и pfSense на наличие ошибок и предостережений, связанных с переработанным или потерянным трафиком. Убедитесь, что политики качества обслуживания (QoS) не ограничивают скорость OpenVPN.
-
Тест производительности: Очистите отладочную информацию и временно повысьте уровень детализации до
verb 3
, чтобы более подробно отслеживать процессы и выявить узкие места. -
Альтернативные алгоритмы: Попробуйте временно переключиться на менее жесткие параметры целостности, например SHA1, и оцените изменения в производительности. Это особенно актуально, если ресурсы на вычисления ограничены.
Применение перечисленных предложений позволит выявить слабые места в текущей настройке и улучшить производительность OpenVPN на вашем pfSense, обеспечивая более стабильное и быстрое соединение.