Ускоряем OpenVPN или немного о размере буфера.

Материал из support.qbpro.ru
Версия от 03:12, 28 января 2019; imported>Vix
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Чуть-чуть теории. Несколько слов о том, как можно повысить скорость OpenVPN соединения увеличив размер буферов в конфиге. Далее по заметке делюсь тем, что делал сам.

Итак, если кратко, размер буфера — это величина обозначающая максимальный объём данных, который будет передан за единицу времени. Так уж сложилось, что в OpenVPN этот параметр составляет 64КБ. При этом, количество отправленных пакетов на единицу времени ограничивается скоростью прохождения этих самых пакетов. Соответственно, чем ниже у нас будет скорость прохождения пакетов (чем больше будет пинг), тем ниже скорость работы OpenVPN мы получим.

Что делать в данной ситуации? Попробовать увеличить объём данных, который будет передаваться за единицу времени. В OpenVPN для этого предусмотрены параметры sndbuf и rcvbuf. Для того, что бы размер буфера задавался настройками ОС, в конфиг можно просто задать этим параметрам 0:

sndbuf 0
rcvbuf 0

Если возможности изменить конфиг клиента нет, то значения буфера нужно ему передать с помощью push. При этом, передавать мы будем сразу же большое знчение:

sndbuf 0
rcvbuf 0
push "sndbuf 524288"
push "rcvbuf 524288"

При этом, мы можем обозначить и размер буфера в конфиге сервера, сделать вот так, например:

sndbuf 524288
rcvbuf 524288
push "sndbuf 524288"
push "rcvbuf 524288"

Кроме того, размер буферов мы можем изменить и в настройках самой системы (далее речь о Linux). Если мы используем UDP в OpenVPN, то увеличить буферы можно передав значения для параметров net.core.rmem_default и net.core.wmem_default, при этом, передаваемые им значения мы делим на два. При использовании TCP, размер буферов увеличивается параметрами net.ipv4.tcp_rmem и net.ipv4.tcp_wmem.

В моём случае (после которого и появился этот разбор), на сервере использовался UDP, так что параметры были вот такими:

net.core.wmem_default = 212992
net.core.rmem_default = 212992

При этом, не стоит забывать что в системе существуют параметры net.core.rmem_max и net.core.wmem_max, значения которых, возможно, так же (в моём случае потребовалось) потребуется увеличить. Параметры отвечают за максимальный размер буфера для приёма и передачи данных.

ИСТОЧНИКИ: