Sunday, October 6, 2013

HSRP-протокол. Несколько наблюдений




Попробуем присмотреться к поведению протокола на практике. Это не руководство по настройке, а скорее дополнение, читать которое есть смысл, понимаю основные теоретические особенности HSRP. Все примеры, приведенные тут, проверялись на такой конфигурации:
Cisco IOS Software, 3600 Software (C3660-JK9S2-M), Version 12.4(15)T14, RELEASE SOFTWARE (fc2)

Итак, базовая настройка
interface FastEthernet0/0
 ip address 10.1.100.5 255.255.0.0
 duplex auto
 speed auto
 standby ip 10.1.100.10
end
Несколько наблюдений:
Если не указать номер группы, то будет использоваться номер 0. Таким образом:
standby ip 10.1.100.10
равносильно
standby 0 ip 10.1.100.10
Также, если не указан приоритет, то активным роутером будет выбран тот, у которого выше IP-адрес.
Далее, если параметры не будут совпадать, то каждый из роутеров будет считать себя активным и периодически отправлять на консоль сообщения
*Mar  1 00:53:22.999: %IP-4-DUPADDR: Duplicate address 10.1.100.10 on FastEthernet0/0, sourced by 0000.0c07.ac00
Если же в группе адреса совпадать не будут, то роутеры таки договорятся, кто из них активный, а кто запасной, но на консоли появится сообщение
*Mar  1 00:56:21.811: %HSRP-4-DIFFVIP1: FastEthernet0/0 Grp 0 active routers virtual IP address 10.1.100.10 is different to the locally configured address 10.1.100.11
Далее, по-умолчанию используется версия протокола 1, ее можно поменять на 2, версии несовместимы, маршрутизаторы не договорятся. Из различий, например, то, что пакеты шлются на разные multicast адреса (версия 1 - 224.0.0.2 , версия 2 - 224.0.0.102). Более подробно тут
Если изменять таймеры (напомню, первое число это секунды hello-таймера, вторая – hold-таймера)
standby 0 timers 2 7
То на всех маршрутизаторах будет использоваться именно те значения, которые выставлены на активном
R2(config-if)#standby 0 timers 2 7
R2(config-if)#do show stand
FastEthernet0/0 - Group 0
  State is Standby
    7 state changes, last state change 00:07:48
  Virtual IP address is 10.1.100.10
  Active virtual MAC address is 0000.0c07.ac00
    Local virtual MAC address is 0000.0c07.ac00 (v1 default)
  Hello time 10 sec (cfgd 2 sec), hold time 35 sec (cfgd 7 sec)
    Next hello sent in 1.264 secs
  Authentication MD5, key-string "america"
  Preemption disabled
  Active router is 10.1.100.4, priority 100 (expires in 27.092 sec)
  Standby router is local
  Priority 100 (default 100)
  Group name is "hsrp-Fa0/0-0" (default)
R2(config-if)#
так что как-то они там между собой договариваются, и несовпадения таймеров бояться не стоит. Правда тут непонятно, ибо по-умолчанию используется протокол версии 1, а согласование таймеров завялено в версии 2. По умолчанию, кстати, используются значения таймеров 3 и 10.
Также можно заставить маршрутизатор использовать вместо стандартных MAC-адресов для HSRP вшитые адреса интерфейсов
standby use-bia
При этом показывать будет вот так:
R1(config-if)#do show stand
FastEthernet0/0 - Group 0
  State is Active
    5 state changes, last state change 00:30:11
  Virtual IP address is 10.1.100.10
  Active virtual MAC address is cc00.1730.0000
    Local virtual MAC address is cc00.1730.0000 (bia)
или можно задать альтернативный MAC-адрес самостоятельно
standby mac-address 0015.5dce.4с07
и если это существующий в сети MAC-адрес, то можно не только получить нестабильно работающую сеть, но и организовать атаку man-in-the-middle. Когда пакеты, адресованные серверу, приходят сначала к нам на маршрутизатор (потому что у нас MAC-адрес совпадающий и, допустим, мы быстрее отвечаем на ARP-запросы), а потом мы уже отправляем их на сервер. Ну и мы, соответственно, можем анализировать проходящий траффик.
При этом если попытаться задать вручную МАК-адрес из  другой HSRP-группы, то получим ошибку. Попытаемся задать группе 0 адрес группы 10
R1(config-if)#stand mac-address 0000.0c07.ac0a
% Invalid MAC address.
R1(config-if)#
Чтобы роутер при возвращении в активное состояние ждал определенное время можно воспользоваться командой
standby delay minimum 10 reload 60
Указано обычно ждать 10 секунд, после перезагрузки – 60. Это необходимо, например, чтобы успела заполниться таблица маршрутизации до того, как роутер станет активным.
Как уже говорилось, для обмена информацией в HSRP используется адрес 224.0.0.2, порт 1985. Поэтому, если на интерфейсе настроен ACL, то договориться роутеры не смогут.
Команда
standby preempt
позволяет динамически забирать роль активного маршрутизатора на себя. Без этой команды, если повысить приоритет роутеру, то он не станет активным. При этом эта команда должна быть использована на роутере, который пытается стать активным.
Еще интересно, что если пустить traceroute, то там мы увидим именно реальный IP-адрес интерфейса, а не виртуальный.
Вот пока все мои наблюдения при детальном знакомстве с HSRP.


1 comment: