Урок 41. Протоколы резервирования шлюза - FHRP, HSRP, VRRP, GLBP

 

Общий обзор

Представим себе обычную клиентскую сеть:

Клиентская сеть без резервирования

Данная сеть не лишена недостатков. При выходе из строя  маршрутизатора  доступа в интернет лишаются все пользователи данной сети. 

Не стоит отчаиваться, так как  у нас есть решение. Можно подключить второй маршрутизатор параллельно данному маршрутизатору. Причем данный маршрутизатор будет имеет идентичную конфигурацию с первоначальным маршрутизатором (за исключением IP адресов своих интерфейсов):

Клиентская сеть с резервированием

Теперь при отказе основного маршрутизатора все функции на себя возьмет резервный и обрыв связи никто не заметит. 

Но как об этом узнают хосты пользователей? У них же настроен шлюз по умолчанию. 

Они об этом не узнают. Им достаточно знать IP адрес виртуального шлюза по умолчанию, который существует в виде группы основного и резервного маршрутизаторов.

В этой группе всегда активным является только один маршрутизатор. Когда хосты пользователей просятся в интернет активный маршрутизатор отправляет свой МАС адрес в ARP запросе от пользователей. 

Когда активный маршрутизатор теряет связь с провайдером или выходит из строя, то об этом узнает резервный маршрутизатор и отправляет хостам пользователей свой МАС адрес. 

Как видно принцип резервирования достаточно прост. 

Но кто управляет всем этим процессом? 

Для управления резервированием было разработано целое семейство протоколов First Hop Redundancy Protocol, FHRP. В него вошли протоколы HSRP, VRRP, GLBP. 

Опишем каждый из них в отдельности.

 

HSRP - описание и настройка

Hot Standby Router Protocol - разработка Cisco.  Все потенциальные шлюзы по умолчанию объединяются в группу. Таких групп может быть несколько. В группе активным является всегда только один маршрутизатор/коммутатор. В группе также имеется резервный маршрутизатор, который постоянно следит за активным маршрутизатором. И если тот выйдет из строя, то резервный маршрутизатор сразу его заменит. 

Как определяются активный и резервный маршрутизаторы? 

Все маршрутизаторы группы между собой общаются по адресу 224.0.0.2 (UDP порт 1985).  После подачи питания они начинают выборы на право быть активным и резервным маршрутизаторами. Побеждает тот, у которого больше приоритет (0 - 255). По умолчанию он равен 100. Если приоритеты у всех равны, то сравниваются IP адреса. Побеждает маршрутизатор с большим адресом. Он и становится активным и переводится в состояние Active. Следующий за ним маршрутизатор становится резервным и переводится в состоянии Standby. Все остальные маршрутизаторы переводятся в состояние Listen. Они ждут следующих выборов  в случае отказа активного маршрутизатора. 

Все маршрутизаторы последовательно проходят следующие состояния: Disabled → Init → Listen → Speak → Standby → Active 

Как резервный маршрутизатор узнает, что активный маршрутизатор уже не в “строю”? 

Активный  маршрутизатор каждые 3 с (Hello интервал) рассылает пакеты Hello, которые прослушивает резервный маршрутизатор. Если после 3 с не поступит пакет Hello, то запустится Dead таймер, который равен 10с. По истечении этого таймера резервный маршрутизатор переводится в состояние Active и выбирается новый резервный маршрутизатор. 

 

А что происходит, когда “оживает” бывший активный маршрутизатор? 

Возможны 2 варианта: 

1-й вариант. Ничего не происходит пока не “умрет” действующий активный маршрутизатор. 

2-й вариант. “Оживший” маршрутизатор может снова переключится в состояние Active. Но для этого необходимо настроить функцию Preemtion на всех маршрутизаторах группы (об этом немного позже).

 

А если вдруг uplink одного из маршрутизаторов отключится. Что произойдет в данном случае? 

Если это произойдет на активном маршрутизаторе, то все хосты останутся без интернета. Но и здесь есть решение. В HSRP предусмотрена возможность для отслеживания uplink интерфейса. Как только маршрутизатор обнаруживает, что его WAN/uplink  интерфейс не работает, то сразу же понизит приоритет HSRP в своей группе. Резервный маршрутизатор сразу же это узнает и примет управление на себя, став активным маршрутизатором. Но для этого необходимо активировать функцию Preemtion. 

Настройка протокола очень проста, достаточно выполнить следующую команду: 

Router(config-if)# standby номер_группы ip виртуальный_IP_адрес 

Данную команду необходимо выполнить на всех маршрутизаторах группы. 

Для того, чтобы повлиять на результаты выборов активного маршрутизатора можно настроить приоритет: 

Router(config-if)# standby номер_группы priority приоритет 

Для возврата “ожившего” маршрутизатора в активное состояние необходимо на нем выполнить команду: 

Router(config-if)# standby номер_группы preemt 

Для отслеживания WAN/Uplink интерфейса на случай его отказа необходимо выполнить команду на всех маршрутизаторах: 

Router(config-if)# standby номер_группы track название_и_номер_интерфейса 

Preemtion должна быть включена на всех маршрутизаторах. 

Теперь посмотрим на состояние активного и резервного маршрутизаторов с помощью команд: 

Router# show standby

Router# show standby brief

Отображение информации об активном маршрутизаторе FHRP - Router A

Краткая информация об активном маршрутизаторе FHRP - Router A

подробная информация о резервном маршрутизаторе - Router B

Краткая информация о резервном маршрутизаторе - Router B

Протокол также поддерживает аутентификацию простым текстом: 

Router(config-if)#  standby номер_группы authentication пароль 

А также с помощью MD5: 

Router(config-if)#  standby номер_группы authentication md5 key-string пароль

 

VRRP - описание и настройка

Virtual Router Redundancy Protocol - альтернативный открытый HSRP протокол. Работает точно так же, как и HSRP. Протокол использует адрес 224.0.0.18 и отправляет пакеты Hello c интервалом в 1с. Активный маршрутизатор называется master, все остальные - backup. Кроме того, все backup слушают master. Preemtion уже включена по умолчанию. 

Настройка идентична HSRP с небольшим отличием: 

Router(config-if)# vrrp номер_группы виртуальный_IP_адрес_и_маска 

Для просмотра информации о работе и настройках: 

Router# show vrrp

 

GLBP - описание и настройка

Gateway Load Balancing Protocol - проприетарный протокол Cisco. В отличие от предыдущих протоколов позволяет еще и балансировать нагрузкой. Для этого создается группа из 4 активных маршрутизаторов, через которые и осуществляется балансировка. 

Кто управляет процессом балансировки? 

В начале происходят выборы, по итогам которых выбирается главный маршрутизатор. Данное устройство называется Active Virtual Gateway, AVG. Затем выбираются еще 3 ведомых маршрутизатора, которые называются Active Virtual Forwarder, AVF.

Все маршрутизаторы группы, помимо общего виртуального IP адреса (VIP), имеют и индивидуальный виртуальный МАС адрес. Когда хост посылает ARP запрос с целью узнать МАС адрес шлюза, то AVG выдает один из виртуальных МАС адресов группы. Таким образом и осуществляется балансировка нагрузки. 

На основе чего происходят выборы? 

На основе приоритета (по умолчанию 100)  или IP адреса, если приоритеты равны. 

Виртуальный МАС адрес тоже надо вручную настраивать? 

Нет, он настраивается автоматически и принимает значения 0007.b400.01xx, где хх означает номер AVG/AVF. 

Что произойдет, если из строя выйдет AVG или AVF? 

Его место займет резервный  маршрутизатор. Все активные маршрутизаторы обмениваются каждые 3с Hello пакетами. Резервные маршрутизаторы тоже принимают пакеты и ждут своего часа. Если через 3с пакет Hello не будет получен, то запустится Dead таймер, который равен 10с. В качестве резервного (Standby) маршрутизатора выбирается один из AVF. Когда Standby маршрутизатор становится Active, то снова выбирается Standby. 

Какой IP адрес используется для обмена Hello пакетами? 

224.0.0.102,  UDP порт 3222. 

По какому принципу AVG балансирует нагрузкой? 

GLBP поддерживает 3 режима балансировки: 

    • Round Robin (включен по умолчанию) - балансировка осуществляется равномерно между всеми маршрутизаторами. 
    • Weighted  - балансировка осуществляется по весу AVF. У кого больше вес тот и принимает большую нагрузку. 
    • Host dependent - используется, когда определенным хостам требуется постоянный МАС шлюза.

 

Настройка схожа с настройкой протоколов HSRP/VRRP: 

Router(config-if)# glbp номер_групы  ip виртуальный_IP_адрес 

Уже после данной команды начнет работать балансировка нагрузки и резервирование. Следует помнить, что preemtion в AVG по умолчанию выключена, а на AVF - включена. 

Для проверки работы и распределения ролей используйте команды:

Router# show glbp brief

Отображение краткой информации о маршрутизаторах GLBP

Router# show glbp

Отображение подробной информации о маршрутизаторах GLBP

 

Как работает отслеживание WAN/Uplink интерфейса? 

Отслеживание работает немного по-другому в отличие от HSRP/VRRP. Каждому интерфейсу AVF присваивается определенный вес (по умолчанию 100, максимум -254). Кроме того, устанавливаются нижний (lower) и верхний (upper) пороги весов. Когда GLBP обнаружит, что интерфейс WAN/Uplink недоступен, то уменьшит вес GLBP интерфейса на определенное значение (по умолчанию 10). То есть, если было 100, то после отказа линии станет 90. Если уменьшенное значение веса окажется ниже порога lower, то маршрутизатор теряет статус AVF и не участвует в балансировке нагрузки, а также не принимает участие в выборах. Если после того, как WAN/Uplink интерфейс восстановится, то  восстановится и первоначальный вес GLBP интерфейса. Если этот вес окажется больше порога upper, то сможет снова стать AVF и принимать участие в выборах.

По умолчанию lower = 1, upper =100. 

Для отслеживания состояния интерфейса используется специальный track объект. Данному объекту указывается номер и тип интерфейса, а также механизм запуска. 

После этого данный track объект привязывается к определенной GLBP группе. Поддерживаются 2 механизма запуска: состояние интерфейса на канальном уровне (line-protocol)  и способность интерфейса передавать данные (ip routing).

То есть, если указать 1-й способ, то операционная система будет отслеживать состояние интерфейса на канальном и следовательно на физическом уровнях. Как только произойдет отказ интерфейса либо обрыв линии, то активируется механизм запуска и вес GLBP интерфейса уменьшится.

 

2-й способ отвечает за следующие состояния: 

    • Наличие IP адреса на интерфейсе. Это особенно актуально, если настроен DHCP клиент.
    • Состояние интерфейса на канальном уровне
    • Маршрутизация на интерфейсе. К примеру, у нас могут быть настроены виртуальные интерфейсы (Dialer, Tunnel). Сам канальный протокол может быть в состоянии UP, но маршрутизация не будет работать. В этом случае нам и сгодится данная опция отслеживания.

Сначала попробуем 1-й способ. 

Создаем трэкинг объект: 

Router(config)# track 1  interface serial 0/0 line-protocol 

Затем определим вес самого AVF и его нижний и верхний пороги весов: 

Router(config)# interface fastethernet 0/0

Router(config-if)# glbp 1 weighting 150 lower 130 upper 140 

И привязываем трэкинг объект к GLBP группе c шагом уменьшения веса: 

Router(config-if)# glbp 1 weighting track 1 decrement 30 

Теперь, выключив интерфейс на маршрутизаторе A, через 30 секунд  маршрутизатор B изменит свой статус GLBP.

 

Для настройки 2-го способа достаточно в трэкинг объекте выбрать ip routing: 

Router(config)# track 1 interface serial 0/0 ip routing

 Вот и все.  

Кстати, трэкинг объекты можно использовать и в HSRP/VRRP.