OPENVPN: Запуск в фоновом режиме, настройка маршрутизации, фаервола и другие мелочи
Год назад, может раньше, по совету товарищей, я переполз с PPTP VPN на Openvpn. За это время узнал несколько хинтов, которые, периодически нужны либо по работе, либо кому-нибудь.
Эталонный конфиг, который буду модифицировать, лежит здесь
Windows: не актуально
Linux: да
Решение:
Собрать из исходников, предварительно переконфигурировав командой
./configure --disable-plugin-auth-pam
Windows: да
Linux: да, за исключением старых версий, которые приходилось пересобирать со специальным ключом. Если вдруг такое попалось, то обновить.
Решение:
В конфиг соединения надо добавить строку
auth-user-pass /path/to/auth/file
где
/path/to/auth/
- путь к файлу авторизацииfile
- имя файлаДля Windows будет что-то типа
C:\path\to\file.txt
Файл авторизации - простой текстовый файл в котором содержатся две строки: первая - логин, вторая - пароль:
содержимое файла
file
:username
pa$$w05D
Windows: не актуально
Linux: да
Решение:
В конфиг соединения надо добавить строку
daemon
Windows: не актуально, во всяком случае, мне не встречалось
Linux: да
Для чего надо: например, для того, чтобы при установке/разрыве соединения, настроить маршрутизацию или iptables (фаерволл)
Решение:
1. Надо разрешить Openvpn выполнять пользовательские скрипты, добавив в конфиг следующую строку:
script-security 2
2. Прописать путь к скрипту в одном или нескольких нужных параметров конфига, например:
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 120
down-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-routes
1. Основные команды и параметры OpenVPN Копия
2. Установка и настройка клиента OpenVPN в Ubuntu Копия
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/01/08/konf