Cisco с нуля 13. HSRP: резервирование шлюза по умолчанию
Note
Команды сверены с официальной документацией Cisco (руководства по настройке Cisco IOS XE 17.x для Catalyst 9000 и маршрутизаторов ISR; отличия классической IOS 15.x отмечены в тексте). Перед работой на боевом оборудовании проверьте их на тестовом стенде или сделайте резервную копию.
В статьях первой части шлюзом для всех VLAN был один маршрутизатор R1. Пока он работает, всё хорошо. Но стоит R1 перезагрузиться, потерять питание или лишиться канала к провайдеру, как весь офис остаётся без выхода наружу и даже без связи между VLAN. В этой статье мы поставим рядом второй маршрутизатор R3 и объединим их протоколом HSRP (Hot Standby Router Protocol): клиенты по-прежнему будут ходить на адрес .1, но за этим адресом окажутся два устройства, и при отказе одного второе подхватит работу.
В итоге у вас будет:
- общий виртуальный шлюз
.1в VLAN 10, 20 и 99 на двух маршрутизаторах; - распределение нагрузки:
R1обслуживает VLAN 10 и 99,R3— гостевой VLAN 20; - автоматическое переключение, если у активного маршрутизатора пропал WAN-канал;
- понимание, что при этом происходит с NAT и клиентскими сессиями, и способ вернуть всё обратно.
Что понадобится
- Обязательно: статья 05 (router-on-a-stick).
- Желательно: 04 (VLAN и trunk).
- Для блоков NAT и списка
GUEST-INнаR3: 07 и 08. Если вы их не читали, пропустите соответствующие строки. - Необязательно: 02 (базовая настройка и SSH), 10 (защита коммутатора) и 12 (резервные копии и TFTP/SCP).
- Состояние сети на старте:
R1является шлюзом.1в VLAN 10, 20 и 99 на подинтерфейсахGigabitEthernet0/0/1.10,.20,.99, аSW1связан с ним trunk-портомGigabitEthernet1/0/24(VLAN 10, 20, 99 разрешены, native 999); управляющий интерфейсVlan99коммутатора имеет адрес192.168.99.2(мы перенесём его на.4). Если у вас NAT и DHCP из статьи 07, они продолжат работать, как описано ниже; без них можно обойтись, просто пропустите соответствующие строки. - Второй маршрутизатор
R3с базовой настройкой (имя, пароли, SSH, как в статье 02), подключённый кSW1так: портGigabitEthernet0/0/1маршрутизатораR3— портGigabitEthernet1/0/23коммутатораSW1. ПортGigabitEthernet0/0/0смотрит ко второму провайдеру: стык198.51.100.4/30, адресR3—198.51.100.6, шлюз провайдера —198.51.100.5. - Доступ к консоли
R1,R3иSW1. Мы будем менять адреса шлюза, и по SSH вы можете потерять управление. - Компьютер в VLAN 10 для проверки пингом.
- Перед началом сохраните рабочую конфигурацию на
R1,R3иSW1(copy running-config startup-config) и сделайте копию во flash (команда в разделе «Что изменится в сети»). Таймерreload in, который мы используем ниже, возвращает устройство именно кstartup-config: если вы не сохраняли результаты предыдущих статей, они при срабатывании таймера пропадут.
Important
Минимальный стенд для этой статьи: два маршрутизатора (R1 и R3), коммутатор SW1 с trunk-портами к обоим, компьютер в VLAN 10 и два «провайдера» (на стенде их заменяют два маршрутизатора или облака с адресами 203.0.113.1 и 198.51.100.5). Всё это можно собрать в эмуляторе (Cisco Modeling Labs, GNS3, EVE-NG; образы и лицензии на вас; Cisco Packet Tracer поддерживает не все команды, поэтому результаты там могут отличаться). Не пробуйте статью на действующей офисной сети: во время настройки клиенты теряют шлюз.
Проблема: единая точка отказа
У клиента один адрес шлюза по умолчанию. Он получает его по DHCP или вводит вручную и не умеет сам «переключиться» на другой маршрутизатор. Если поставить второй маршрутизатор с другим адресом, клиенты об этом не узнают. Нужен механизм, при котором у двух маршрутизаторов есть общий адрес и они сами договариваются, кто им сейчас отвечает.
Такие механизмы называют FHRP (First Hop Redundancy Protocols, протоколы резервирования первого перехода):
| Протокол | Кто придумал | Особенность |
|---|---|---|
| HSRP | Cisco | Один маршрутизатор active, второй standby. Самый распространённый в сетях Cisco, ему посвящена эта статья |
| VRRP | открытый стандарт IETF (RFC) | Та же идея, работает и с оборудованием других производителей. Короткий пример ниже |
| GLBP | Cisco | Умеет делить нагрузку внутри одного VLAN: клиентам выдаются разные виртуальные MAC-адреса одного шлюза |
HSRP предназначен для сетей Ethernet, где есть несколько узлов-соседей (многодоступные сети). Он не заменяет динамическую маршрутизацию: это протокол только про шлюз по умолчанию для клиентов.
Как работает HSRP
Виртуальный IP и виртуальный MAC
Оба маршрутизатора получают собственные «реальные» адреса (у нас .2 и .3), а у группы HSRP появляется общий виртуальный IP (VIP) — это и есть прежний шлюз .1. У группы также есть виртуальный MAC-адрес. Клиенты узнают его обычным ARP-запросом про .1 и дальше шлют кадры именно на него. Когда роль переходит к другому маршрутизатору, он начинает отвечать на тот же VIP и тот же виртуальный MAC, поэтому клиентам ничего перенастраивать не нужно.
Active и standby
В группе один маршрутизатор active: он владеет VIP и пересылает трафик клиентов. Второй — standby: он следит за активным и готов его заменить. Active выбирается по приоритету (по умолчанию 100; чем больше, тем лучше), а при равенстве приоритетов в выборе участвует IP-адрес интерфейса (больший адрес имеет преимущество). Исход при равных приоритетах лучше не использовать как гарантию: документация Cisco описывает его по-разному, см. раздел про тест отказа. Поэтому приоритеты мы всегда задаём разными.
До выбора роли группа проходит состояния Init (HSRP на интерфейсе ещё не готов работать), Learn, Listen и Speak (их можно увидеть в show standby). Что делать, если группа в одном из них «застряла», описано в разделе «Как проверить».
Hello, hold и preempt
Маршрутизаторы обмениваются сообщениями hello: по умолчанию каждые 3 секунды. Если standby не слышит active в течение hold time (по умолчанию 10 секунд), он занимает роль active. Эти таймеры можно менять командой standby timers, но мы оставляем значения по умолчанию: на разных платформах ограничения различаются (например, в руководстве по Catalyst 9300 сказано, что миллисекундные таймеры HSRP там не поддерживаются).
Preempt («вытеснение») отвечает на вопрос: что делать, когда маршрутизатор с более высоким приоритетом вернулся в строй. По умолчанию preempt выключен, и такой маршрутизатор не отнимет роль active у текущего, даже если его приоритет выше. С standby preempt он заберёт роль обратно. Для нашей схемы preempt нужен на обоих маршрутизаторах. На R1 — чтобы после перезагрузки он снова стал основным. На R3 — чтобы при потере R1 WAN-канала он перехватил роль у ещё живого R1, о чём ниже.
У preempt есть параметр delay minimum <секунды>: маршрутизатор откладывает вытеснение на указанное число секунд. Это нужно, потому что только что загрузившийся (или только что поднявший интерфейс) маршрутизатор ещё может не иметь полной таблицы маршрутов, и, захватив роль сразу, он начнёт терять трафик. Мы используем 30 секунд (такое значение встречается в примерах документации Cisco). Практический вывод: задержка добавляется там, где роль переходит через preempt (возврат роли после загрузки, вытеснение при срабатывании track), поэтому пауза до 30 секунд после события нормальна. Когда же active просто замолчал (выключился или оборвался LAN-интерфейс), standby занимает роль по истечении hold time. Ориентируйтесь на show standby brief, а не на часы. Если вам важнее скорость переключения, уменьшите задержку или не задавайте её на R3; цена этого решения — риск захватить роль раньше, чем маршрутизатор «прогреется».
Версии HSRP 1 и 2
На интерфейсе работает только одна версия HSRP, и версии между собой не совместимы.
| HSRP версии 1 (по умолчанию) | HSRP версии 2 | |
|---|---|---|
| Номера групп | 0–255 | 0–4095 |
| Multicast-адрес hello | 224.0.0.2 |
224.0.0.102 |
| Виртуальный MAC | 0000.0C07.ACxy (xy — номер группы в hex) |
0000.0C9F.F000–0000.0C9F.FFFF (последние три hex-цифры — группа) |
| UDP-порт | 1985 | 1985 |
Мы берём версию 2: она допускает группы до 4095, поэтому номер группы можно приравнивать к номеру любого VLAN. В нашей топологии (VLAN 10, 20, 99) это не обязательно, поскольку эти номера укладываются и в диапазон версии 1, но удобно и оставляет запас на будущее. Кроме того, у версии 2 свой multicast-адрес 224.0.0.102. Для группы 10 виртуальный MAC в версии 2 — 0000.0c9f.f00a. Версию задают на интерфейсе командой standby version 2 (без номера группы), и делать это нужно до создания групп: при смене версии все группы переинициализируются, потому что у них меняется виртуальный MAC.
Что изменится в сети из статей 05–12
Warning
Начиная с этой статьи R1 перестаёт быть шлюзом «по адресу». Это важно понимать до первой команды.
- Адреса. Шлюз
.1становится виртуальным адресом HSRP. Реальные адреса интерфейсов: уR1—.2, уR3—.3(в каждом из VLAN 10, 20, 99). - Клиенты и DHCP. Клиентам ничего менять не нужно:
default-routerв пулах DHCP остаётся.1(статья 07). Но DHCP-сервер по-прежнему только наR1: если он выключится, новые адреса выдавать станет некому, а уже выданные продолжат работать до конца аренды (у нас 1 день для OFFICE и 4 часа для GUEST). Запасной DHCP-сервер наR3(с непересекающимся пулом) можно сделать по статье 07, здесь мы его не разбираем. Исключённый диапазон.1–.20из статьи 07 уже покрывает адреса.2и.3. - Управление.
- SSH на маршрутизаторы идёт на реальные адреса:
192.168.99.2дляR1и192.168.99.3дляR3. Адрес192.168.99.1ведёт на то устройство, которое сейчас active. - Конфликт адресов: по статьям 02 и 04 адрес
192.168.99.2занят управляющим интерфейсомVlan99коммутатораSW1. ПоэтомуSW1переносится на свободный192.168.99.4(шаг «Подготовка SW1» ниже). Егоip default-gateway 192.168.99.1остаётся прежним. - Если адрес
.2дляSW1прописан у вас в мониторинге, правилах доступа или закладках, замените его на.4. - В статьях 20–24
SW1имеет адрес.2: после этой статьи подставляйте там192.168.99.4, а.2считайте адресомR1.
- SSH на маршрутизаторы идёт на реальные адреса:
- NAT. NAT настраивается на каждом маршрутизаторе отдельно:
R1транслирует в свой WAN-адрес203.0.113.2,R3— в198.51.100.6. Состояние трансляций между устройствами не передаётся. Поэтому при переключении существующие соединения клиентов (загрузки, сеансы, видеозвонки) обрываются, а новые устанавливаются через второго провайдера. Из-за разных провайдеров у клиента сменится и внешний адрес. Входящие сервисы, опубликованные на203.0.113.2, черезR3доступны не будут. - ACL. Всё, что в статьях 02 и 08 настроено только на
R1, наR3отсутствует: списокGUEST-INна гостевом подинтерфейсе, ограничение доступа к линиям vty (access-class), правила на WAN. Поскольку по нашей схеме гостевым VLAN 20 в норме занимаетсяR3, без переноса этих правил гости пойдут мимо изоляции. Перенос списка гостевой сети показан в разделе проR3. Кроме того, входящие списки на подинтерфейсах не должны блокировать HSRP (см. раздел про ACL ниже). - Маршруты. На
R3есть только маршрут по умолчанию. Всё, чтоR1знает дополнительно (например, сеть192.168.50.0/24заR2из статей 06 и 11),R3не знает. После переключения наR3интернет будет работать, а филиальная сеть может стать недоступной. Что с этим делать, сказано в разделе проR3. - Остальное из серии. Всё, что настроено только на
R1в других статьях (QoS, AAA, SNMP и syslog, туннели к филиалу (GRE, IPsec), межсетевой экран на маршрутизаторе — ZBFW, BGP), наR3отсутствует; при необходимости повторите это наR3по соответствующей статье. Если наR1включён ZBFW, трафик HSRP придётся явно разрешить: это наш вывод, а не прямое указание документации. HSRP здесь настроен только для IPv4. Стенд с двумя провайдерами на одномR1(статьи 15 и 16, а также шаг 4 со статическим плавающим маршрутом в статье 21) с этим стендом не совмещается: там второй провайдер подключён кR1, а не кR3. Исключение — вариант для HSRP в той же статье 21: он как раз рассчитан на стенд этой статьи (см. предупреждение про IP SLA ниже).
Откат описан в конце статьи. Отдельно про классическую IOS 15.x: группа команд standby там та же, но порты называются иначе (например, GigabitEthernet0/1.10), а поддержку HSRP версии 2 в вашем образе проверьте справкой ? после standby. В любом случае перед работой сделайте резервную копию конфигурации на R1, R3 и SW1 (способы — в статье про резервные копии). Самый короткий вариант, пока вы ничего не сохраняли после правок:
enable
copy running-config flash:pre-hsrp.cfg
Файл остаётся во flash-памяти устройства; имя pre-hsrp.cfg произвольное. Если у вас есть TFTP/SCP-сервер из статьи 12, скопируйте конфигурацию и туда.
Подготовка SW1: управляющий адрес и trunk к R3
Освобождаем адрес 192.168.99.2
Warning
Если вы подключены к SW1 по SSH на 192.168.99.2, после смены адреса сеанс оборвётся. Выполняйте шаг с консоли SW1. Запустите reload in 30 (отмена: reload cancel) и не сохраняйте конфигурацию до проверки. Таймер отсчитывает время от запуска: если работа затянулась, не ждите его конца, а выполните reload cancel и запустите reload in 30 заново.
В VLAN 99 у R1 будет адрес 192.168.99.2, поэтому управляющий интерфейс SW1 переносим на свободный 192.168.99.4 (в VLAN 99 DHCP не используется, так что клиентам адрес не выдадут):
enable
configure terminal
interface vlan 99
ip address 192.168.99.4 255.255.255.0
end
Как проверить: show ip interface brief на SW1 покажет Vlan99 с адресом 192.168.99.4, а show running-config | include default-gateway — ip default-gateway 192.168.99.1. Пока R1 ещё шлюз .1 по схеме из статьи 05, ping 192.168.99.1 с коммутатора по-прежнему отвечает.
Trunk к R3
Порт Gi1/0/23 в статье 04 мы закрыли как запасной: перевели в VLAN 999 и выключили. Теперь он нужен как trunk к R3, с теми же параметрами, что у порта к R1.
Warning
Если вы выполняли статью 10 и включали на SW1 Dynamic ARP Inspection (DAI), порт к R3 нужно сделать доверенным. Иначе SW1 будет проверять ARP-ответы R3 по таблице привязок DHCP, а R3 с его статическим адресом там не значится. В результате show standby покажет рабочую пару, а клиенты после переключения всё равно не получат шлюз. Для этого на Gi1/0/23 добавьте ip arp inspection trust (как на порту к R1). ip dhcp snooping trust на этом порту нужен, только если за ним появится DHCP-сервер. Проверка: show ip arp inspection interfaces.
Порт к R3 можно настраивать без таймера перезагрузки, но держите консоль SW1 под рукой: ошибка в списке VLAN может отрезать R3, а при потере сетевого доступа к самому SW1 возвращаться придётся через консоль. По желанию запустите на SW1 reload in 30 (отмена и правила те же, что для R1 ниже).
enable
configure terminal
interface GigabitEthernet1/0/23
description UPLINK to R3 Gi0/0/1
switchport mode trunk
switchport trunk native vlan 999
switchport trunk allowed vlan 10,20,99
switchport nonegotiate
no shutdown
end
На старых L3-коммутаторах 3560/3750 перед switchport mode trunk нужна строка switchport trunk encapsulation dot1q (подробнее в статье 04).
Как проверить: show interfaces trunk должна показать Gi1/0/23 в состоянии trunking, native VLAN 999 и разрешённые VLAN 10, 20, 99. Если VLAN не разрешены на этом порту, R3 до сети не достанет (см. «Типичные ошибки»).
Настройка R1: шлюз становится виртуальным
Warning
Команды ниже меняют адреса интерфейсов, через которые вы можете быть подключены. Выполняйте их с консоли R1. Если вы работаете по SSH из VLAN 99, соединение оборвётся на последнем подинтерфейсе, поэтому подстрахуйтесь таймером перезагрузки. До проверки не сохраняйте конфигурацию. Если по запросу Save? вы ответите yes, правки попадут в startup-config, и подстраховка перестанет работать.
enable
reload in 30
Если устройство сразу после reload in 30 спросит про сохранение конфигурации (System configuration has been modified. Save?), ответьте no, а запрос подтверждения перезагрузки (Proceed with reload? [confirm]) подтвердите клавишей Enter. То же касается reload in 30 на SW1 и R3. Если после настройки вы потеряли доступ, через 30 минут R1 перезагрузится с последней сохранённой конфигурацией, то есть без правок. Если вопрос о сохранении появится при самой перезагрузке, ответьте no и там. Весь путь может занять больше получаса, поэтому перед каждым новым этапом продлевайте таймер (reload cancel, затем снова reload in 30) на тех устройствах, где правки ещё не сохранены. Если таймер сработал посреди работы, R1 и SW1 вернутся к схеме из статьи 05, а настройку R3 придётся повторить. После успешной проверки отмените перезагрузку командой reload cancel.
Теперь сама настройка. Сначала создаётся объект отслеживания track 10: он считает «поднятым» состояние линии GigabitEthernet0/0/0, то есть WAN. Затем на каждом подинтерфейсе меняется адрес и создаётся группа HSRP.
enable
configure terminal
track 10 interface GigabitEthernet0/0/0 line-protocol
exit
interface GigabitEthernet0/0/1.10
ip address 192.168.10.2 255.255.255.0
standby version 2
standby 10 priority 110
standby 10 preempt delay minimum 30
standby 10 track 10 decrement 20
standby 10 name HSRP-OFFICE
standby 10 ip 192.168.10.1
interface GigabitEthernet0/0/1.20
ip address 192.168.20.2 255.255.255.0
standby version 2
standby 20 priority 100
standby 20 preempt delay minimum 30
standby 20 track 10 decrement 20
standby 20 name HSRP-GUEST
standby 20 ip 192.168.20.1
interface GigabitEthernet0/0/1.99
ip address 192.168.99.2 255.255.255.0
standby version 2
standby 99 priority 110
standby 99 preempt delay minimum 30
standby 99 track 10 decrement 20
standby 99 name HSRP-MGMT
standby 99 ip 192.168.99.1
end
Разберём команды:
standby version 2— версия протокола для этого (под)интерфейса. Выполняется до создания групп.standby 10 priority 110— приоритет в группе 10 (по умолчанию 100). Номер группы мы взяли равным номеру VLAN, так проще читать вывод.standby 10 preempt delay minimum 30— разрешить вытеснение с задержкой не менее 30 секунд (подробности и оговорки — в разделе про preempt выше).standby 10 track 10 decrement 20— если объектtrack 10перешёл в down, уменьшить приоритет этой группы на 20. Номер объекта (10) не связан с номером группы: мы просто выбрали 10, чтобы он не пересекался с объектамиtrackиз других статей серии (например, в статьях про два провайдера и IP SLA используются другие номера).standby 10 name HSRP-OFFICE— имя группы (по справочнику команд HSRP, до 25 символов и уникальное в пределах маршрутизатора). Для работы протокола оно не обязательно, но облегчает чтение конфигурации и нужно некоторым функциям, например привязке NAT к группе HSRP.standby 10 ip 192.168.10.1— виртуальный IP. Эта команда включает HSRP в группе, поэтому её пишут последней: Cisco рекомендует сначала задать все атрибуты и только потом включать группу, иначе возможны лишние смены состояний.
Адрес подинтерфейса и VIP должны быть в одной подсети. Все standby-команды выполняются в режиме настройки интерфейса, в том числе на подинтерфейсах.
После этого R1 окажется единственным устройством в группах и через несколько десятков секунд станет active (точное время зависит от платформы и версии; следите за show standby brief). Клиенты на это время теряют шлюз.
Как проверить: show standby brief на R1 покажет состояние Active для групп 10, 20 и 99, пока R3 ещё не настроен (в Init, Listen или Speak группа может побыть некоторое время; если она не выходит из Init, смотрите расшифровку в разделе «Как проверить» ниже). Клиентский пинг на .1 проверяйте после того, как группы стали Active.
Настройка R3
R3 получает такую же схему, только с другими реальными адресами, приоритетами, собственным WAN, маршрутом по умолчанию и NAT. Если вы не настраивали NAT на R1, пропустите строки с nat и access-list 1. Здесь предполагается, что на R3 есть только базовая настройка и порт Gi0/0/0 пока без адреса.
Warning
R3 смотрит во второй WAN: до ограничения доступа SSH на нём открыт из интернета. Блок ниже уже включает ограничение vty (access-class 10 in, доступ только из 192.168.99.0/24) и отключает веб-интерфейс; эти строки стоят в самом начале блока, раньше настройки WAN-порта, чтобы не было окна с открытым SSH. Это минимум, а не полноценная защита WAN-порта: входящий список на GigabitEthernet0/0/0 (по образцу OUTSIDE-IN из статьи 08, но с учётом, что он проверяется до трансляции NAT) или ZBFW из статьи 23 добавьте до подключения R3 к реальному провайдеру. Выполняйте его с консоли R3 либо с компьютера из VLAN 99 и подстрахуйтесь таймером reload in 30 (отмена: reload cancel); конфигурацию до проверки не сохраняйте. Если список access-list 10 у вас на R3 уже есть (статьи 02 и 08), не вводите строку permit повторно.
Гостевой VLAN 20 в норме обслуживает именно R3, поэтому список GUEST-IN (логика статьи 08) создаётся в этом же блоке до подинтерфейсов и применяется сразу, чтобы у гостей не было окна без изоляции. Он запрещает не внешний адрес R1, а собственный WAN-адрес R3 (198.51.100.6). Строк про DHCP здесь нет: они нужны только там, где работает DHCP-сервер, а на R3 его нет, поэтому DHCP-запросы гостей по-прежнему обрабатывает R1 в том же VLAN. Если вы не делали статью 08, список можно не создавать, но тогда гости получат доступ в офисные сети и к управлению (см. следующий раздел). Если вы позже подключите филиал по статьям 17 и 18, обновите этот список на R3 так же, как на R1: в нём нужно закрыть гостям сеть филиала 192.168.60.0/24 и сети туннелей 10.0.100.0/30 и 10.0.101.0/30 строками deny выше permit.
enable
configure terminal
access-list 10 permit 192.168.99.0 0.0.0.255
no ip http server
no ip http secure-server
line vty 0 15
access-class 10 in
transport input ssh
exit
ip access-list extended GUEST-IN
deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
deny ip 192.168.20.0 0.0.0.255 192.168.99.0 0.0.0.255
deny ip 192.168.20.0 0.0.0.255 192.168.50.0 0.0.0.255
deny ip 192.168.20.0 0.0.0.255 10.0.12.0 0.0.0.3
deny ip 192.168.20.0 0.0.0.255 host 198.51.100.6
permit ip 192.168.20.0 0.0.0.255 any
deny ip any any
exit
interface GigabitEthernet0/0/0
description WAN to ISP2
ip address 198.51.100.6 255.255.255.252
ip nat outside
no shutdown
exit
ip route 0.0.0.0 0.0.0.0 198.51.100.5
access-list 1 permit 192.168.10.0 0.0.0.255
access-list 1 permit 192.168.20.0 0.0.0.255
access-list 1 permit 192.168.99.0 0.0.0.255
ip nat inside source list 1 interface GigabitEthernet0/0/0 overload
track 10 interface GigabitEthernet0/0/0 line-protocol
exit
interface GigabitEthernet0/0/1
description LAN trunk to SW1
no ip address
no shutdown
interface GigabitEthernet0/0/1.10
description OFFICE
encapsulation dot1Q 10
ip address 192.168.10.3 255.255.255.0
ip nat inside
standby version 2
standby 10 priority 100
standby 10 preempt delay minimum 30
standby 10 track 10 decrement 20
standby 10 name HSRP-OFFICE
standby 10 ip 192.168.10.1
interface GigabitEthernet0/0/1.20
description GUEST
encapsulation dot1Q 20
ip address 192.168.20.3 255.255.255.0
ip access-group GUEST-IN in
ip nat inside
standby version 2
standby 20 priority 110
standby 20 preempt delay minimum 30
standby 20 track 10 decrement 20
standby 20 name HSRP-GUEST
standby 20 ip 192.168.20.1
interface GigabitEthernet0/0/1.99
description MGMT
encapsulation dot1Q 99
ip address 192.168.99.3 255.255.255.0
ip nat inside
standby version 2
standby 99 priority 100
standby 99 preempt delay minimum 30
standby 99 track 10 decrement 20
standby 99 name HSRP-MGMT
standby 99 ip 192.168.99.1
end
Как проверить: show standby brief на R3 должен показать Active для группы 20 и Standby для групп 10 и 99. Если группа 20 ещё не Active, подождите окончания preempt delay (до 30 секунд) и повторите команду. Подробный вывод и расшифровка состояний — в разделе «Как проверить» ниже.
Обратите внимание на распределение приоритетов:
| Группа (VLAN) | Приоритет R1 | Приоритет R3 | Кто active в норме |
|---|---|---|---|
| 10 OFFICE | 110 | 100 | R1 |
| 20 GUEST | 100 | 110 | R3 |
| 99 MGMT | 110 | 100 | R1 |
Так работает распределение нагрузки между VLAN: у каждой группы свой active, и в нашем случае гости выходят в интернет через второго провайдера, а офис — через первого. Это не балансировка внутри одного VLAN: все клиенты одного VLAN используют один шлюз. Если вам нужно, чтобы всё шло через R1, поставьте на R3 приоритет 100 во всех группах, а на R1 110 во всех.
Ограничения и маршруты на R3
Important
Всё, что в статьях 02 и 08 настроено только на R1, на R3 нужно повторить (доступ к vty и отключение веб-интерфейса уже включены в блок выше). Без списка GUEST-IN гости, которых обслуживает R3, получают доступ в VLAN 10 и 99 и к управлению устройствами. Если списка у вас нет, временно поставьте на R3 приоритет 100 в группе 20 (а на R1 110), чтобы гостевой VLAN оставался на R1.
Как проверить: show access-lists GUEST-IN на R3 и пробный доступ с гостевого компьютера в офис и к 192.168.99.1 (должен быть закрыт, пока active именно R3). Проверьте ограничение vty: show running-config | section line vty должно показать access-class 10 in.
Теперь маршруты. Если за R1 есть сеть 192.168.50.0/24 за R2, то R3 о ней не знает: после переключения клиенты потеряют её, хотя интернет будет работать. Простой вариант для статической схемы — направить трафик к ней через реальный адрес R1 в том же VLAN:
enable
configure terminal
ip route 192.168.50.0 255.255.255.0 192.168.10.2
end
У этого варианта есть ограничения: он работает, пока R1 жив (если отказал сам R1, маршрут тоже ничего не даст), а ответный трафик пойдёт мимо R3 напрямую через R1. Кроме того, пакеты к 192.168.50.0/24 вернутся из R3 в тот же VLAN, к R1: это работает, но неэффективно (лишняя нагрузка на порт и подинтерфейс, возможны ICMP-редиректы), поэтому как постоянное решение это не годится. Если вы используете OSPF (статья 11), полноценное решение — включить R3 в ту же схему маршрутизации, но это выходит за рамки статьи. Если филиальная сеть при работе через R3 вам не нужна, так и оставьте и знайте об этом ограничении.
Сохраните конфигурацию R3 только после проверки (copy running-config startup-config). На случай ошибки на R3 держите под рукой его консоль: при необходимости reload in 30 можно запустить и на нём, как на R1.
Как проверить
Начните с краткой таблицы на R1:
enable
show standby brief
Пример вывода (выравнивание зависит от версии):
R1#show standby brief
P indicates configured to preempt.
|
Interface Grp Pri P State Active Standby Virtual IP
Gi0/0/1.10 10 110 P Active local 192.168.10.3 192.168.10.1
Gi0/0/1.20 20 100 P Standby 192.168.20.3 local 192.168.20.1
Gi0/0/1.99 99 110 P Active local 192.168.99.3 192.168.99.1
Что должно получиться: для VLAN 10 и 99 на R1 состояние Active, для VLAN 20 — Standby, в столбце P стоит признак preempt, а виртуальные IP — те самые .1. На R3 вывод зеркальный. Если состояние не меняется со временем, различайте два случая. Init означает, что HSRP на этом интерфейсе ещё не работает: проверьте, что подинтерфейс в состоянии up/up, у него есть encapsulation dot1Q и адрес, VIP входит в ту же подсеть, а на SW1 нужный VLAN разрешён на trunk. Speak, не переходящий в Active/Standby (или два Active сразу), означает, что hello от соседа не доходят: проверьте версию HSRP, ACL, trunk и ключ аутентификации (см. «Типичные ошибки»).
Подробности по одной группе:
enable
show standby GigabitEthernet0/0/1.10
Пример вывода (формат строки Track зависит от версии: на другой платформе она может выглядеть как Track object 10 state Up decrement 20):
R1#show standby GigabitEthernet0/0/1.10
GigabitEthernet0/0/1.10 - Group 10 (version 2)
State is Active
2 state changes, last state change 00:12:41
Virtual IP address is 192.168.10.1
Active virtual MAC address is 0000.0c9f.f00a
Local virtual MAC address is 0000.0c9f.f00a (v2 default)
Hello time 3 sec, hold time 10 sec
Next hello sent in 1.744 secs
Preemption enabled, delay min 30 secs
Active router is local
Standby router is 192.168.10.3, priority 100 (expires in 8.816 sec)
Priority 110 (configured 110)
Track 10 state Up decrement 20
Group name is "HSRP-OFFICE" (cfgd)
Здесь важны: version 2, виртуальный MAC в диапазоне 0000.0c9f.f..., таймеры 3 и 10 секунд, Preemption enabled, адрес standby-соседа и состояние объекта отслеживания Track 10. Состояние самого объекта можно посмотреть командой show track: интерфейс GigabitEthernet0/0/0 должен быть в состоянии Up. Команда show standby без параметров выводит все группы, а show standby brief — только сводку. Отдельной команды show standby vlan в документации мы не нашли и не используем её.
Затем проверьте клиента. С компьютера в VLAN 10 выполните ping 192.168.10.1 (в Windows с ключом -t для непрерывного пинга) и убедитесь, что адрес отвечает. После этого проверьте выход наружу, например ping 192.0.2.53. Если всё в порядке, отмените таймеры reload in командой reload cancel на каждом устройстве, где вы их запускали (R1, при желании R3 и SW1), и сохраните конфигурацию на обоих маршрутизаторах и на SW1. SSH на SW1 теперь идёт на 192.168.99.4.
Тест отказа
Проведите его в окно обслуживания, потому что клиенты на время потеряют сеть.
Отказ маршрутизатора или LAN-интерфейса. Запустите на компьютере VLAN 10 непрерывный ping 192.168.10.1 -t. С консоли R1 выключите подинтерфейс:
enable
configure terminal
interface GigabitEthernet0/0/1.10
shutdown
end
Ждите несколько секунд. Пинг на VIP должен восстановиться: теперь на него отвечает R3. Проверьте show standby brief на R3: группа 10 должна стать Active. Верните интерфейс командой no shutdown. R1 вернёт себе роль active сразу или после паузы до 30 секунд (см. preempt delay выше); ориентируйтесь на show standby brief. Обратное переключение тоже может дать короткий разрыв, поэтому делайте тест в окно обслуживания. Потери при переключении возможны в пределах hold time (по умолчанию 10 секунд), точное время зависит от платформы и версии.
Отказ WAN-канала. Выключите на R1 порт к провайдеру:
enable
configure terminal
interface GigabitEthernet0/0/0
shutdown
end
Объект track 10 перейдёт в down, приоритеты R1 во всех группах упадут на 20 (VLAN 10 и 99: 110 → 90; VLAN 20: 100 → 80). Поскольку на R3 включён preempt и его приоритет в группах 10 и 99 равен 100, R3 станет active везде. Здесь R1 жив и сам рассылает hello со сниженным приоритетом, так что hold time не ждут: переключение идёт через preempt на R3. Из-за preempt delay minimum 30 оно может занять до 30 секунд плюс интервал до очередного hello (до 3 секунд), а не несколько секунд: не пугайтесь паузы в пинге. Для быстрого теста можно временно уменьшить задержку на R3 (например, standby 10 preempt delay minimum 5 на подинтерфейсе), а потом вернуть 30. Проверка на R1:
enable
show standby GigabitEthernet0/0/1.10
Пример вывода (фрагмент):
State is Standby
Active router is 192.168.10.3, priority 100 (expires in 7.392 sec)
Standby router is local
Priority 90 (configured 110)
Track 10 state Down decrement 20
Клиенты VLAN 10 теперь выходят наружу через R3 и второго провайдера. Верните порт командой no shutdown: после восстановления линии приоритет R1 вырастет обратно, и он вернёт себе роль active сразу или после паузы до 30 секунд: следите за show standby brief.
Правило подбора decrement: значение должно быть больше разницы приоритетов, иначе после снижения приоритет R1 не окажется строго ниже, чем у R3. У нас разница 10, а decrement 20. Значение по умолчанию (10) дало бы равные приоритеты (100 и 100). Исход при равных приоритетах не стоит принимать за гарантию: руководство по настройке HSRP говорит, что standby с равным приоритетом, но большим IP-адресом не вытесняет active, а справочник команд пишет, что при равенстве выигрывает больший IP-адрес (у R3 адрес как раз больше). Поэтому задавайте decrement строго больше разницы приоритетов (у нас 20 против 10) и проверяйте тестом отказа.
Important
Слежение line-protocol реагирует на состояние линии порта. Если провайдер оставляет порт поднятым, а обрыв случился дальше по пути, line-protocol этого может не заметить, и шлюз останется на маршрутизаторе без интернета. Для такой защиты следят за доступностью удалённого узла с помощью IP SLA: в статье 21 разобрано, как создать объект track на его основе. К группе HSRP такой объект подключается той же командой standby <группа> track <номер> decrement 20 (с отдельным номером, например 2, как в статье 21, чтобы не затронуть track 10); decrement по-прежнему должен быть больше разницы приоритетов. Учтите и обратное: если недоступны оба провайдера, шлюз остаётся на том маршрутизаторе, чей приоритет после вычитания выше (при нашей схеме в VLAN 10 и 99 это R1: 90 против 80, в VLAN 20 — R3). Это нормально: HSRP защищает от отказа одного узла или канала, а не от потери всех провайдеров.
Аутентификация HSRP (необязательный шаг)
Раздел можно пропустить и вернуться к нему позже: схема работает и без аутентификации. Без аутентификации любое устройство в VLAN, пославшее HSRP-сообщения с высоким приоритетом и включённым preempt, может перехватить роль шлюза. Для двух маршрутизаторов в доверенной сети это скорее профилактика (гостевой VLAN 20 доверенным не назовёшь), но настроить её недорого. Поддерживается текстовая аутентификация (пароль идёт открытым текстом, защиты почти никакой) и MD5. Текст и MD5 в одной группе одновременно использовать нельзя.
Синтаксис MD5: standby <группа> authentication md5 key-string <ключ> или со ссылкой на цепочку ключей standby <группа> authentication md5 key-chain <имя>. Длина ключа ограничена, а источники расходятся (справочник команд называет 64 символа, руководство по настройке MD5 — 80), поэтому берите 16–32 символа. Мы используем цепочку ключей (key chain): ключ хранится отдельно от настроек интерфейсов, и его можно сменить, не трогая настройки подинтерфейсов. Учтите, что key-string в конфигурации виден администраторам и попадает в резервные копии (без дополнительных средств шифрования хранится открытым текстом; service password-encryption лишь маскирует его обратимым type 7, а о хранении общих ключей на устройстве см. также статью 20), поэтому храните копии конфигураций как секретные, а ключ делайте уникальным и не короче 16 символов.
Warning
Пока ключ включён только на одном маршрутизаторе, он не принимает hello соседа, и оба становятся active (кратковременное расхождение, split-brain). Включайте аутентификацию в окно обслуживания и выполняйте блоки на R3 и R1 один за другим, уложившись в hold time (10 секунд). При смене уже работающего ключа безопаснее менять его на active-маршрутизаторе последним (это наша рекомендация, а не указание документации): он дольше остаётся с рабочим ключом. Для первого включения порядок не принципиален, потому что до настройки соседа hello всё равно не принимаются.
Сначала создайте цепочку ключей на обоих маршрутизаторах (подставьте свой ключ). Сама по себе она ничего не меняет:
enable
configure terminal
key chain HSRP-KEYS
key 1
key-string <КЛЮЧ_HSRP>
exit
exit
end
Затем включите аутентификацию сразу во всех трёх группах: сначала на R3, потом на R1. Блок один и тот же на обоих маршрутизаторах:
enable
configure terminal
interface GigabitEthernet0/0/1.10
standby 10 authentication md5 key-chain HSRP-KEYS
interface GigabitEthernet0/0/1.20
standby 20 authentication md5 key-chain HSRP-KEYS
interface GigabitEthernet0/0/1.99
standby 99 authentication md5 key-chain HSRP-KEYS
end
Как проверить: show standby GigabitEthernet0/0/1.10 покажет строку об аутентификации, а состояния в show standby brief останутся Active/Standby. Если вместо этого оба маршрутизатора стали Active, ключи (key-string) или режим аутентификации (text или MD5) не совпадают, либо аутентификация включена пока только на одном из них; проверьте show key chain и show standby. Отладка: debug standby errors покажет сообщения вида Auth failed for Hello pkt. Не забудьте выключить отладку командой undebug all.
ACL и HSRP
Если на подинтерфейсе стоит входящий список доступа, он применяется и к hello-пакетам соседа. Правило общее: если список не пропускает UDP-порт 1985 на адрес 224.0.0.102 (для версии 1 адрес 224.0.0.2), hello блокируются, и маршрутизаторы перестают видеть друг друга.
Для GUEST-IN из статьи 08 (и для его копии на R3) ничего добавлять не нужно: hello идёт с реального адреса соседа (192.168.20.2 или .3), и этот пакет уже попадает под строку permit ip 192.168.20.0 0.0.0.255 any. Продление аренды DHCP юникастом на 192.168.20.2 проходит по той же строке, отдельных правил не требуется.
Правило нужно там, где список разрешает из своей подсети не всё подряд, а только избранное, например, пропускает только DNS и веб. Тогда добавьте разрешение выше запрещающих строк. Пример для такого списка с именем VLAN-IN на подинтерфейсе с версией 2 (имя условное):
enable
configure terminal
ip access-list extended VLAN-IN
5 permit udp 192.168.20.0 0.0.0.255 host 224.0.0.102 eq 1985
end
Номер 5 нужен, чтобы строка встала выше существующих (у них номера 10, 20 и далее). Как проверить: в show access-lists VLAN-IN счётчик этой строки растёт.
L3-коммутаторы: HSRP на SVI
Tip
Раздел можно пропустить, если шлюзами у вас служат маршрутизаторы.
На L3-коммутаторах (Catalyst 9300 и подобных) HSRP настраивается так же, но не на подинтерфейсах, а на SVI (Switch Virtual Interface, виртуальный интерфейс VLAN на коммутаторе). Для каждого VLAN создаётся interface vlan N, и в нём задаются standby version 2, standby N ip <VIP>, standby N priority и standby N preempt. Пара L3-коммутаторов заменяет пару маршрутизаторов, а общий механизм остаётся тем же. Минимальный пример для VLAN 10 на первом коммутаторе пары (адрес .2, на втором .3 и приоритет 100):
enable
configure terminal
interface vlan 10
ip address 192.168.10.2 255.255.255.0
standby version 2
standby 10 priority 110
standby 10 preempt
standby 10 ip 192.168.10.1
end
Отличия платформ сверяйте с руководством: например, для Catalyst 9300 описана только текстовая аутентификация, а слежение в разных руководствах для Catalyst 9000 описано по-разному (с интерфейсом напрямую или с номером объекта track), поэтому сверяйтесь с руководством своей модели и версии и со справкой standby <группа> track ?. Если на коммутаторе пока не включена маршрутизация, не забудьте ip routing (статья 05).
Альтернатива: VRRPv3
Tip
Раздел можно пропустить, если оборудование у вас только Cisco: для этой серии достаточно HSRP.
Если нужен открытый стандарт, на маршрутизаторах IOS XE есть VRRPv3. Включается он глобальной командой fhrp version vrrp v3, после чего версия VRRPv2 недоступна. Настройка группы идёт через address-family. Пример для VLAN 10 на R1. Это альтернатива HSRP, а не дополнение к нему: если HSRP на подинтерфейсе уже настроен, сначала уберите его (см. раздел об откате).
enable
configure terminal
fhrp version vrrp v3
interface GigabitEthernet0/0/1.10
ip address 192.168.10.2 255.255.255.0
vrrp 10 address-family ipv4
address 192.168.10.1 primary
priority 110
preempt delay minimum 30
end
Здесь приоритет по умолчанию тоже 100, а preempt включён по умолчанию. Виртуальный MAC имеет вид 0000.5E00.01xx, где xx — номер группы в hex, hello идёт на multicast 224.0.0.18. Аутентификация в VRRPv3 не поддерживается, а слежение за каналом в этом блоке мы не показываем: в прочитанных нами разделах документации оно не подтверждено. Состояние смотрите командой show vrrp detail.
Откат к одному шлюзу
Чтобы вернуться к схеме из статьи 05, сначала отключите R3 от LAN, чтобы он не владел VIP, пока адреса на R1 меняются:
enable
configure terminal
interface GigabitEthernet0/0/1
shutdown
end
Выполните это на R3. Затем на R1 (с консоли) верните прежние адреса:
enable
configure terminal
interface GigabitEthernet0/0/1.10
no standby 10 ip
ip address 192.168.10.1 255.255.255.0
interface GigabitEthernet0/0/1.20
no standby 20 ip
ip address 192.168.20.1 255.255.255.0
interface GigabitEthernet0/0/1.99
no standby 99 ip
ip address 192.168.99.1 255.255.255.0
end
Команда standby ... ip включает HSRP на интерфейсе, поэтому после её удаления остальные standby-строки (приоритет, preempt, track) ничего не делают. Их можно убрать командами с no по одной или оставить для будущего. Если вы ещё не сохраняли конфигурацию, самый простой откат — выполнить reload на R1 без сохранения, чтобы он загрузился с прежним startup-config; для этого мы и запускали reload in 30. После copy running-config startup-config такой откат уже не вернёт прежнюю схему: используйте команды выше или восстановите конфигурацию из копии, сделанной до начала. Для точного восстановления берите configure replace, а не copy flash:pre-hsrp.cfg running-config: последняя команда лишь сливает файл с текущей конфигурацией, и строки HSRP останутся. С консоли R1 (и так же на R3, если вы делали копию и на нём):
enable
configure replace flash:pre-hsrp.cfg list
Ключевое слово list покажет, какие строки будут добавлены и удалены; после ответа Y устройство применит разницу. Ограничения команды описаны в статье 12 и в статье про резервные копии. На SW1 порт Gi1/0/23 можно вернуть в запасное состояние (VLAN 999, shutdown) по статье 04, а управляющему интерфейсу вернуть прежний адрес (после того как R1 освободил .2, то есть после смены адресов на R1; делайте это с консоли SW1):
enable
configure terminal
interface vlan 99
ip address 192.168.99.2 255.255.255.0
end
Типичные ошибки
- Разные версии HSRP на двух устройствах. На одном
standby version 2, на другом версия по умолчанию (1): hello идут на разные multicast-адреса, маршрутизаторы не видят друг друга, и оба становятся active. Версия задаётся на интерфейсе, а не в группе. Сравнитеshow standbyна обоих: должно быть(version 2). - Разные виртуальные IP или номера групп. Если у
R1standby 10 ip 192.168.10.1, а уR3другой адрес или номер группы, это две независимые группы, и в сети два «шлюза». Проверьтеshow standby briefна обоих. - Нет preempt. Без него
R3не перехватит роль у живогоR1при падении WAN, аR1не вернёт её после восстановления. НаR3preempt нужен так же, как наR1. - ACL блокирует HSRP. Входящий список на подинтерфейсе без разрешения UDP 1985 на
224.0.0.102(или224.0.0.2в версии 1) отрезает hello. Признак: оба маршрутизатора в состоянииActiveлибо один застрял вSpeak. НашGUEST-INиз статьи 08 это не затрагивает (hello с реальных адресов проходит строкойpermit ip ... any), но более строгие списки затронуть могут. - VLAN не пропущен на trunk к R3. Если на
Gi1/0/23не разрешён нужный VLAN (особенно после командыswitchport trunk allowed vlanбезadd) илиR3подключён в access-порт,R3не получает hello отR1. Смотритеshow interfaces trunkнаSW1. - Слишком маленький decrement. Если
decrementменьше разницы приоритетов или равен ей, отказ WAN может не привести к переключению: нужно, чтобы приоритетR1стал строго ниже, чем уR3(исход при равенстве приоритетов не гарантирован). Проверяйте тестом отказа, а не по конфигурации.
Что дальше
- Следите не только за состоянием порта, но и за реальной доступностью интернета: Cisco с нуля 21. Мониторинг: SNMPv3, syslog, NTP, IP SLA.
- О двух провайдерах на одном маршрутизаторе, резервном маршруте и NAT рассказано в статье про два провайдера.
- Если нужно подключаться к провайдерам по BGP, переходите к Cisco с нуля 15. BGP: подключение к провайдеру.
- Подробности про подинтерфейсы и маршрутизацию между VLAN: Cisco с нуля 05. Маршрутизация между VLAN: router-on-a-stick и SVI.