LINUX.ORG.RU
ФорумAdmin

Systemd старт сервиса только по факту запуска vpn

 


0

1

Имеется задача запускать сервис строго после инициализации vpn соединения. Последнее определяется появлением сетевого интерфейса tun0. Запускаемая сервисом программа биндится по ip tun0 и в случае если бинд не удался не завершает свою работу, а просто логгирует данный факт продолжая работу. А так как падения программы нет, systemd считает что сервис корректно стартанул. Очевидно что проблема решается в лоб оборачиванием запуска сервиса в скрипт, который выполнит его фактический запуск после обнаружения интерфейса. Вопрос - имеются ли у systemd свои средства решения подобной задачи дабы не городить скриптовый зоопарк?


А что случится с твоей программой, если интерфейс пропадёт во время работы?

intelfx ★★★★★
()

Запускай и тормози свою программу по хукам openvpn.
В конфиг openvpn добавь:

script-security 2
up   /usr/local/bin/vpnup.sh
down /usr/local/bin/vpndown.sh


А в сами скрипты вставляй всё, что посчитаешь нужным. Добавление и удаление правил в iptables, добавление и удаление маршрутов, запуск и завершение нужных тебе программ. Всё, что угодно. Зачем тебе в данном случае systemd не понятно. Разве что для запуска самого openvpn.

imul ★★★★★
()

по ip tun0

что, так и захардкожено в программу? Вообще есть networkd-dispatcher, и можешь свой хук вставить в /etc/networkd-dispatcher/routable.d/

Bers666 ★★★★★
()

Добавить адекватный IP-шник на lo, забиндить сервис на него и, при необходимости, отдавать лишний маршрут VPN-клиентам.

P.S. В таком виде могут быть проблемы с UDP - надо убедиться, что ответный трафик сервис отдаёт через тот же интерфейс/IP.

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