Как я могу увеличить производительность OpenVPN в сетевой среде с высокой потерей пакетов

1274
Eric Stdlib

Я пытаюсь подключить свой ноутбук к серверу на другом континенте, и кажется, что ссылка очень ненадежная (примерно 58% потери пакетов при пинге).

При использовании VPN через настройку секретного ключа OpenVPN по умолчанию (которая использует UDP), ping в VPN сообщает о 57% -ой потере пакетов (это беспокоит меня такими способами, как медленное установление SSH).

Есть ли эффективный способ уменьшить частоту потери пакетов в этой ситуации? У меня есть административный контроль как на моем ноутбуке, так и на сервере.


Вот часть результата трассировки с моего ноутбука на сервер:

 8 221.176.27.254 (221.176.27.254) 16.870 ms 9 * * * 10 221.183.30.246 (221.183.30.246) 197.288 ms 11 223.118.10.30 (223.118.10.30) 201.422 ms 
1
Определите причину потери пакета. Измените свой маршрут DNS, если вам нужно. Ramhound 6 лет назад 0
Эти две точки находятся в Китае ... если ваш трафик переходит в / из Китая, вы попадаете в огромный межсетевой экран. Получайте удовольствие, убеждая китайцев исправить это;) djsmiley2k 6 лет назад 0

2 ответа на вопрос

0
Tim G

Вы можете переключить OpenVPN на TCP в настройках (как на клиенте, так и на сервере, и, возможно, убедитесь, что ваш TCP OpenVPN защищен до или если вы отключите службу UDP). Это обеспечит в конечном итоге прохождение всех пакетов. Это все еще будет медленным, но это по крайней мере стоит эксперимента. С openvpn.net:

Если вы хотите, чтобы ваш сервер OpenVPN прослушивал порт TCP вместо порта UDP, используйте proto tcpвместо proto udp(Если вы хотите, чтобы OpenVPN прослушивал порты UDP и TCP, вы должны запустить два отдельных экземпляра OpenVPN).


Что касается потери пакетов, вы можете только зафиксировать путь, по которому идут пакеты. Используйте traceroute с обоих концов, чтобы найти оскорбительную часть ссылки и узнать, как ее обойти или сделать более надежной.

Вместо TCP, попробуйте посмотреть, можете ли вы арендовать инфраструктурное время в непосредственной близости от страдающего канала для туннелирования TCP через слабое соединение с пунктом назначения. Это позволило бы UDP-пакетам лететь как можно дальше без необходимости TCP-подтверждения или повторной передачи по всей длине туннеля, только в плохой его части.

Если слабое звено находится на середине пути, вы можете воспользоваться арендой инфраструктуры на обоих концах слабого звена, а не только на одной стороне, но если мы говорим об Антарктике, возможно, это будет сложно.

Если вы решили протестировать этот маршрут, я рекомендую udptunnel как одно из возможных решений. ( udptunnelэто собственный пакет в Ubuntu, но другие опции, такие как socat или creative netcat, будут работать.)

Изменение на TCP уменьшает частоту потери пакетов (до 23%), но средняя задержка проверки связи становится более 60 секунд. Мне сложно добавить какие-либо инфраструктуры в ссылку. Eric Stdlib 6 лет назад 0
Вы можете хотя бы увидеть, где плохая связь с traceroute? Определение того, что, по крайней мере, прояснит, какие варианты у вас могут быть. Чтобы уточнить, что касается «арендной инфраструктуры», мое мышление соответствовало следующему примеру: соединиться с Гонолулу до середины нигде в восточной Калифорнии. Оказывается, плохая связь между SanFran и Срединностью. Арендуйте экземпляр AWS в Калифорнии. Пройдите через UDP VPN, но туннелируйте пакеты vpn через одно TCP-соединение между SanFran и Middle-of-нигде. Применимо ли это решение (потенциально) к вашему конкретному сценарию? Tim G 6 лет назад 0
Кажется, что связь с самой большой задержкой происходит при этом прыжке, но что я могу с этим сделать (аренда сервера для меня довольно трудна)? Я приложил результат traceroute на мой вопрос. Eric Stdlib 6 лет назад 0
0
Vi.

Используйте UDPspeeder . Он обменивает накладные расходы полосы пропускания на устойчивость к потере пакетов.

На стороне сервера начните

speederv2_amd64 -s -l 0.0.0.0:1193 -r 127.0.0.1:1194 

На стороне клиента, начать

speederv2_amd64 -c -l 127.0.0.1:1194 -r your_server_ip:1993 

Затем укажите клиенту OpenVPN UDP 127.0.0.1:1194.

Используйте --fecпараметр, чтобы настроить количество избыточности.