Сжатие в openvpn
Решил провести маленький эксперимент со сжатием трафика в openvpn туннеле и попытаться выяснить насколько оно эффективно. В первом тесте параметр comp-lzo в конфигах сервера и клиента отсутствует. Выполняю команду на сервере:
dd if=/dev/zero | nc -l -p 9000
На клиенте:
nc 2.2.2.1 9000 | pv > /dev/null
Адрес 2.2.2.1 — адрес tun интерфейса на сервере. pv выдало скорость 1,5MiB/s, при тарифе клиента 15 Мбит/c. Неплохо. Затем прописал comp-lzo в конфиги, и скорость осталась такой же — 1,5MiB/s. То есть сжатие получается не работает? В чем причина, как заставить работать? Добавление в конвейер gzip выдает скорость уже 70-80 MiB/s. Клиент и сервер — убунты 14.04
ryllidium
09.01.16 17:24:43 MSK
comp-lzo yes
с обеих сторон?
ValdikSS ★★★★★
( 09.01.16 23:07:30 MSK )
Ответ на: комментарий от ValdikSS 09.01.16 23:07:30 MSK
Действительно эффект есть, но крайне посредственный. Бывают всплески до 3 MiB/s, но за скачком следует просадка до 500 KiB/s, затем уравновешивается до все тех же 1,5. То есть можно сказать, что на общую картину не влияет.
ryllidium
( 09.01.16 23:55:54 MSK ) автор топика
Ответ на: комментарий от ryllidium 09.01.16 23:55:54 MSK
ИМХО, компрессия на быстрых канала не особо работает.
Тунель на tcp или udp?
Какую полосу занимает openvpn-траффик при включеной компрессии?
mky ★★★★★
( 10.01.16 02:23:32 MSK )
Ответ на: комментарий от mky 10.01.16 02:23:32 MSK
тунель udp, второй вопрос не совсем понятен
ryllidium
( 10.01.16 03:06:55 MSK ) автор топика
Во-первых, компрессия срабатывает в рамках пакета (если это правило нарушить, при потере одного пакета будет на самом деле теряться много, что недопустимо).
Во-вторых, ты упираешься в задержки на канале и размер окна tcp, а не в полосу пропускания. То есть, если у тебя результаты ping -s 32 и ping -s 1024 по критерию time не различаются в разы, то компрессия тебе ничего не даст.
no-dashi ★★★★★
( 10.01.16 10:29:59 MSK )
Ответ на: комментарий от ryllidium 10.01.16 03:06:55 MSK
тунель udp, второй вопрос не совсем понятен
Тебя спросили сколько байт в секунду отправляется по порту openvpn без компрессии и с компрессией.
no-dashi ★★★★★
( 10.01.16 10:31:35 MSK )
Ответ на: комментарий от ryllidium 10.01.16 03:06:55 MSK
Если есть возможность, сделайте в iptables счётчики на порт 1194 udp (или какой у вас используется) и на сервере, и на клиенте, и на входящий и на исходящий. Записывайте их периодически или, по крайней мере, перед началом передачи и по её окончании. Можно будет понять, есть ли сжатие на самом деле и каковы потери пакетов на шейпере провадера.
Может быть у вас большие потери, из-за этого повторые передачи, задержки, потеря скорости. Может вам нужна опция —shaper, чтобы не выходить за полосу, выделяемую провайдером.
И, в моменты измерений скорости другого траффика нет?
mky ★★★★★
( 10.01.16 11:49:18 MSK )
попробовал между 2 виртуалками, без сжатия и шифрования через tcp получилось 200мб в iperf тесте
с сжатием lzo 400мб
с сжатием через udp получилось 150
==========
dev tun0
proto tcp-server
port 10000
user nobody
group nogroup
comp-lzo
persist-tun
cipher none
auth none
==========
dev tun0
proto tcp-client
remote 192.168.88.176 10000
user nobody
group nogroup
port 10000
comp-lzo
persist-tun
cipher none
auth none
theurs ★★
( 10.01.16 13:05:54 MSK )
Тоже, помнится, ооочень давно с этим разбирался, деталей не помню, но у меня сжатие выключено. Из тёмных глубин памяти, вроде как даже на 10Мбит/с это уже не имело смысла.
Основные параметры OpenVPN
Подробности использования команд и их параметры — man openvpn.
remote < host >— определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
local < host >— определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
dev < device >— определяет какой использовать тип устройства tun или tap. Например:
При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
port < port number >— указывает на каком порту будет работать OpenVPN (локально и удаленно).
proto < proto >— какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server.
- tcp-client — сам пытается установить соединение
- tcp-server — только ждет подключений
С использованием протокола udp VPN будет работать быстрее, чем tcp, но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво).
remote-random — если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.
float — позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
ipchange < cmd >— выполняет скрипт или команду указанную в < cmd >, если IP сменился. Пример:
ipchange script-ip.sh
connect-retry < seconds >— пробует переподключиться через указанное время в секундах, если соединение было разорвано.
connect-retry-max < n >— максимальное количество повторов если соединение было разорвано
resolv-retry < seconds >— если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
lport < port >— указывает на локальный порт для использования OpenVPN
rport < port >— аналогично для удаленного порта. Пример:
rport 8000 — OpenVPN будет пытаться подключится к удаленному порту 8000
nobind — использовать динамический порт для подключения (только для клиента)
shaper < bytes >— указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
tun-mtu < mtu size >— устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование:
tun-mtu 1200
dev-node < interface name >— устанавливает имя виртуального интерфейса. Например:
dev-node openvpn1
ifconfig — устанавливает локальный IP и маску подсети для туннельного интерфейса. Например:
ifconfig 10.3.0.0 255.255.255.0
server < network > < mask >— автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например:
server 10.3.0.0 255.255.255.0
Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.3 и 10.3.0.254. Адрес 10.3.0.1 сервер оставит себе.
server-bridge < gateway > < mask > < pool >— сервер в режиме моста для TAP устройств. Пример:
server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
Клиентам будут выданы адреса в диапазоне 10.3.0.128 — 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
mode server — переключает OpenVPN в режим сервера (начиная с 2-й версии)
mode p2p — данная опция идет по умолчанию.
push < options >— передача клиенту конфигурационных параметров. Пример:
push "route 192.168.0.0 255.255.255.0"
Аналогично с помощью push клиенту могут передаваться следующие параметры:
route route-gateway route-delay redirect-gateway inactive ping, ping-exit, ping-restart persist-key, persist-tun comp-lzo dhcp-option ip-win32
Последние две опции применимы только для Window-клиентов.
comp-lzo — параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive.
- comp-lzo yes — принудительно включить сжатие
- comp-lzo no — принудительно отключить сжатие
- comp-lzo adaptive — адаптивный режим.
route < network >— устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример:
route 10.0.10.0 255.255.255.252
route-gateway < IP >— устанавливает шлюз на VPN-хосте. Пример:
route-gateway 192.168.0.22
После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22
route-delay < seconds >— указывает подождать n-секунд перед установкой маршрутов. Пример:
route-delay 5
Т.е. через 5 секунд после установки туннеля будут заданы маршруты.
route-up < cmd >— выполнить скрипт или программу < cmd >после установки маршрутов. Пример:
route-up /script.sh
redirect-gateway — установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.
ping < seconds >— указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10
ping-restart < seconds >— если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример:
ping-restart 60 — если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.
ping-timer-rem — позволяет перезапускать туннель, только когда указан удаленный адрес.
persist-tun — данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
persist-key — указывает не перечитавать файлы ключей при перезапуске туннеля.
resolv-retry < seconds >— устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример:
resolv-retry 86400
inactive < seconds >— после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример:
inactive 120
ping-exit < seconds >— если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример:
ping-exit 120
keepalive < seconds > < seconds >— является совмещением сразу двух команд — ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример:
keepalive 10 180
Означает следующее: каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
persist-local-ip < IP >— оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip < IP >— оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip 192.168.50.1
Похожие статьи на сайте
- Исправляем ошибку Resource temporarily unavailable (errno=11)
- Ошибка при работе OpenVPN: error=CRL has expired
- Ошибка 0E065068:configuration file routines:STR_COPY:variable has no value:conf_def
- Установка OpenVPN в Debian/Ubuntu/Mint из стандартных репозиториев проекта OpenVPN
- OpenVPN против WireGuard: краткое сравнение
- TLS: soft reset — что означает это сообщение в логах OpenVpn
- Как отозвать клиентский сертификат OpenVPN?
- Создание инфраструктуры открытых ключей OpenVPN (easy-rsa)
- Основные параметры OpenVPN
Команды OpenVPN
OpenVPN — очень гибкое, удобное, а главное быстрое и безопасное, решение для построения виртуальных частных сетей VPN. В данной статье я попытаюсь наиболее подробно описать основные команды, используемые в OpenVPN.
Приведенные в статье команды без «—» (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с «—» в начале используются только из командной строки. Подробности использования команд и их параметры — man openvpn.
remote — определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
local — определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
dev — определяет какой использовать тип устройства tun или tap. Например:
dev tun
или
dev tap
При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
port — указывает на каком порту будет работать OpenVPN (локально и удаленно).
proto — какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server. С первыми двумя все ясно, а на последних двух остановимся чуть подробнее:
tcp-client — сам пытается установить соединение
tcp-server — только ждет подключений
Примечательно, что с использованием протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)
remote-random — если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.
float — позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
ipchange — выполняет скрипт или команду указанную в , если IP сменился. Пример:
ipchange script-ip.sh
connect-retry — пробует переподключиться через указанное время в секундах, если соединение было разорвано.
connect-retry-max — максимальное количество повторов если соединение было разорвано
resolv-retry — если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
lport — указывает на локальный порт для использования OpenVPN
rport — аналогично для удаленного порта. Пример:
rport 8000 — OpenVPN будет пытаться подключится к удаленному порту 8000
nobind — использовать динамический порт для подключения (только для клиента)
shaper — указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
tun-mtu — устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование:
tun-mtu 1200
dev-node — устанавливает имя виртуального интерфейса. Например:
dev-node openvpn1
ifconfig — устанавливает локальный IP и маску подсети для туннельного интерфейса. Например:
ifconfig 10.3.0.1 255.255.255.0
server < network >— автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например:
server 10.3.0.0 255.255.255.0
Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.
server-bridge < gateway > < mask >— сервер в режиме моста для TAP устройств. Пример:
server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
Клиентам будут выданы адреса в диапазоне 10.3.0.128 — 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
mode server — переключает OpenVPN в режим сервера (начиная с 2-й версии)
mode p2p — данная опция идет по умолчанию.
Опции в режиме сервера
push — передача клиенту конфигурационных параметров. Пример:
push «route 192.168.0.0 255.255.255.0»
Аналогично с помощью push клиенту могут передаваться следующие параметры:
route
route-gateway
route-delay
redirect-gateway
inactive
ping, ping-exit, ping-restart
persist-key, persist-tun
comp-lzo
dhcp-option
ip-win32
Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11:
push «dhcp-option DNS 11.11.11.11»
comp-lzo — параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
Например:
comp-lzo yes — принудительно включить сжатие
comp-lzo no — принудительно отключить сжатие
comp-lzo adaptive — адаптивный режим.
Команды и параметры при работе с сертификатами x509 и параметрами шифрования
cipher — указываем алгоритм шифрования. Например:
cipher AES-256-CBC
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
keysize — размер ключа в битах. Например:
keysize 128
auth — алгоритм хэширования. Пример:
auth SHA1
df — файл с ключем Диффи-Хелмана
ca — файл сертификата для CA
cert — сертификат локальной машины
key — локальный ключ машины
tls-server — явно указывает, что данный хост является tls-server
tls-client — соответственно tls-client
pkcs12 — указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример:
pkcs12 /file
crl-verify — список отозванных сертификатов, т.е. blacklist.
no-replay — отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!
no-iv — отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
Последние две опции очень сильно снижают безопасность OpenVPN, крайне не рекомендуется их использование.
secret — включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой —genkey, файл. Например:
secret key.txt
Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:
openvpn —show-ciphers
Алгоритмы хэширования:
openvpn —show-digests
Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления)
openvpn —show-tls
Показать все доступные крипто-устройства в системе (если такие имеются):
openvpn —show-engines
Для улучшения безопасности рекомендовано запускать все сервисы с минимальными правами. Следующими двумя командами мы укажем с правами какого пользователя и группы будет работать openvpn:
user nobody
group nogroup
Где, соответственно, nobody и nogroup имена пользователя и группы.
Команды для управления маршрутизацией
Обозначение: VPN-хост — удаленная сторона (удаленный хост)
route — устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример:
route 10.0.10.0 255.255.255.252
route-gateway — устанавливает шлюз на VPN-хосте. Пример:
route-gateway 192.168.0.22
После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22
route-delay — указывает подождать n-секунд перед установкой маршрутов. Пример:
route-delay 5
Т.е. через 5 секунд после установки туннеля будут заданы маршруты.
route-up — выполнить скрипт или программу после установки маршрутов. Пример:
route-up /script.sh
redirect-gateway — установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.
Команды для управления туннелем
ping — указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10
ping-restart — если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример:
ping-restart 60 — если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.
ping-timer-rem — позволяет перезапускать туннель, только когда указан удаленный адрес.
persist-tun — данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
persist-key — указывает не перечитавать файлы ключей при перезапуске туннеля.
resolv-retry — устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример:
resolv-retry 86400
inactive — после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример:
inactive 120
ping-exit — если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример:
ping-exit 120
keepalive < seconds >— является совмещением сразу двух команд — ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример:
keepalive 10 180
Означает следующее: каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
persist-local-ip — оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip — оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip 192.168.50.1
Методы аутентификации
auth-user-pass-verify < script >— указывается только на серверной стороне.
< script >— путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
< method >— метод авторизации, может быть двух типов: via-env и via-file
auth-user-pass — указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль.
должен содержать имя пользователя и пароль в двух строчках:
username
password
client-cert-not-required — отключает авторизацию по сертификатам.
Работа с прокси
OpenVPN без проблем может работать через http и socks прокси.
http-proxy — указываем адрес и порт прокси-сервера.
http-proxy 192.168.0.12 8080
Если требуется авторизация на прокси-сервере:
http-proxy — где authfile — файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль).
Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method.
auth-method может быть трех видов «none», «basic» или «ntlm».
Используется в OpenVPN начиная с версии 2.1.
http-proxy-retry — переподключаться, если соединение было разорвано.
http-proxy-timeout — считать соеденение с прокси-сервером разорванным после n-секунд неактивности. Например:
http-proxy-timeout 5
socks-proxy — указываем сокс-прокси сервер. Пример:
socks-proxy 192.168.0.12 8080
socks-proxy-retry — переподключаться, если соединение было разорвано.
auto-proxy — автоматически определять прокси-сервер. Требуется версия OpenVPN 2.1 и выше.
Скриптинг
up — выполнить команду после запуска устройства TUN/TAP. Пример:
up script-up.sh
up-delay — подождать n-секунд перед запуском команды указанной в up. Пример:
up-delay 5
down — выполнить команду когда интерфейс TUN/TAP выключится. Пример:
down script-down.sh
down-pre — выполнить команду, указанную в down перед выключением интерфейса TUN/TAP
up-restart — выполнить команду после каждого реконнекта
route-up — выполнить команду после установки сетевых маршрутов. Пример:
route-up script.sh
learn-address — выполнить указанную команду, если ip удаленной стороны изменился.
ipchange — выполнить команду, если ip сервера изменился.
client-connect — выполнить команду, когда клиент подключился.
client-disconnect — выполнить команду, когда клиент отключился.
Команды отладки и поиска неисправностей
verb — устанавливает уровень информативности отладочных сообщений. Может принимать параметр от 0 до 11. По умолчанию verb равен 1.
При уровне verb 5 и выше в логе будут встречаться подобные записи: RwrW. R (read), W (write) — соответственно чтение и запись. Большая буква обозначает, что пакет был считан (R) или записан (W) на виртуальном устройстве TUN/TAP, а маленькие — считан (r) и записан (w) в туннеле.
mute — если значение установлено в 10, то в лог будет записываться только по 10 сообщений из одной категории.
Логирование
log — указываем лог-файл. Если данный параметр не указан, то весь вывод openvpn будет производиться в stdout.
log-append — дописывать сообщения в лог-файл, а не перезаписывать.
status — указывает путь к статус-файлу, в котором содержится информация о текущих соединениях и информация о интерфейсах TUN/TAP.
Разные вопросы
В. Чем отличаются виртуальные устройства tun и tap?
О. TUN — туннель, соединение по которому указывается по типу: локальный IP < --- >удаленный IP. Например, при явном указании ifconfig:
—ifconfig 10.3.0.2 10.3.0.1
в этом примере 10.3.0.2 — локальный IP, 10.3.0.1 — удаленный IP
TAP — эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например:
—ifconfig 10.3.0.2 255.255.255.0
В. Для чего нужны файлы serial и index.txt при генерации ключей с easy-rsa?
О. Эти два файла используются в качестве временной базы данных, используемой при генерации ключей. Должны находиться в том каталоге, где и ключи.
19.11.2016 23:31 VecH
Если клиент получил ошибку AUTH_FAILED
то он перестает переподключение и тупо гасит демона/сервис, помогает только перезапуск ОС или ручной запуск клиента
Опция «connect-retry» в данном случае поможет заставить клиента переподключаться принудительно даже при ошибке AUTH_FAILED ?
23.11.2016 11:37 bzzz
Не сталкивался лично, но подозреваю, что нет. AUTH_FAILED по идее означает или неверные (ложные) данные аутентификации со стороны клиента или же ошибку на стороне сервера (пишут в сети что у кого-то подвис сервер, кто-то yum upgrade сделал и все пошло и т.п.). Зачем openvpn будет пытаться еще раз применить неверные данные? Это же не тоже самое, что и keep-alive.
Авторизуйтесь для добавления комментариев!
Почтовый сервер Mikrotik VPN 3proxy Шифрование Squid Резервное копирование Защита почты Виртуальные машины Настройка сервера java kvm Групповые политики SELinux OpenVPN IPFW WDS Lightsquid Samba firewalld systemd Mobile libvirt Remote desktop WiFi Iptables NAT Postfix Dovecot Удаление данных Софт Безопасность Winbox User agent Хостинг Передача данных Онлайн сервисы Privacy LetsEncrypt VPN сервер Настройка прокси RRDTool sendmail Rsync Linux SSH Система Windows Синхронизация Облако fail2ban FreeBSD
Настройка OpenVPN клиента
Обновлено: 09.12.2021 Опубликовано: 20.07.2017
В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.
Установка
Windows
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Linux CentOS
Устанавливаем репозиторий EPEL:
yum install epel-release
yum install openvpn
Linux Ubuntu
apt-get install openvpn
Android
Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect — нажимаем установить и принимаем условия.
Настройка
После установки программы конфигурационный файл не создается автоматически и его нужно создать вручную.
В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.
* имя файла может быть любым, расширение должно быть .ovpn.
Для создания конфигурационного файла в Linux выполняем команду:
* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.
Пример конфигурационного файла
client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0
Параметры конфигурационного файла
Параметр | Значения | Описание |
---|---|---|
client | Строка говорит о том, что конфигурационный файл описывает клиентское подключение (программа сама устанавливает соединение, а не ждет, как сервер). | |
dev | tap или tun | Выбор виртуального сетевого драйвера. TUN — сетевой уровень модели OSI, оперирует IP-пакетами. TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Настраивая OpenVPN клиента, в большинстве случаев, необходимо выбирать tun. TAP необходимо использовать для работы определенных сервисов, например DHCP. |
dev-node | любая строка | Параметр используется в системах Windows в случаях, если имеется несколько сетевых интерфейсов. Значение этого параметра должно содержать название сетевого подключения, через который должен работать OpenVPN. |
proto | udp или tcp | Указывает, какой протокол использовать для передачи данных. В большинстве случаев, лучше использовать UDP, так как данный протокол создает меньше нагрузки на сеть. |
remote | VPN-сервер и порт | Задает сервер, к которому должен подключаться клиент, а также сетевой порт (по умолчанию 1194), на котором OpenVPN принимает запросы. Можно указать несколько строк. |
remote-random | Если указано несколько строк remote, данный параметр говорит, что необходимо подключаться к удаленным серверам в случайном порядке. | |
resolv-retry | количество секунд или infinite | Используется в тех случаях, когда в качестве сервера указано доменное имя. Параметр задает время в секундах для повторного переподключения, если не удалось узнать имя сервера. infinite — держать связь с сервером постоянно. |
nobind | Клиент использует динамический порт для подключения. | |
user | учетная запись | Задает определенного пользователя для работы клиента (только для UNIX-систем). |
group | группа | Задает определенную группу для работы клиента (только для UNIX-систем). |
persist-key | Не перечитывает ключи при перезагрузке сервиса OpenVPN. | |
persist-tun | Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN. | |
http-proxy | сервер прокси и порт | Использовать прокси-сервер для подключения. |
http-proxy-retry | Переподключаться к прокси-серверу, если связь была разорвана. | |
http-proxy-timeout | количество секунд | Время, через которое выполнять попытки переподключения к прокси-серверу. |
mute-replay-warnings | Параметр стоит задавать при использовании беспроводного соединения. Он отключит дублирование предупреждений пакетов. | |
ca | пут к сертификату | Корневой сертификат удостоверяющего центра. Генерируем на сервере. |
cert | пут к сертификату | Открытый ключ клиента. Генерируем на сервере. |
key | пут к сертификату | Закрытый ключ клиента. Генерируем на сервере. |
dh | пут к сертификату | Ключ с алгоритмом Diffie-Hellman (Диффи-Хеллмана). |
remote-cert-tls | сервер | Исключает возможность mitm атаки, включая верификацию сертификата сервера. |
tls-client | Указание на то, что это клиент TLS. | |
tls-auth | ta.key 1 | Дополнительный уровень аутентификации посредством ключа TLS. |
float | Удаленный хост может менять IP-адрес в процессе соединения, при этом последнее не будет разорвано. | |
keepalive | секунд1 секунд2 | Пинговать каждые секунд1 сервер и если в течение секунд2 не будут получены ответные пакеты, перезапустить подключение. |
cipher | алгоритм | Указывает алгоритм шифрования. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. |
comp-lzo | Использовать сжатие. | |
verb | число от 0 до 9 | Уровень детализации лога. 0 отключает отладочную информацию. |
mute | число | Указывает сколько лог-сообщений может отображаться для каждой категории события. |
auth-user-pass | ничего или путь к файлу | Говорит клиенту, что необходима аутентификация. Если не указан путь к файлу, клиент выкинет окно для авторизации, иначе прочитает данные из файла. |
ipchange | команда или путь к скрипту | Выполняет команду при смене IP. |
connect-retry | секунд | Переподключиться к серверу через указанное количество секунд, если соединение было разорвано. |
connect-retry-max | число | Сколько раз повторять соединение, если оно было разорвано. |
shaper | байт | Задает максимальную скорость передачи данных для исходящего трафика. |
tun-mtu | число | Задает MTU. |
status | путь к файлу | Путь к фалу хранения статуса. |
log | путь к файлу | Путь к лог-файлу. |
askpass | путь к файлу | Путь к файлу с паролем для приватного ключа (private key password). |
Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn —help (в Linux и Windows).
Сертификаты
Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.
Для Linux: