пятница, 14 июня 2013 г.

Linux переключение между каналами.

Linux переключение между каналами.

Выкладываю небольшой скрипт, который автоматизирует работу по переключению интернет каналов. Например есть у нас два провайдера один например на "основной" 100Мбит/с а второй на 12Мбит/с. И нужно что когда падал основной канал в 100Мбит/с переключался на резервный. А когда основной подымался возвращался назад. Скрипт коментирован так, что разобраться будет несложно.

 #! /bin/bash

 MAIN=172.18.19.1
 SECOND=192.168.35.1

 # Получаем текущий роутер по умолчанию.
 CURRENT=$(route -n | tail -1 | awk '{ print $2}')

 #echo $CURRENT

 # Проверяем, пингуется ли основной роутер.
 if ping -c4 $MAIN > /dev/null 2>&1; then
 # echo "MAIN working"
    # Если пингуется, значит основной канал поднялся или находится в рабочем состояний,      #проверяем, является ли он
    # сейчас роутером по умолчанию.
    if [ $MAIN = $CURRENT ]; then
        # Если да, то просто выходим, т.к мы и так на основном канале
        # echo "MAIN current. Exit"
        exit 0
    else
        # Если нет, то меняем маршрут на основной  роутер, то бишь канал поднялся, но маршрут #еще не добавлен
        # echo "MAIN not Current, switch yo MAIN"
        route del default 2> /dev/null
        route add default gw $MAIN
                    /etc/sysconfig/main_firewall.sh
        echo "Default chanel switched to MAIN_Provider: $MAIN" | mail -s "Internet chanel switched to MAIN_Provider" some@some.com
        logger "Default chanel switched to MAIN_Provider: $MAIN"
        exit 0
    fi
 else
  # echo "MAIN not working"
    # Если MAIN не является маршрутом по умолчанию
    # Проверяем, является ли SECOND маршрутом по умолчанию.
    if [ $SECOND = $CURRENT ]; then
        # Если является, то ничего не далаем, т,е основной отпал и мы на резервном
        # echo "Second = Current. Exit"
        exit 0
    else
        # Если не является, то меняем маршрут
        # на вспомогательный роутер/
        # echo "Second not Current. switch to Second"
        route del default 2> /dev/null
                route add default gw $SECOND
        /etc/sysconfig/second_firewall.sh
        echo "Default chanel switched to Second_Provider: $SECOND"| mail -s "Internet chanel switched to Second_Provider" some@some.com
                logger "Default chanel switched to Second_Provider: $SECOND"
       
                exit 0
    fi
 fi

Поместим содержимое этого скрипта например в /etc/sysconfig/chanel_switch.sh
Затем добавим этот файл в cron, чтобы состояние каналов проверялось через некоторый промежуток времени я взял 5 мин. Для этого создадим файл jobs следующего содержания

*/5 * * * * /etc/sysconfig/chanel_switch.sh

И добавим в Cron
crontab jobs

Хотелось бы отметить что main_firewall.sh и second_firewall.sh - это правила вашего файрвола, например iptables, отличаются они тем что в основном у нас прописаны eth1 а в резервном eth2.


Комментариев нет:

Отправить комментарий