Год назад, может раньше, по совету товарищей, я переполз с 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 | Персональный блог Толика Панкова