LINUX.ORG.RU

Написал скрипт, который меняет default gateway

 ,


1

3

Написал скрипт, он поднимает ССХ тоннель на tun интерфейсах, и меняет default gateway, однако, если ССХ соединение рвётся, default gateway не восстанавливается, можно конечно руками восстановить, но хочется автоматики, вот думаю, как это сделать, придумал запускать скрипт с nohup а в скрипте в вечном цикле проверять, доступен ли удалённый tun интерфейс и если не доступен, то восстанавливать default gateway. Что ещё можно придумать?

Если ssh-соединение рвётся то завершается ssh-процесс, его создавший. Так что убирание этого гейта надо расположить на строке, следующей после строки с запуском ssh.

Хотя логичнее не гейт убирать а пытаться восстановить подключение.

Вобщем, по-нормальному надо так (только скриптом это если и получится, то костыльно, лучше писать на норм. языке программирования, я делал похожее только не для tun):

1. запускаем ssh-клиент с нужными параметрами в дочернем процессе

2. в своём процессе в цикле (допустим раз в секунду) проверяем две вещи: поднялся ли туннель и не умер ли ssh-процесс (с помощью функции waitpid в флагом WNOHANG), если туннель поднялся то переходим к шагу 3, если умер ssh-процесс то пишем в лог ошибку (не удалось подключиться), может быть ждём сколько-то секунд и переходим к шагу 1

3. настраиваем гейт на tun

4. делаем waitpid без флага WNOHANG на ssh-процесс, ждёшь пока он завершится

5. убираем гейт, пишем в лог какое-то сообщение, ждём сколько-то секунд на выбор и переходим к шагу 1

Логи ssh-клиента желательно писать туда же, куда и свои, сопровождая их таймстампами, для этого надо редиректнуть stdout и stderr ssh-клиента через пайп к себе в процесс, и выводить их в настоящий лог, дополняя каждую строку в начале таймстампом и меткой о том, что это лог ssh-клиента.

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

Всё проще. Достаточно просто поднять второй default route через run с метрикой меньше чем у первого который через eth. Если туннель падает то маршрут через него исчезает и всё начинает работать через eth. И не надо ничего переключать и никаких скриптов

Nastishka ★★★★★
()