Фэндом


nano /etc/reserv
#!/bin/bash

CheckHost="194.87.0.50"          # Контрольный адрес через основного провайдера, который должен быть доступен при его нормальной работе.
                                # Адрес не должен быть адресом шлюза или адресом хоста, к который должен быть постоянно доступным.
# Параметры основного канала
GW1="gateway 112.19.1.12"      # Основной шлюз, основного провайдера (для PPP не указываем шлюз GW1="")
NC1="eth1"                      # Имя сетевого адаптера основного провайдера

# Параметры резервного канала
GW2="gateway 22.10.10.7"      # Основной шлюз, резервного провайдера (для PPP не указываем шлюз GW2="")
NC2="eth2"                      # Имя сетевого адаптера резервного провайдера

MaxLoss="80"                    # Наибольший процент потерь до контрольного адреса через шлюз основного провайдера
log="/var/log/reserv.log"       # Путь к log-файлу
  
####################################### Контроль и переключение #############################################################

# Запоминаем текущий адаптер на котором прописан маршрут по умолчанию
EthDo=`/sbin/route -n | /usr/bin/awk '{print $1 " " $3 " " $8}'| /bin/grep "0.0.0.0 0.0.0.0"|/usr/bin/awk '{print $3}'`
# Проверяем, есть ли вообще маршрут по умолчанию и если нет, добавляем главный.
if [ -n "${EthDo}" ]
 then
  :
 else 
  echo `date +"%d.%m.%Y %T %:z"`. "- Отсутствовал шлюз по умолчанию, назначен на интерфейсе ${NC1}" >> ${log}
  /sbin/route add default ${GW1} ${NC1}
fi

# Добавляем временный точный маршрут до контрольного адреса через основного провайдера
/sbin/route add ${CheckHost}/32 ${GW1} ${NC1}

# Проверяме контрольный адрес и запоминаем процент потерь
pgw=`/bin/ping -I ${NC1} -c20 -l20 -q -W3 ${CheckHost} | /bin/grep loss | /usr/bin/awk '{print $(NF-4)}' | /usr/bin/cut -d"%" -f1`

# Пишем в лог, если потери больше нуля
if [ 0 = "${pgw}" ]
 then
  :
 else
  echo `date +"%d.%m.%Y %T %:z"`. "- Потери пакетов до контрольного адреса ${CheckHost} составили ${pgw}%" >> ${log}
fi

# Удаляем временный маршрут
/sbin/route del ${CheckHost}/32 ${GW1} ${NC1}

# Проверяем процент потерь и если он больше допустимого значения, переключаем шлюз по умолчанию на резервный интерфейс
if [ "${MaxLoss}" -le "${pgw}" ]
 then
  if [ "${EthDo}" = "${NC1}" ]
   then
    echo `date +"%d.%m.%Y %T %:z"`. "- Переход на резервный канал - ${NC2}. Потери пакетов до ${CheckHost}: ${pgw}%. Порог: ${MaxLoss}%" >> ${log}  
    /sbin/route del default $NC1
    /sbin/route add default $GW2 $NC2
  fi
fi

# Проверяем не восстановилась ли связь по основному интерфейсу и если да, возвращаемся на него
if [ "${EthDo}" = "${NC2}" ]
 then
  if [ "${pgw}" -le "${MaxLoss}" ]
   then
    echo `date +"%d.%m.%Y %T %:z"`. "- Переход на основной канал - шлюз ${GW1}, интерфейс ${NC1}."  >> ${log}
    /sbin/route del default $NC2
    /sbin/route add default $GW1 $NC1
  fi
fi
chmod +x /etc/reserv

Добавим задание в cron для выполнения ежеминутной проверки работы основного канала

crontab -e
# Переменные среды для выполняемых заданий
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LC_ALL=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC__TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=ru_RU.UTF-8
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LANG=ru_RU.UTF-8

# m h  dom mon dow   command
* * * * * /etc/reserv

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на Фэндоме

Случайная вики