Смена шлшюза по умолчанию (Как сделать скрипт для смены шлюза по умолчанию?)
Модераторы: SLEDopit, Модераторы разделов
-
fsn
- Сообщения: 10
- ОС: Fedora
Смена шлшюза по умолчанию
Всем добрый день!
Может кто-то знает где взять сприпт для смены шлюза по умолчанию?
Имеется: ОС - Fedora Core 6, два сетевых интерфейса настроенных на разные подсети ( основная и резервная у разных провайдеров).
Необходимо: При недоступности заданного IP-адреса в одной подсети поменять шлюз по умолчанию (который при старте системе загружался бы от основного канала) на шлюз по умолчанию из другой подсети (резервной). Как только восстановится достижимость заданного IP-адреса - поменять все обратно. Или может кто-то сам написал скрипт? Поделитесь пожалуйста.
Заранее благодарю.
Может кто-то знает где взять сприпт для смены шлюза по умолчанию?
Имеется: ОС - Fedora Core 6, два сетевых интерфейса настроенных на разные подсети ( основная и резервная у разных провайдеров).
Необходимо: При недоступности заданного IP-адреса в одной подсети поменять шлюз по умолчанию (который при старте системе загружался бы от основного канала) на шлюз по умолчанию из другой подсети (резервной). Как только восстановится достижимость заданного IP-адреса - поменять все обратно. Или может кто-то сам написал скрипт? Поделитесь пожалуйста.
Заранее благодарю.
-
n2j2r
- Сообщения: 494
- Статус: najar
Re: Смена шлшюза по умолчанию
что-то вроде
p.s. с поправкой на то, что скрипт проверяет на доступность сам шлюз ($GW1)
Код: Выделить всё
#!/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 0p.s. с поправкой на то, что скрипт проверяет на доступность сам шлюз ($GW1)
-
moog
- Сообщения: 599
- ОС: Archlinux
Re: Смена шлшюза по умолчанию
Код: Выделить всё
#!/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: Смена шлшюза по умолчанию
Спасибо всем за ответы. Еще один вопрос мне необходимо посылать команду ping непрерывно с интервалом, например 20 секунд. А в данном примере наверное команда посылается один раз при загрузке системы и далее удаленный хост не мониторится. Как быть?
Заранее благодарен.
Заранее благодарен.
-
lava
- Сообщения: 155
- ОС: archer
Re: Смена шлшюза по умолчанию
Код: Выделить всё
while true # вечно
do
... # нужный код
sleep 20 # ждёт 20 секунд
doneдумаю, полезным будет запускать этот скрипт из некоего init-скрипта, например так:
Код: Выделить всё
#!/bin/bash
if [[ "$1" == "start" ]]
then
/home/vasia/script.sh &
fi-
fsn
- Сообщения: 10
- ОС: Fedora
Re: Смена шлшюза по умолчанию
Примерно так должно быть?
Код: Выделить всё
#!/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: Смена шлшюза по умолчанию
Все ваши скрипты фигня. Они каждую секунду будут переназначать один и тот же шлюз. Я думаю, это не Ъ.

-
moog
- Сообщения: 599
- ОС: Archlinux
Re: Смена шлшюза по умолчанию
Мой скрипт точно трушный, ибо по крону запускается и нет циклов.
-
mandreika
- Сообщения: 217
- ОС: Debian 3,4,5,6
Re: Смена шлшюза по умолчанию
Этот скрипт что проверяет? Доступность роутеров? Это ни дает ничего, настраивай пинги до больших сервисов типа server1.google.com server2.google.com настраивай маршрутизацию между разными провайдерами, делай ping -s0 -c2 с интервалов в минуту и будет работать.Но все равно криво.
-
fsn
- Сообщения: 10
- ОС: Fedora
Re: Смена шлшюза по умолчанию
Да, необходимо пинговать удаленный сервер. Просто для наглядности упростил код.
Код: Выделить всё
#!/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: Смена шлшюза по умолчанию
У крона вроде ж минимальный "отрезок" - минута? Если это не критично, то он надёжнее, чем использование спящего бесконечного цикла в инит-скрипте
Зачем грепать вывод пинг-а?
Код: Выделить всё
ping -c1 server
if [ "$?" == "0" ]
then
# всё оки-доки
else
# прописываем второй
fiПинговать удалённый сервер вместо роутера веселее, но тогда надо изменять логику работы: Если сервер не пингуется - надо переназначать роут на _другой_, а не на второй.
Пинговать, имхо, лучше IP-адрес, а не имя. И из всех серверов я бы предпочёл опрос DNS-сервера, как самого ближайшего и, соответственно, самого отзывчивого. Хотя это не применимо, если DNS-сервер расположен в под-сети пользователя.
-
fsn
- Сообщения: 10
- ОС: Fedora
Re: Смена шлшюза по умолчанию
Спасибо, будем пробовать через cron.