Назад | Перейти на главную страницу

TCP под OpenVPN очень медленный (tsg прилагается)

У меня очень странная проблема с 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 при соединении. взгляните на следующие две ссылки, они могут содержать некоторую полезную информацию.

Настройте MTU с помощью фрагмента и MSS

Оптимизация производительности в гигабитных сетях