LINUX.ORG.RU
ФорумAdmin

задействование второго канала, в случае пропажи интернета

 , ,


3

2

система Debian 8.7 в организации два интернет-шлюза 192.168.0.6 и 192.168.0.13 сейчас у этого компа шлюз 192.168.0.6 если по какой-то причине у данного компьютера пропал интернет, то если на момент пропажи был 192.168.0.6, то меняем его на 192.168.0.13 если на момент пропажи был другой шлюз (имеется ввиду 192.168.0.13), то меняем его на 192.168.0.6 в обоих случаях заносится запись в log и перезапускается сеть

скрипт:

#!/bin/bash
if ping 8.8.8.8 -c 1 | grep "+1 error"                                     # если интернет не отвечает, то
then
	sed -n 21p /etc/network/interfaces > tmp1                          # сохраняем 21 строку из файла interfaces
	echo "gateway 192.168.0.6" > tmp2                                  # если сравнивать с 6 шлюзом
	if diff tmp1 tmp2
	then                                                               # если настоящий шлюз == 192.168.0.6, то тогда
	    echo `date` "##################  упал шестой" >> log           # заносим запись в журнал
	    sed -i "s/192.168.0.6/192.168.0.13/g" /etc/network/interfaces  # меняем 6 на 13
	    service networking restart                                     # и перезапускаем сеть

	else                                                               # если шлюз был 13, то тогда
	    echo `date` "##################  упал тринадцатый" >> log      # заносим запись в журнал
	    sed -i "s/192.168.0.13/192.168.0.6/g" /etc/network/interfaces  # меняем 13 на 6
	    service networking restart                                     # и перезапускаем сеть
	fi
	rm -f tmp1 && rm -f tmp2                                           # удаляем временные файлы
else
	echo `date` "всё ок" >> log
fi

Что скажете? Нормально сделал?

а зачем так странно? не легче

route del default
route add default gw 

и сеть дергать не надо

jo_b1ack ★★★★★ ()

Ужос какой-то. Скрипт может что-то выводить на stdin, создаёт временные файлы в рабочем каталоге, и, главное, привязан к 21 строке interfaces. Нельзя разве grep-ом определять какой gateway?

mky ★★★★★ ()
Ответ на: исправил от cojhari

Re: исправил

Откуда эта конструкция берётся? Всё время пишут, что это лишний overhead, grep сам умеет читать файл:

grep «gateway» /etc/network/interfaces > tmp1

И вобще нужно:

if grep -q 'gateway 192.168.0.6'  /etc/network/interfaces ; then
с возможным изменениями регулярного выражения на случай комментариев или нескольких пробелов в строке.

mky ★★★★★ ()

Что скажете?

Если пропадёт питание, вы можете остаться с кривым без /etc/network/interfaces

Правильно вам тут советовали: делайте

route -n | grep '^0\.0\.0\.0' | grep -q $GW1

route -n | grep '^0\.0\.0\.0' | grep -q $GW2

где GW1 и GW2 надо объявлять в начале скрипта, чтобы потом не ошибаться при смене во всех местах.

vodz ★★★★★ ()

«Ловите норкомана».
По топику, тут совсем недавно тема была, воспользуйтесь поиском.

anc ★★★★★ ()

Если мне не изменяет память то эта задача должна решатся использованием метрик на интерфейсах, а не всякими шаманствами

cvv ★★★★★ ()

if ping 8.8.8.8 -c 1 | grep «+1 error»

Ух.

Хоть бы так:

ping -c 1 8.8.8.8 >/dev/null 2>&1
if [ $? -ne 0 ]
then

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