Поиск...

пятница, 19 августа 2011 г.

Настройка HSRP на cisco routers


Доброго времени суток!!!


Продолжаем тему отказоустойчивости. В недавнем посте я рассказал, как настроить 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#
Переходим на Standby_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#
Остановимся на небольшое время и проверим наши настройки. Active_Router:


    Где:
  • 1 – сетевая доступность с Standby_Router присутствует;
  • 2 – наш роутер является Active;
  • 3 – настроенный виртуальный адрес;
  • 4 – виртуальный MAC адрес по умолчанию;
  • 5 – видно, что Standby роутер имеет IP, настроенное выше;
  • 6 – контроль интерфейса serial 0/0 включен.
Standby_Router:



Из рисунка видно, что все в норме. Сетевая доступность присутствует, роутер в состоянии 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#
Схема собрана. Для сетевой доступности между роутерами мы настроили OSPF (как настраивать OSPF в более развернутом виде, можно почитать тут и тут). Теперь посмотрим настройки на 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);
Все готово к проверкам. Первую проверку сделаем, когда будем полностью выключать Active_Router. Запустим бесконечный ping с локального хоста на сервер и посмотрим, сколько времени не будет сетевой доступности, так же убедимся, что Standby_Router прейдет в состояние Active.



При выключении потерялось 7 пингов, не так уж и плохо. Чтобы уменьшить это количество, надо изменять таймеры для HSRP.



Проверим состояние на Standby_Router:


    Где:
  • 1 – видно процесс изменения состояния;
  • 2 – потеря «соседа» в процессе OSPF;
  • 3 – второй роутер отсутствует.
Вернем все в исходное состояние. Просто включаем роутер Active_Router и, так как у нас настроен параметр «preempt», то он автоматически вернет себе состояние Active.



Проведем вторую проверку. Так же запустим бесконечный ping с локальной машины в сторону сервера и выключим serial интерфейс на R3, смотрящий на Active_Router.


    Где:
  • 1 – путь трафика вернулся в исходное положение :);
  • 2 – потерялся всего 1 ping;
  • 3 – трафик пошел по новому пути.
Что происходило на Active_Router:



  • 1 – видно, что связь с R3 потеряна;
  • 2 – переход в режим Standby.
На рисунке так же видно, что приоритет у этого роутера стал 95.
Что происходило на роутере Standby_Router:


  • 1 – процесс перехода в состояние Active.
Все отработало хорошо. Отказоустойчивость работает и даже очень неплохо :). Поздравляю вас!!! Чтобы вернуть все в исходное состояние, просто надо включить serial интерфейс на R3, который мы выключали. Все произойдет автоматом, опять-таки за счет параметра «preempt».

На этом я хочу закончить этот пост. Надеюсь, он стал для вас информативным и интересным. Может, пригодится для использования на реальном оборудовании или просто для практики.

По всем возникающим вопросам обращайтесь ко мне через комментарии или лично. Координаты можно найти вот тут.

С нетерпением жду вас в следующих постах!!!

С уважением, Ant0ni0n



26 комментариев:

  1. Спасибо, дружище, за статью! Очень помогла.

    ОтветитьУдалить
  2. Спасибо за теплый отзыв :)
    Буду стараться и дальше. Заходите еще, может и еще чего интересного и полезного найдете. Или может скажите о чем бы вы хотели еще почитать, может ваша идея станет следующим постом :)

    С уважением, Ant0ni0n

    ОтветитьУдалить
  3. Чювак! Ну ты маладец! Спасибо тебе за статьи, пише еще и еще!

    ОтветитьУдалить
  4. Доброго времени суток!!!
    Спасибо за отзыв!!! Буду стараться и дальше!!!

    С уважением, Ant0ni0n

    ОтветитьУдалить
  5. Спасибо, за статью. Однако хотел добавить некоторый комментарий относительно данной строки: Active_Router(config-if)#standby 1 track serial 0/0 – включаем контроль интерфейса.
    1. Необходимо указывать, на сколько уменьшится приоритет роутера (standby 1 track serial 0/0 50), что бы другой роутер стал active при падении интерфейса.
    2. А так же то, что нет необходимости в применении данной команды, так как у вас настроена динамическая маршрутизация и при падении одного из интерфейсов, маршрут будет проходить через второй.(необходимо мониторить интерфейсы при статической маршрутизации).

    ОтветитьУдалить
    Ответы
    1. Спасибо за комментарий!!!
      Согласен насчет динамической маршрутизации... Немного не досмотрел этот факт :).
      Насчет указания значения уменьшения приоритета, то в данном случае я специально задал для Active приоритет 105. Так как по умолчанию (если не указывать значение в команде standby 1 track serial 0/0) оно равно 10, что удовлетворит условию перехода виртуального адреса на Standby роутер.

      С уважением, Ant0ni0n

      Удалить
    2. Если кто-то как и я не понял, что такое Active_Router(config-if)#standby 1 track serial 0/0 – включаем контроль интерфейса.
      то это сделано это для того, чтобы переключить активный маршрутизатор в HSRP группе в том случае, если, к примеру, упал uplink к ядру, а линки смотрящие в сторону клиентов находятся в полном порядке.
      Поэтому и необходимо следить за интерфейсом serial 0/0, подключенного к роутеру R3.

      Удалить
    3. по 2 ответу от Stas. Ну ведь если активный в группе не переедет на нижний роутер, то будет несимметричная маршрутизация. Как бы пакеты будут бегать, но логически не совсем , как хотелось бы, имхо

      Удалить
  6. Насчет уменьшения по умолчанию на 10 не знал, спасибо буду знать.

    ОтветитьУдалить
  7. Добрый день, у меня еще такой вопрос - если использовать HSRP для избыточности VPN настроенного на роутерах, как обеспечить синхронизацию конфига?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Ну синхронизацию (в реальном понимании этого слова) настроить не получиться. Для реализации данной схемы, можно в качестве peer для vpn указывать виртуальный адрес HSRP. Но настройка самих VPN-ов на роутерах должна быть идентичная и настраиваться на каждом роутере по отдельности. Но всеравно, при "перетекании" IP-адреса с одного роутера на другой vpn-сессия разорвется. Автоматически она может и не подняться... Надо экспериментировать...
      Кстати, хорошая тема для поста :) Думаю рассмотрю этот вопрос..

      С уважением, Ant0ni0n

      Удалить
  8. Добрый день. присоединюсь к дискусси, и вопросам к автору этого замечательного поста.)
    В сегменте 192.168.1.0/24 между рутерами постаить не один, а два свича и обрубить линк между ними. Тогда у нас получается что оба рутера переходят в состояние Active и у обоих Standby unknow.
    Как такое решить?

    ОтветитьУдалить
    Ответы
    1. Спасибо за отзыв!!!
      Насчет вопроса. Думаю, что при такой реализации схемы лучше обеспечить отказоустойчивое соединение между свитчами (EtherChannel например), чтобы линк все таки не упал :).
      А так получится, что хосты, которые будут подключены к первому свитчу сохранят свою сетевую доступность, а вот те, которые подключены ко второму свитчу - потеряют сеть. Это произойдет из-за того, что пакеты от хостов (подключенных ко второму свитчу) долетев до R3 от Standby_Router будут переданы им на роутер Active_Router, согласно таблице маршрутизации. Active_Router сделает arp-запрос для этих пакетов и, не получив результата, их дропнет.
      Думаю как то так...
      Так что решение я вижу в настройке отказоустойчивого соединения между этими свитчами, или установки 3-го свитча и обеспечения full-mesh топологии :).
      Еще конечно можно как то извернуться и настроить роутер R3, чтобы он часть сети 192.168.1.0/24 отправлял на один роутер, а другую часть, на другой.

      Удалить
  9. А если отслеживаемый интерфейс "ап" (например воткнут в медиаконвертер), но пакеты через него не ходят (конвертер подвис), ведь тогда переключение не произойдет и связь не наладится? Как быть в таком случае?

    ОтветитьУдалить
    Ответы
    1. Добрый день!!!
      В таком случае необходимо использовать и дополнительно настраивать технологию SLA Monitoring (Tracking). Она позволяет отслеживать такие моменты. Например осуществляется пинг удаленной сети или IP - адреса (порта), как только пинг пропадает, то монитор автоматически делает shutdown интерфейса, и тогда HSRP отработает как надо.

      Удалить
    2. Простите, прошлый раз не поздоровался.
      Приветствую. Спасибо за ответ. И за статью, конечно, спасибо, пролила для меня свет на некоторые вещи, доступно, понятно. Технологию SLA последний раз реализовывал для резервирования двух подключенных провайдеров на одном маршрутизаторе. Можно по подробнее со слов "...как только пинг пропадает, то монитор автоматически делает shutdown интерфейса, и тогда HSRP отработает как надо."?

      Удалить
    3. Ну я имею ввиду такой случай, когда SLA мониторит какой то параметр, и при пропадании связи SLA Monitor может сделать настроенное действие (например выключить интерфейс локальный). Следовательно, понизится приоритет у Master роутера и он станет Standby. В свою очередь, Standby роутер станет Master и трафик пойдет через него.
      Как то так...

      Удалить
  10. Спасибо, надо будет опробовать.

    ОтветитьУдалить
  11. Добрый день!

    Получилось у кого-нибудь настроить HSRP + SLA, чтобы они работали как описано выше?
    Если да, приведите конфиг плиз.

    ОтветитьУдалить
    Ответы
    1. А что у вас конкретно не получилось? Если надо, можете прислать мне конфигу на почту, я могу посмотреть...
      Потом можно будет выложить сюда :)

      Удалить
  12. Доброго дня!
    у меня 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.

    Всем удачи!
    Автору еще раз спасибо!

    ОтветитьУдалить
  13. Доброго дня!
    заметил баг на Cisco IOS Software, 3700 Software (C3745-ADVENTERPRISEK9-M), Version 12.4(15)T6 в GNS3 0.8.4 не работает HSRPv2, только первая версия. т.е. stanby-группа создаётся статус пишет Active, приоритет, пароль аутентификации, локального соседа, виртуальный ip (vIP), но только ни фига не работает (физические адреса пингуются, виртуальный группы нет).
    Это не особо важная тема, но кто сталкнется знайте, что при переходе на HSRPv1 все начинает летать.
    Удачи всем!

    ОтветитьУдалить
  14. Не очень относится к процессу понимания как работает 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.
    Автору еще раз огромное спасибо!

    ОтветитьУдалить
  15. только не пробуйте делать аутентификацию на эмуляторе. потому как у меня на GNS 0.8.4 и свитчовом модуле в 3745 перестает собираться HSRP, т.е. в state (R#sh standby) он активен, но пинги до него не идут.
    Надеюсь, в следующих релизах GNS это поправят. Но все равно очень приятно, что есть бесплатный софт, который пускай и не полностью, но эмулирует свитчи, роутеры, FW, линксовые хосты и т.д. При этом его можно подключать к физической сети.
    Удачи всем!
    Автору спасибо за доходчивое объяснение!

    ОтветитьУдалить