OPENVPN: Запуск в фоновом режиме, настройка маршрутизации, фаервола и другие мелочи
Год назад, может раньше, по совету товарищей, я переполз с PPTP VPN на Openvpn. За это время узнал несколько хинтов, которые, периодически нужны либо по работе, либо кому-нибудь.
Эталонный конфиг, который буду модифицировать, лежит здесь
Windows: не актуально
Linux: да
Решение:
Собрать из исходников, предварительно переконфигурировав командой
./configure --disable-plugin-auth-pamWindows: да
Linux: да, за исключением старых версий, которые приходилось пересобирать со специальным ключом. Если вдруг такое попалось, то обновить.
Решение:
В конфиг соединения надо добавить строку
auth-user-pass /path/to/auth/fileгде
/path/to/auth/ - путь к файлу авторизацииfile - имя файлаДля Windows будет что-то типа
C:\path\to\file.txtФайл авторизации - простой текстовый файл в котором содержатся две строки: первая - логин, вторая - пароль:
содержимое файла
file:username
pa$$w05DWindows: не актуально
Linux: да
Решение:
В конфиг соединения надо добавить строку
daemonWindows: не актуально, во всяком случае, мне не встречалось
Linux: да
Для чего надо: например, для того, чтобы при установке/разрыве соединения, настроить маршрутизацию или iptables (фаерволл)
Решение:
1. Надо разрешить Openvpn выполнять пользовательские скрипты, добавив в конфиг следующую строку:
script-security 22. Прописать путь к скрипту в одном или нескольких нужных параметров конфига, например:
up '/home/kvakushka/scripts/ovpn-routes up'
down '/home/kvakushka/scripts/ovpn-routes down'Вообще, таких параметров довольно много, почти на все случаи жизни:
down <command> — выполнить команду когда интерфейс TUN/TAP выключится. up-restart <command> — выполнить команду после каждого реконнектаroute-up <command> — выполнить команду после установки сетевых маршрутов. up-delay <seconds> — подождать установленное количество секунд перед запуском команды указанной в up. Пример: up-delay 120down-pre <command> — выполнить команду перед тем, как интерфейс TUN/TAP выключится.up <command>— выполнить команду после запуска устройства TUN/TAP. ipchange <command> — выполнить команду, если ip сервера изменился.client-connect <command> — выполнить команду, после того, как клиент подключился.client-disconnect <command> — выполнить команду, после того, как клиент отключился.learn-address <command> — выполнить указанную команду, если IP удаленной стороны стал другим. Надо уточнить, что скриптам
up и down Openvpn передает параметры командной строки, несущие информацию о соединении:[1..N]: Параметры, указанные пользователем в конфигурационном файле, т.е. в вышеприведенном примере, скрипту
ovpn-routes при вызове после того, как поднимется тоннель, будет передано первым параметром "up", а при разрыве соединения - "down".Очень полезный горшочек, позволяющий в одном скрипте обрабатывать несколько событий.
[2]: Имя сетевого устройства (тоннеля). Например,
tun0[3]: MTU сетевого интерфейса
[4]: MTU соединения
Можно использовать для сложной маршрутизации между несколькими каналами и поиска более выгодного маршрута.
[5]: IP-адрес клиента
[6]: IP-адрес клиента на стороне сервера
[7]:
init, если скрипт был вызван во время запуска/останова Openvpn или restart, если скрипт был вызван при перезапуске (обрыве соединения, например).#!/bin/bash
#заводим переменные с понятными именами
MAIN_STAT=$1 #up/down
DEV_NAME=$2
TUN_MTU=$3
LINK_MTU=$4
LOCAL_IP=$5
REMOTE_IP=$6
ADD_STAT=$7 #init/restart
#директория с iptables и ip
ACPATH="/usr/sbin/"
# [...]
#скрипт вызван при поднятии тоннеля
if [ "$MAIN_STAT" = "up" ]; then
#установка маршрута по умолчанию для VPN
"$ACPATH"ip route del default
"$ACPATH"ip route add default via $REMOTE_IP dev $DEV_NAME src $LOCAL_IP
#настройка IPTABLES
#разрешение транзитного трафика
"$ACPATH"iptables -P FORWARD ACCEPT
exit
fi
#скрипт вызван при отключении тоннеля
if [ "$MAIN_STAT" = "down" ]; then
#запрет транзитного трафика
"$ACPATH"iptables -P FORWARD DROP
#установка маршрута по умолчанию без VPN
"$ACPATH"ip route del default
"$ACPATH"ip route add default via 10.10.1.1 dev eth1 src 10.10.20.55
fiВ примере настраивается маршрут по умолчанию, для случая соединения через VPN и напрямую, а также отключается транзитный трафик, если соединение идет не через VPN.
Пример модифицированного конфига соединения Openvpn
Скрипт
ovpn-routes1. Основные команды и параметры OpenVPN Копия
2. Установка и настройка клиента OpenVPN в Ubuntu Копия
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/01/08/konf