У меня очень странная проблема с OpenVPN.
Большинство VPN работают нормально, кроме этого. Здесь я получаю очень низкую производительность от TCP-соединений, но загрузка ЦП низкая (так что это не проблема ЦП).
OpenVPN настроен с использованием UDP, шифра AES-256-CBC, аутентификации SHA256 и без сжатия.
Вот несколько измерений, которые я провел с помощью iperf:
Сетевое подключение без VPN:
iperf -c external.ip result:300 - 500mbps (good)
iperf -c vpn.int.ip result: 20-30mbps (not good)
Использование процессора на обоих концах низкое. Хорошо, возможно, некоторые интернет-провайдеры формируют или фильтруют UDP-пакеты.
iperf -c external.ip -b 500M result: no packet loss
Хм ... что, если я заставлю поток UDP через VPN
iperf -c vpn.int.ip -b 100M result: no packet loss
iperf -c vpn.int.ip -b 180M result: packet loss ~0.1%
Итак, мое VPN-соединение должно увеличиваться до 180 Мбит / с, исходя из результатов с UDP, но это не так. Я также получаю очень странный график с tcptrace.
Вот как проходит хороший тест (без VPN, с использованием внешних IP-адресов):
Как видите, отправленные пакеты остаются рядом с желтой линией, что означает, что окно приема остается почти полным. Эта часть графика находится около начала соединения, позже отправленные пакеты практически находятся над желтой линией.
И вот что я получаю от VPN:
Теперь по какой-то причине отправитель действует так, как если бы окно было очень маленьким, даже если оно было большим (не имеет значения, что я установил для окна, попытался сохранить настройку по умолчанию и 4 МБ) и отправляет пакеты только небольшими пакетами.
Я впервые вижу такой график? Что могло быть причиной этого? Какая-то UDP-фильтрация провайдером, сам OpenVPN, что-то еще?
РЕДАКТИРОВАТЬ: запуск VPN с использованием TCP вместо UDP приводит к пропускной способности 10 Мбит / с.
Я решил это. Вернее, я знаю, как сделать это быстрее, но не знаю, почему так медленно. Кажется, что шифр AES каким-то образом мешает TCP на этом конкретном сервере и приводит к низкой производительности. Если я изменю шифр, скажем, на 3des (который медленнее, как сообщает "скорость openssl"), я получу 150 Мбит / с. После некоторых проб я теперь использую это:
cipher camellia-128-cbc
auth sha1
tun-mtu 9000
Теперь я получаю 300 Мбит / с для одного потока и 450 Мбит / с для нескольких потоков.
возможно, у вас возникли проблемы с MTU при соединении. взгляните на следующие две ссылки, они могут содержать некоторую полезную информацию.