LINUX.ORG.RU
решено ФорумAdmin

Заставить Openvpn убрать роуты, если соединения не установлено

 ,


0

1

Можно ли с помощью какой-либо магии сделать, чтобы OpenVPN поднимал роуты из конфига, только когда соединение установлено(в логе «Initialization Sequence Completed»), и убирал их если соединения порвалось по keepalive timeout? Служба при этом, разумеется, всё время запущена

★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от zgen

--up и --down выполнятся однократно при запуске и остановке VPN. Мне нужно каждый раз при аоявлении/пропадании соединения

selivan ★★★
() автор топика

можно попробовать завести через client-config-dir
туда же не только статические ip пихать можно, по идее
еще есть learn-address <путь до скрипта>
вроде, тоже выполняется после коннекта клиента

       --client-connect
              Executed in --mode server mode immediately after client authentication.
из мана

ii343hbka ★★★
()
Последнее исправление: ii343hbka (всего исправлений: 1)

Соединение порвалось -> интерфейс опустился -> все маршруты через впн убрались сами, т.к. до адреса шлюза больше не существует link-local маршрутов.

Если часто обрывы - сделай keepalive timeout поменьше.

Gattai
()
Ответ на: комментарий от selivan

up-restart

If the --up-restart option is also used, the up script will be called for restarts as well. A restart is considered to be a partial reinitialization of OpenVPN where the TUN/TAP instance is preserved (the --persist-tun option will enable such preservation). A restart can be generated by a SIGUSR1 signal, a --ping-restart timeout, or a connection reset when the TCP protocol is enabled with the --proto option.

Gattai
()

Всю жизнь делал через client config:

; /etc/openvpn/server.conf
;...
client-config-dir /etc/openvpn/cc
;...
route 172.X.0.0 255.255.0.0
push "route 172.X.0.0 255.255.0.0"
;...

;  /etc/openvpn/cc/remote-gate-1
iroute 172.X.K.0 255.255.255.0
push "route 0.0.0.0 0.0.0.0"
;  /etc/openvpn/cc/remote-gate-2
iroute 172.X.L.0 255.255.255.0
push "route 0.0.0.0 0.0.0.0"

При подключении remote-gate-1 на него автоматически кидаются 172.X.K.0/24, при его отвале - перестают кидаться, так же с remote-gate-2, и т. д. «push «route 0.0.0.0 0.0.0.0»» — это чтобы сервер становился гейтом по умолчанию для филиалов, между собой и в интернет они выходят через него (сервер).

berrywizard ★★★★★
()
Ответ на: комментарий от Gattai

Таки интерфейс не всегда опускается (а именно при использовании опции --persist-tun). Либо убери эту опцию из конфига, либо удаляй маршруты маршруты скриптом:

up-restart
down script.sh
Сбрасывать привилегии опциями --user и --group в любом случае не получится.

Gattai
()
Ответ на: комментарий от Gattai

Не прокатывает: он вызывает --up скрипт после того, как поднял интерфейс, не зависимо от того, подключился он к серверу или нет.

selivan ★★★
() автор топика
Ответ на: комментарий от selivan

Маршруты через $ip _не получится_ добавить, если до $ip не существует link-local маршрута. Вначале клиент должен получить адрес от сервера, для чего ему надо подключиться.

Gattai
()

sudo cast zgen ii343hbka Gattai berrywizard

Всем спасибо за советы и участие. Итого, чтобы:

- первый скрипт вызывался после успешного соединения и аутентификации, а также при каждом пересоединении
- второй скрипт - при каждом падении соединения
нужно делать так:

script-security 2
up-restart
ipchange "script1"
down "script2"

На стороне сервера можно использовать client-connect и client-disconnect, но они не будут работать в режиме со статическим ключом. В man openvpn есть «SCRIPTING AND ENVIRONMENTAL VARIABLES», а в нём «Script Order of Execution», который и надо было читать до полного просветтения.

selivan ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.