Jump to content
iT4iT.CLUB
Sign in to follow this  
Maerhekil

Разными дорогами

Recommended Posts

Так получилось, что у меня имеются два провайдера у одного из которых я вижу внутреннюю сеть, а ещё есть Zabbix который начинает ничего мне не сообщать если я не на работе про то, что происходит если провайдер через которого он это делает "уснул".

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

Имеем два шлюза с апи нашей локалки 1.1.1.1 и 1.1.1.2.

Имееем айпи 3.3.3.3 из внутренней сети провайдера.

Создаём рабочую директорию для скрипта в /usr/local/scripts/bin/status

В принципе это всё что нам надо.

#!/bin/sh
FPING="/usr/local/sbin/fping"
WRKDIR='/usr/local/scripts/bin'
DATE=`/bin/date`
MAININET='3.3.3.3'
MAIN='1.1.1.1'
BACKUP='1.1.1.2'
main_status_old=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $1 }'`
main_try=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $2 }'`
router=`/bin/cat $WRKDIR/status/router`
main_status_new=`$FPING $MAININET | /usr/bin/awk '{ print $3 }'`
back_status=`$FPING $BACKUP | /usr/bin/awk '{ print $3 }'`
if [ $main_status_new != 'alive' ]
        then {
                if [ $router = 'main' ]
                        then {
                                if [ $back_status = 'alive' ]
                                        then {
                                                if [ $main_try != 0 ]
                                                        then {
                                                                 route change default 1.1.1.2
                                                                echo 'backup' > $WRKDIR/status/router
                                                        }
                                                        else {
                                                                main_try=`expr $main_try + 1`
                                                                echo "$main_status_new $main_try" > $WRKDIR/status/main
                                                        }
.
                                                fi
                                        }
                                fi
                        }
                fi
.
        }
        else {
                if [ $router = 'backup' ]
                        then {
                                 route change default 1.1.1.1
                                 echo 'main' > $WRKDIR/status/router
                                 echo "$main_status_new 0" > $WRKDIR/status/main
                        }
                fi
        }
.
fi

Делаем статический маршрут до айпи 3.3.3.3 через шлюз 1.1.1.1

route add -net 3.3.3.3 1.1.1.1

Добавляем этот маршрут в rc.conf
 

static_routes="local-prov"

route_local-prov="-net 3.3.3.3 1.1.1.1"

Добавляем выполнение в крон по желаемому временному интервалу и радуемся тому, что сообщения о состоянии будут приходить если провайдер один отвалится. И тому что провайдер так любезен.

Удачи!

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Similar Content

    • By Maerhekil
      Распространённая проблемка, когда при падении сервера на котором развёрнут DHCP наступает неприятная ситуация в общении с пользователями. Довольно просто предотвратить данную ситуацию развёртыванием дублирующего DHCP на другом сервере в локальной сети. Что мы сейчас и проделаем, правда начнём просто с настройки, считая что у вас уже есть установленные два сервака на FreeBSD
      Первичный сервер:
      Для удобства дробим конфигурационный файл на несколько. У нас получается три файла с таким содержимым.
      /usr/local/etc/dhcpd.conf :
       
      option domain-name "mycompany.local"; option domain-name-servers 10.0.0.2, 10.0.0.3; option subnet-mask 255.255.255.0; default-lease-time 86400; max-lease-time 604800; ddns-update-style none; authoritative; subnet 10.0.0.0 netmask 255.255.255.0 { option routers 10.0.0.1; interface em0;    pool {          failover peer "mynetwork";          range 10.0.0.20 10.0.0.250;         } } include "/usr/local/etc/dhcpd-primary"; include "/usr/local/etc/dhcpd-hold"; Что мы тут имеем в первом и так сказать главном файле конфигурации:
      option domain-name "mycompany.local"; - Задаём доменное имя, которое клиенты будут использовать при запросах к DNS. Если имена разрешены.
      option domain-name-servers 10.0.0.2, 10.0.0.3; - Собственно, адреса DNS серверов в сети.
      option subnet-mask 255.255.255.0; - Сетевая маска локальной сети где будет находится DHCP сервер.
      default-lease-time 86400; - Период времени по умолчанию в секундах, на который будет выданный адрес закреплён за устройством.
      max-lease-time 604800; - Максимальный период времени в секундах, на который будет выданный адрес закреплён за устройством.
      subnet 10.0.0.0 netmask 255.255.255.0 - Подсеть с её маской.
      option routers 10.0.0.1; - Шлюз сети.
      interface em0; - На каком интерфейсе слушать запросы и отвечать с которого.
      Далее описание пула для выдачи адресов:
      failover peer "mynetwork"; - название.
      range 10.0.0.20 10.0.0.250; - диапазон адресов для выдачи клиентам.
      Влючаем в конфиг другие файлы конфигурации:
      include "/usr/local/etc/dhcpd-primary";
      include "/usr/local/etc/dhcpd-hold";
      Далее /usr/local/etc/dhcpd-primary :
       
      failover peer "mynetwork" {         primary;         address 10.0.0.4;         port 647;         peer address 10.0.0.5;         peer port 647;         max-response-delay 60;         max-unacked-updates 10;         mclt 3600;         split 128;         load balance max seconds 3;  } Это описание самой технологии failover, что мы имеем тут:
      primary; - К какому серверу DHCP относится этот файл, грубо говоря :-) . В данном случае к  первичному.
      address 10.0.0.4; - Его адрес в сети
      port 647; - Порт? :-)
      peer address 10.0.0.5; - Адрес вторичного сервера в сети.
      peer port 647; - Его порт.
      max-response-delay 60; - Ожидание в секундах ответа первичным сервером от вторичного. По истечении считает его недоступным.
      max-unacked-updates 10; - Непонятная хрень. Максимальное количество несанкционированных обновлений?
      mclt 3600; - Время в секундах, по истечении которого продлевается или прекращается аренда без синхронизации.
      split 128; - Нужно для балансировки.
      load balance max seconds 3; - Время в секундах, по истечении балансировка прекращается.
      Топаем дальше /usr/local/etc/dhcpd-hold . Это файл со статическими назначениями ip-адресов в соответствии с mac-адресами. Приведу только один пример:
      host BLA-BLA { hardware ethernet FF:FF:FF:FF:FF:FF; fixed-address 10.0.0.81;} BLA-BLA - описание хоста
      FF:FF:FF:FF:FF:FF - Mac-адрес сетевой карты
      10.0.0.81 - Закреплённый ip-адрес
      Ну в принципе с первичным сервером закончили. 
      Перейдём к вторичному.
      /usr/local/etc/dhcpd.conf  У нас немного меняются только две строчки:
      include "/usr/local/etc/dhcpd-secondary"; include "/usr/local/etc/dhcpd-hold-nowrite"; Но это при условии, что у нас имя сетевого интерфейса такое-же, в данном случае em0 .
      Далее /usr/local/etc/dhcpd-secondary
      failover peer "mynetwork" {         secondary;         address 10.0.0.5;         port 647;         peer address 10.0.0.4;         peer port 647;         max-response-delay 60;         max-unacked-updates 10;         mclt 3600;         load balance max seconds 3;  } Ну и последний, создаём /usr/local/etc/dhcpd-hold-nowrite . Это тот-же dhcpd-hold, там ничего не меняется.
      В принципе всё готово. Запускаем, и радуемся жизни. Но радость была недолгой ибо неудобно после каждой правки перезапускать два сервака ручками, мы сразу захотели автоматизацию. Но это уже совсем другая история.
      Надеюсь ничего не упустил, у меня бывает. Если это так, пишите.
      Удачи.
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...