Смена шлшюза по умолчанию (Как сделать скрипт для смены шлюза по умолчанию?)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

fsn
Сообщения: 10
ОС: Fedora

Смена шлшюза по умолчанию

Сообщение fsn »

Всем добрый день!

Может кто-то знает где взять сприпт для смены шлюза по умолчанию?
Имеется: ОС - Fedora Core 6, два сетевых интерфейса настроенных на разные подсети ( основная и резервная у разных провайдеров).
Необходимо: При недоступности заданного IP-адреса в одной подсети поменять шлюз по умолчанию (который при старте системе загружался бы от основного канала) на шлюз по умолчанию из другой подсети (резервной). Как только восстановится достижимость заданного IP-адреса - поменять все обратно. Или может кто-то сам написал скрипт? Поделитесь пожалуйста.

Заранее благодарю.
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar

Re: Смена шлшюза по умолчанию

Сообщение n2j2r »

что-то вроде

Код: Выделить всё

#!/bin/bash
GW1="192.168.0.9"
GW2="192.168.0.10"
ping -c1 $GW1 &> /dev/null
RESULT=$?
if [ $RESULT -gt 0 ]; then
        ip r change default via $GW2
else if [ $RESULT -eq 0 ]; then
        ip r change default via $GW1
fi
fi
exit 0

p.s. с поправкой на то, что скрипт проверяет на доступность сам шлюз ($GW1)
Спасибо сказали:
Аватара пользователя
moog
Сообщения: 599
ОС: Archlinux

Re: Смена шлшюза по умолчанию

Сообщение moog »

Код: Выделить всё

#!/bin/bash
GW=     #шлюз1
GW2=    #шлюз2

function ilold {
        route add default gw $1
                }

if ping -c1 $GW|grep "100% packet loss">/dev/null;
then
        ilold $GW2
else
        ilold $GW
fi


Как то так.
Спасибо сказали:
fsn
Сообщения: 10
ОС: Fedora

Re: Смена шлшюза по умолчанию

Сообщение fsn »

Спасибо всем за ответы. Еще один вопрос мне необходимо посылать команду ping непрерывно с интервалом, например 20 секунд. А в данном примере наверное команда посылается один раз при загрузке системы и далее удаленный хост не мониторится. Как быть?

Заранее благодарен.
Спасибо сказали:
Аватара пользователя
lava
Сообщения: 155
ОС: archer

Re: Смена шлшюза по умолчанию

Сообщение lava »

Код: Выделить всё

while true # вечно
do
    ... # нужный код
    sleep 20 # ждёт 20 секунд
done


думаю, полезным будет запускать этот скрипт из некоего init-скрипта, например так:

Код: Выделить всё

#!/bin/bash

if [[ "$1" == "start" ]]
then
    /home/vasia/script.sh &
fi
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar

Re: Смена шлшюза по умолчанию

Сообщение n2j2r »

В cron
Спасибо сказали:
fsn
Сообщения: 10
ОС: Fedora

Re: Смена шлшюза по умолчанию

Сообщение fsn »

Примерно так должно быть?

Код: Выделить всё

#!/bin/bash
GW=     #шлюз1
GW2=    #шлюз2


route add default gw $GW

while true
do
    if ping -c1 $GW|grep "100% packet loss">/dev/null; then
            route delete default gw $GW
        route add default gw $GW2
    else
            route delete default gw $GW2
        route add default gw $GW
    fi
    sleep 20
done
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Смена шлшюза по умолчанию

Сообщение Frank »

Все ваши скрипты фигня. Они каждую секунду будут переназначать один и тот же шлюз. Я думаю, это не Ъ.
Изображение
Спасибо сказали:
Аватара пользователя
moog
Сообщения: 599
ОС: Archlinux

Re: Смена шлшюза по умолчанию

Сообщение moog »

Мой скрипт точно трушный, ибо по крону запускается и нет циклов.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: Смена шлшюза по умолчанию

Сообщение mandreika »

Этот скрипт что проверяет? Доступность роутеров? Это ни дает ничего, настраивай пинги до больших сервисов типа server1.google.com server2.google.com настраивай маршрутизацию между разными провайдерами, делай ping -s0 -c2 с интервалов в минуту и будет работать.Но все равно криво.
Спасибо сказали:
fsn
Сообщения: 10
ОС: Fedora

Re: Смена шлшюза по умолчанию

Сообщение fsn »

Да, необходимо пинговать удаленный сервер. Просто для наглядности упростил код.

Код: Выделить всё

#!/bin/bash
GW=     #шлюз1
GW2=    #шлюз2
REMOTE_HOST= #Удаленный хост

route add default gw $GW

while true
do
    if ping -s0 -c1 $REMOTE_HOST|grep "100% packet loss">/dev/null; then
            route delete default gw $GW
        route add default gw $GW2
    else
            route delete default gw $GW2
        route add default gw $GW
    fi
    sleep 20
done
Спасибо сказали:
Аватара пользователя
lava
Сообщения: 155
ОС: archer

Re: Смена шлшюза по умолчанию

Сообщение lava »

n2j2r писал(а):
22.09.2009 17:06
В cron
moog писал(а):
24.09.2009 15:52
Мой скрипт точно трушный, ибо по крону запускается и нет циклов.

У крона вроде ж минимальный "отрезок" - минута? Если это не критично, то он надёжнее, чем использование спящего бесконечного цикла в инит-скрипте

Зачем грепать вывод пинг-а?

Код: Выделить всё

ping -c1 server
if [ "$?" == "0" ]
then
    # всё оки-доки
else
    # прописываем второй
fi


Пинговать удалённый сервер вместо роутера веселее, но тогда надо изменять логику работы: Если сервер не пингуется - надо переназначать роут на _другой_, а не на второй.
Пинговать, имхо, лучше IP-адрес, а не имя. И из всех серверов я бы предпочёл опрос DNS-сервера, как самого ближайшего и, соответственно, самого отзывчивого. Хотя это не применимо, если DNS-сервер расположен в под-сети пользователя.
Спасибо сказали:
fsn
Сообщения: 10
ОС: Fedora

Re: Смена шлшюза по умолчанию

Сообщение fsn »

Спасибо, будем пробовать через cron.
Спасибо сказали: