Толик Панков
hex_laden
............ .................. ................

October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Толик Панков [userpic]
OPENVPN: Запуск в фоновом режиме, настройка маршрутизации, фаервола и другие мелочи

Бредистория


Год назад, может раньше, по совету товарищей, я переполз с PPTP VPN на Openvpn. За это время узнал несколько хинтов, которые, периодически нужны либо по работе, либо кому-нибудь.
Эталонный конфиг, который буду модифицировать, лежит здесь

Проблема с установкой, требует модуль PAM


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/konfiguratsionnye-fajly-openvpn-dlya-besplatnogo-vpn-riseup-net-black/

Tags: , , ,
Comments

> Собрать из исходников, предварительно переконфигурировав командой
> ./configure --disable-plugin-auth-pam


Время идет, а Linux не меняется.

А зачем ему меняться? Впрочем, я так понимаю, проблема с PAM касается далеко не всех дистрибьютивов, в убунтах и дебианах он вроде как по-умолчанию есть. Или OpenVPN уже пересобран с нужными опциями.