Доброго времени суток!!!
Продолжаем тему отказоустойчивости. В недавнем посте я рассказал, как настроить active/standby failover на cisco PIX/ASA и запустить это все дело в GNS3. Но что делать, если под рукой нет устройств безопасности, а есть роутеры cisco? Ответов может быть много :). Сегодня я предлагаю рассмотреть один из них, а в частности, настройку Hot Standby Routing Protocol (HSRP).
Кто заинтересовался, добро пожаловать под кат…
Hot Standby Routing Protocol (HSRP) – это проприетарный протокол компании cisco. Отказоустойчивость достигается путем использования одного, так называемого виртуального, IP и MAC адреса у двух или более маршрутизаторов.
Помимо него, существуют еще несколько протоколов отказоустойчивости, а именно Virtual Router Redundancy Protocol (VRRP) и Gateway Load Balancing Protocol (GLBP).
Подробную информацию по HSRP и другим протоколам можно, как всегда, найти в интернете :).
Схема будет выглядеть следующим образом:
Проверки будем делать путем анализа сетевой доступности с локального компьютера (192.168.1.12) до сервера (10.10.10.201) при полном отключении Active_Router и при отключении интерфейса на R3, смотрящего в сторону Active_Router.
Итак, приступаем :). Заходим на Active_Router.
R1>
R1>en
R1#conf t
R1(config)#hostname Active_Router
Active_Router(config)#int fa 0/0
Active_Router(config-if)#ip address 192.168.1.2 255.255.255.0
Active_Router(config-if)#standby 1 ip 192.168.1.1 – активируем HSRP группу №1 на интерфейсе и задаем виртуальный адрес;
Active_Router(config-if)#standby 1 priority 105 – увеличиваем приоритет до 105, тем самым делая этот роутер главным (Active) в группе;
Active_Router(config-if)#standby 1 preempt – включаем преемственность, то есть после устранения какого либо сбоя, этот роутер вернет себе состояние Active автоматически, если его приоритет будет выше, чем у остальных роутеров;
Active_Router(config-if)#standby 1 track serial 0/0 – включаем контроль интерфейса;
Active_Router(config-if)#no shutdown
Active_Router(config-if)#exit
Active_Router(config)#int serial 0/0
Active_Router(config-if)#ip address 1.1.1.1 255.255.255.252
Active_Router(config-if)#no shutdown
Active_Router(config-if)#exit
Active_Router(config)#router ospf 1 – включим динамическую маршрутизацию, для обеспечения сетевой доступности;
Active_Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Active_Router(config-router)#network 1.1.1.0 0.0.0.3 area 0
Active_Router(config-router)#exit
Active_Router(config)#exit
Active_Router#wr
Active_Router#
R2>en
R2#conf t
R2(config)#hostname Standby_Router
Standby_Router(config-if)#ip address 192.168.1.3 255.255.255.0
Standby_Router(config-if)#standby 1 ip 192.168.1.1
Standby_Router(config-if)#standby 1 priority 100
Standby_Router(config-if)#standby 1 preempt
Standby_Router(config-if)#standby 1 track serial 0/0
Standby_Router(config-if)#no shutdown
Standby_Router(config-if)#exit
Standby_Router(config)#int serial 0/0
Standby_Router(config-if)#ip address 2.2.2.1 255.255.255.252
Standby_Router(config-if)#no shutdown
Standby_Router(config-if)#exit
Standby_Router(config)#router ospf 1
Standby_Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Standby_Router(config-router)#network 2.2.2.0 0.0.0.3 area 0
Standby_Router(config-router)#exit
Standby_Router(config)#exit
Standby_Router#wr
Standby_Router#
- Где:
- 1 – сетевая доступность с Standby_Router присутствует;
- 2 – наш роутер является Active;
- 3 – настроенный виртуальный адрес;
- 4 – виртуальный MAC адрес по умолчанию;
- 5 – видно, что Standby роутер имеет IP, настроенное выше;
- 6 – контроль интерфейса serial 0/0 включен.
Из рисунка видно, что все в норме. Сетевая доступность присутствует, роутер в состоянии Standby и так далее.
Если вы присмотритесь к двум картинкам, то можете заметить, что приоритеты на роутерах немного не те, что мы настроили, а меньше. Это связано с тем, что интерфейсы serial у нас сейчас не работают и, так как у нас настроен их контроль (track), то автоматически понижается приоритет у роутеров (на 10 по умолчанию). На этом основан принцип отказоустойчивости при падении внешних интерфейсов. Другими словами, если у роутера в состоянии Active что-то случится с интерфейсом, который «находится под наблюдением», то HSRP понизит его приоритет на заданное число, и он станет Standby.
Это мы посмотрим при проверке. А сейчас доделаем нашу схему. Переходим на роутер R3.
R3>en
R3#conf t
R3(config)#int fa 0/0
R3(config-if)#ip address 10.10.10.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#int serial 0/0
R3(config-if)#ip address 1.1.1.2 255.255.255.252
R3(config-if)#clock rate 64000
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#int serial 0/1
R3(config-if)#ip address 2.2.2.2 255.255.255.252
R3(config-if)#clock rate 64000
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#router ospf 1
R3(config-router)#network 10.10.10.0 0.0.0.255 area 0
R3(config-router)#network 1.1.1.0 0.0.0.3 area 0
R3(config-router)#network 2.2.2.0 0.0.0.3 area 0
R3(config-router)#exit
R3(config)#exit
R3#wr
R3#
Роутер R3:
Сетевая доступность между роутерами присутствует, маршруты тоже. На данный момент видно, что в сеть 192.168.1.0 R3 имеет сразу два одинаковых маршрута (одинаковая стоимость и метрика), что не совсем корректно. Надо сделать, чтобы в таблице присутствовал только один из них (а именно через Active_Router), а второй был резервным. Для этого повысим стоимость маршрута через Standby_Router.
R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#int serial 0/1
R3(config-if)#ip ospf cost 120
R3(config-if)#exit
R3(config)#exit
R3#wr
R3#
Видно, что маршрут в таблице маршрутизации остался только один (через Active_Router), но второй присутствует в таблице маршрутов ospf.
Проверим сетевую доступность с локальной машины:
- Где:
- 1 – добавляем маршрут по умолчанию через виртуальный IP;
- 2 – сетевая доступность присутствует;
- 3 – трафик идет через основной роутер (Active_Router);
При выключении потерялось 7 пингов, не так уж и плохо. Чтобы уменьшить это количество, надо изменять таймеры для HSRP.
Проверим состояние на Standby_Router:
- Где:
- 1 – видно процесс изменения состояния;
- 2 – потеря «соседа» в процессе OSPF;
- 3 – второй роутер отсутствует.
Проведем вторую проверку. Так же запустим бесконечный ping с локальной машины в сторону сервера и выключим serial интерфейс на R3, смотрящий на Active_Router.
- Где:
- 1 – путь трафика вернулся в исходное положение :);
- 2 – потерялся всего 1 ping;
- 3 – трафик пошел по новому пути.
- 1 – видно, что связь с R3 потеряна;
- 2 – переход в режим Standby.
Что происходило на роутере Standby_Router:
- 1 – процесс перехода в состояние Active.
На этом я хочу закончить этот пост. Надеюсь, он стал для вас информативным и интересным. Может, пригодится для использования на реальном оборудовании или просто для практики.
По всем возникающим вопросам обращайтесь ко мне через комментарии или лично. Координаты можно найти вот тут.
С нетерпением жду вас в следующих постах!!!
С уважением, Ant0ni0n
Спасибо, дружище, за статью! Очень помогла.
ОтветитьУдалитьСпасибо за теплый отзыв :)
ОтветитьУдалитьБуду стараться и дальше. Заходите еще, может и еще чего интересного и полезного найдете. Или может скажите о чем бы вы хотели еще почитать, может ваша идея станет следующим постом :)
С уважением, Ant0ni0n
Кратко и все понятно) Спасибо большое
УдалитьЧювак! Ну ты маладец! Спасибо тебе за статьи, пише еще и еще!
ОтветитьУдалитьДоброго времени суток!!!
ОтветитьУдалитьСпасибо за отзыв!!! Буду стараться и дальше!!!
С уважением, Ant0ni0n
Спасибо, за статью. Однако хотел добавить некоторый комментарий относительно данной строки: Active_Router(config-if)#standby 1 track serial 0/0 – включаем контроль интерфейса.
ОтветитьУдалить1. Необходимо указывать, на сколько уменьшится приоритет роутера (standby 1 track serial 0/0 50), что бы другой роутер стал active при падении интерфейса.
2. А так же то, что нет необходимости в применении данной команды, так как у вас настроена динамическая маршрутизация и при падении одного из интерфейсов, маршрут будет проходить через второй.(необходимо мониторить интерфейсы при статической маршрутизации).
Спасибо за комментарий!!!
УдалитьСогласен насчет динамической маршрутизации... Немного не досмотрел этот факт :).
Насчет указания значения уменьшения приоритета, то в данном случае я специально задал для Active приоритет 105. Так как по умолчанию (если не указывать значение в команде standby 1 track serial 0/0) оно равно 10, что удовлетворит условию перехода виртуального адреса на Standby роутер.
С уважением, Ant0ni0n
Если кто-то как и я не понял, что такое Active_Router(config-if)#standby 1 track serial 0/0 – включаем контроль интерфейса.
Удалитьто это сделано это для того, чтобы переключить активный маршрутизатор в HSRP группе в том случае, если, к примеру, упал uplink к ядру, а линки смотрящие в сторону клиентов находятся в полном порядке.
Поэтому и необходимо следить за интерфейсом serial 0/0, подключенного к роутеру R3.
по 2 ответу от Stas. Ну ведь если активный в группе не переедет на нижний роутер, то будет несимметричная маршрутизация. Как бы пакеты будут бегать, но логически не совсем , как хотелось бы, имхо
УдалитьНасчет уменьшения по умолчанию на 10 не знал, спасибо буду знать.
ОтветитьУдалитьПожалуйста :)
УдалитьЗаходите еще!!!
Добрый день, у меня еще такой вопрос - если использовать HSRP для избыточности VPN настроенного на роутерах, как обеспечить синхронизацию конфига?
ОтветитьУдалитьДобрый день!
УдалитьНу синхронизацию (в реальном понимании этого слова) настроить не получиться. Для реализации данной схемы, можно в качестве peer для vpn указывать виртуальный адрес HSRP. Но настройка самих VPN-ов на роутерах должна быть идентичная и настраиваться на каждом роутере по отдельности. Но всеравно, при "перетекании" IP-адреса с одного роутера на другой vpn-сессия разорвется. Автоматически она может и не подняться... Надо экспериментировать...
Кстати, хорошая тема для поста :) Думаю рассмотрю этот вопрос..
С уважением, Ant0ni0n
Добрый день. присоединюсь к дискусси, и вопросам к автору этого замечательного поста.)
ОтветитьУдалитьВ сегменте 192.168.1.0/24 между рутерами постаить не один, а два свича и обрубить линк между ними. Тогда у нас получается что оба рутера переходят в состояние Active и у обоих Standby unknow.
Как такое решить?
Спасибо за отзыв!!!
УдалитьНасчет вопроса. Думаю, что при такой реализации схемы лучше обеспечить отказоустойчивое соединение между свитчами (EtherChannel например), чтобы линк все таки не упал :).
А так получится, что хосты, которые будут подключены к первому свитчу сохранят свою сетевую доступность, а вот те, которые подключены ко второму свитчу - потеряют сеть. Это произойдет из-за того, что пакеты от хостов (подключенных ко второму свитчу) долетев до R3 от Standby_Router будут переданы им на роутер Active_Router, согласно таблице маршрутизации. Active_Router сделает arp-запрос для этих пакетов и, не получив результата, их дропнет.
Думаю как то так...
Так что решение я вижу в настройке отказоустойчивого соединения между этими свитчами, или установки 3-го свитча и обеспечения full-mesh топологии :).
Еще конечно можно как то извернуться и настроить роутер R3, чтобы он часть сети 192.168.1.0/24 отправлял на один роутер, а другую часть, на другой.
А если отслеживаемый интерфейс "ап" (например воткнут в медиаконвертер), но пакеты через него не ходят (конвертер подвис), ведь тогда переключение не произойдет и связь не наладится? Как быть в таком случае?
ОтветитьУдалитьДобрый день!!!
УдалитьВ таком случае необходимо использовать и дополнительно настраивать технологию SLA Monitoring (Tracking). Она позволяет отслеживать такие моменты. Например осуществляется пинг удаленной сети или IP - адреса (порта), как только пинг пропадает, то монитор автоматически делает shutdown интерфейса, и тогда HSRP отработает как надо.
Простите, прошлый раз не поздоровался.
УдалитьПриветствую. Спасибо за ответ. И за статью, конечно, спасибо, пролила для меня свет на некоторые вещи, доступно, понятно. Технологию SLA последний раз реализовывал для резервирования двух подключенных провайдеров на одном маршрутизаторе. Можно по подробнее со слов "...как только пинг пропадает, то монитор автоматически делает shutdown интерфейса, и тогда HSRP отработает как надо."?
Ну я имею ввиду такой случай, когда SLA мониторит какой то параметр, и при пропадании связи SLA Monitor может сделать настроенное действие (например выключить интерфейс локальный). Следовательно, понизится приоритет у Master роутера и он станет Standby. В свою очередь, Standby роутер станет Master и трафик пойдет через него.
УдалитьКак то так...
Спасибо, надо будет опробовать.
ОтветитьУдалитьДобрый день!
ОтветитьУдалитьПолучилось у кого-нибудь настроить HSRP + SLA, чтобы они работали как описано выше?
Если да, приведите конфиг плиз.
А что у вас конкретно не получилось? Если надо, можете прислать мне конфигу на почту, я могу посмотреть...
УдалитьПотом можно будет выложить сюда :)
Доброго дня!
ОтветитьУдалитьу меня GNS3 ver. 0.8.4 при добавлении Ethernet switch настройки портов только L2, т.е. или access, или trunk. соответственно, ни на active router, ни на standby router настроить адрес интерфейсов fa0/0, подключенных к свитчу в сети 192.168.1.0/24 я не могу.
нашел выход: настроил на портах свитча, подключенных к роутерам и на интерфейсах роутеров fa0/0 транки. а на роутерах поднял интерфейс vlan 1 с ip-адресами 192.168.1.2, 192.168.1.3 соответсвенно и виртуальный (HSRP) адрес 192.168.1.1.
Всем удачи!
Автору еще раз спасибо!
Доброго дня!
ОтветитьУдалитьзаметил баг на Cisco IOS Software, 3700 Software (C3745-ADVENTERPRISEK9-M), Version 12.4(15)T6 в GNS3 0.8.4 не работает HSRPv2, только первая версия. т.е. stanby-группа создаётся статус пишет Active, приоритет, пароль аутентификации, локального соседа, виртуальный ip (vIP), но только ни фига не работает (физические адреса пингуются, виртуальный группы нет).
Это не особо важная тема, но кто сталкнется знайте, что при переходе на HSRPv1 все начинает летать.
Удачи всем!
Не очень относится к процессу понимания как работает HSRP (поэтому и не рассмотрены в статье), но полезные фичи небольшого тюнинга работы протокола HSRP:
ОтветитьУдалитьR(config-if)#standby version 2 (возможность использования 4096 stanby-групп и выставления тамеров в милисекундах);
R1(config-if)#standby 1 timers msec 300 1 (выставления тамеров в милисекундах - эта запись говорит о том, что hello-пакеты будут отправляться каждые 300 милисекунд, hold-time равен 1 секунде);
R1(config-if)#standby 1 authentication md5 key-string (настройка режима аутентификации в standby-группе).
и как написано в статье обязательно используйте приемственность R1(config-if)#standby 1 preempt.
Автору еще раз огромное спасибо!
только не пробуйте делать аутентификацию на эмуляторе. потому как у меня на GNS 0.8.4 и свитчовом модуле в 3745 перестает собираться HSRP, т.е. в state (R#sh standby) он активен, но пинги до него не идут.
ОтветитьУдалитьНадеюсь, в следующих релизах GNS это поправят. Но все равно очень приятно, что есть бесплатный софт, который пускай и не полностью, но эмулирует свитчи, роутеры, FW, линксовые хосты и т.д. При этом его можно подключать к физической сети.
Удачи всем!
Автору спасибо за доходчивое объяснение!