Год назад, может раньше, по совету товарищей, я переполз с 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'
Надо уточнить, что скриптам 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 Копия
Pingback: Автоматическое получение конфигов Openvpn для бесплатного VPN от vpnbook.com | Персональный блог Толика Панкова
Pingback: Killswitch для Openvpn в Linux. Как сделать так, чтобы трафик не пошел в обход VPN | Персональный блог Толика Панкова