Hilik - FreeBSD
ifconfig_fxp0="inet 192.168.1.1/24" ifconfig_fxp1="inet 192.168.5.2/30" ifconfig_fxp2="inet 192.168.6.2/30" defaultrouter="192.168.5.1" named_enable="ДА"
Специално посочих, че named е активиран, кеширане на DNS, при превключване е важно да променяте настройките възможно най-малко и фактът, че няма да използваме DNS на доставчика, опростява превключването.
Следващата стъпка е да конфигурираме nat, сега имаме нужда от 2 работещи natd процеса за всеки интерфейс. За да направя това, използвам следния скрипт (/usr/local/etc/rc.d/natd):
#!/bin/sh случай $1 в началото) `/sbin/natd -u -a 192.168.5.2` `/sbin/natd -u -p 8669 -a 192.168.6.2` ;; стоп) `killall -9 natd` ;; *) ;; esac
Следващи настройки на защитната стена:
#!/bin/sh ipfw="/sbin/ipfw -q" $ промиване $ добавяне на 100 пренасочване на natd ip от 192.168.1.0/24 към not me out xmit fxp1 $ добавяне на 110 пренасочване на natd ip от не аз към 192.168.5.2 в recv fxp1 $ добавяне на 120 отклоняване на 8669 ip от 192 .168.1.0/24 to not me out xmit fxp2 $ add 130 divert 8669 ip from not me to 192.168.6.2 in recv fxp2
По принцип на този етап резервният канал вече може да се използва. С ръчно задвижване. Тоест, ако главният външен канал е загубен, изпълнете следната команда:
промяна на маршрута по подразбиране 192.168.6.1
и всичко ще работи на резервния канал. Когато основният канал е възстановен, превключване отново на ръчно:
промяна на маршрута по подразбиране 192.168.5.1
Но ръчното превключване не е точно това, което исках, но за да направя това, което исках, всичко щеше да се превключи автоматично, използвам този скрипт:
#!/bin/sh FPING="/usr/local/sbin/fping" WRKDIR=`/bin/pwd` DATE=`/bin/date` MAIN='192.168.5.1' BACKUP='192.168.6.1' main_status_old=`/bin/cat $WRKDIR/status/main /usr/bin/awk '< отпечатайте $1 >'' main_try=`/bin/cat$WRKDIR/status/main /usr/bin/awk '< print $2 >''` router=`/bin/cat $WRKDIR/status/router` main_status_new=`$FPING $MAIN /usr/bin/awk '< print $3 >'' back_status=`$FPING $BACKUP /usr/bin/awk '< print $3 >'` if [ $main_status_new != 'alive' ] #Основният рутер не работи, тогава < if [ $router = 'main' ] then < if [ $back_status = 'alive' ] then < if [ $main_try != 0 ] then < echo 'Промяна на маршрута' /sbin/промяна на маршрута по подразбиране $BACKUP echo 'backup' >$WRKDIR/status/router > иначе < main_try=`expr $main_try + 1` echo "$main_status_new $main_try" >$WRKDIR/status/main > fi > fi > fi > #Основен канал върна иначе < if [ $router = 'backup' ] then < echo 'Промяна на маршрута' /sbin/промяна на маршрута по подразбиране $MAIN echo 'main' >$WRKDIR/status/router echo "$main_status_new 0" > $WRKDIR/статус/основен > fi > фи
За да работи скриптът, той трябва да бъде поставен във всяка директория, например /root/bin/ След това създайте поддиректория за състояние и създайте 2 файла в нея:
ехо 'жив 0' > /root/bin/status/main echo 'main' > /root/bin/status/router
Първият файл е състоянието на главния рутер (жив) и броя на проверките (0), броят проверки е необходим за повторна проверка на статуса на изключване, тоест, ако имаме временна повреда в мрежата, не прехвърляйте веднага канала към резервния, а проверете отново дали основният канал не работи, едва след това прехвърлете канала към резервния. Скриптът трябва да бъде поставен на cron с период на стартиране веднъж на всеки 5 минути и това е всичко. Сценарият е доста прост и работи добре за мен. Единственото нещо с големи загуби на основния канал, понякога започва да превключва напред-назад. Затова все още е необходимо да се следи работата му.