L3 HSRP / VRRP — резервирование шлюза (FHRP)
В любом сегменте сети есть тихая единая точка отказа — шлюз по умолчанию. Умер один роутер — и целый этаж, офис или клиентский сегмент теряет связь с миром, хотя вся остальная сеть здорова. Протоколы семейства FHRP (First Hop Redundancy Protocol) — HSRP, VRRP, GLBP — решают эту проблему так элегантно, что пользователи не замечают аварию вовсе. Это тема CCNA, повседневность эксплуатации и источник классических ночных инцидентов — разберём до винтиков.
- Почему «прописать два шлюза на хостах» — не решение, и что такое виртуальный IP + виртуальный MAC
- HSRP: роли Active/Standby, выборы, priority и preempt, таймеры, состояния
- Что происходит в момент аварии — по шагам, вместе с ролью gratuitous ARP
- VRRP: чем отличается от HSRP и когда выбирать его (спойлер: когда не-Cisco)
- GLBP и современный контекст: анонсы с двух ядер, VXLAN anycast-gateway — обзорно
- Object tracking: как шлюз «понимает», что сам отрезан от мира, и уступает роль
- Полные конфиги, чтение
show standby, два плейбука типовых аварий
Модуль 2: хост перед отправкой «в чужую сеть» делает ARP-запрос на IP шлюза и дальше шлёт кадры на его MAC; ARP-записи живут в кэше. Gratuitous ARP — «объявление о себе без вопроса» — сегодня сыграет главную роль. Модуль 3: VLAN и «один broadcast-домен». Если это подзабылось — освежи: FHRP целиком построен на игре с ARP и MAC-адресами.
1. Проблема: шлюз — единая точка отказа
Представь сегмент: 200 рабочих станций, шлюз 10.1.10.1 — интерфейс роутера R1.
Всё чужое (интернет, серверы, другие VLAN) хосты шлют на MAC этого интерфейса. Теперь R1 умирает:
блок питания, дежурная перезагрузка, кривой апдейт — не важно. Что видит пользователь?
- Внутри сегмента всё живо: соседи пингуются, принтер печатает (L2 работает — свитчи-то целы).
- Наружу — тишина: пакеты «в чужие сети» уходят на MAC мёртвого роутера и умирают.
- Рядом стоит полностью исправный R2, подключённый к тому же сегменту… и простаивает, потому что хосты о нём не знают: у них в настройках один шлюз — 10.1.10.1.
Наивные решения не работают, и понимать почему — важнее самих протоколов:
| «Решение» | Почему плохо |
|---|---|
| Перенастроить шлюз на хостах руками | 200 машин × ночь аварии. DHCP ускорит, но lease живут часами — простой всё равно огромный |
| Прописать на хостах два шлюза | Поведение ОС непредсказуемо: Windows/Linux не умеют честно и быстро «переключать» шлюзы; часть сессий молча умирает |
| Скрипт мониторинга, который меняет DHCP | Самодельный FHRP на костылях: медленно, хрупко, никто не поддержит |
2. Виртуальный IP + виртуальный MAC — сердце FHRP
Два роутера объединяются в группу FHRP и совместно владеют парой «виртуальный IP + виртуальный MAC»:
- Виртуальный IP (VIP) — например
10.1.10.1. Именно его прописывают хостам как шлюз. Реальные адреса роутеров —10.1.10.2(R1) и10.1.10.3(R2) — хостам вообще не интересны. - Виртуальный MAC — вычисляется из номера группы. Для HSRP v1:
0000.0c07.acXX(XX — номер группы hex), для VRRP:0000.5e00.01XX. Увидел такой MAC в ARP-таблице — сразу знаешь: здесь FHRP, и даже какой именно. - В каждый момент времени ровно один роутер группы («активный») отвечает на ARP для VIP и реально пересылает трафик, пришедший на виртуальный MAC. Второй — на подхвате: слушает hello-пакеты активного и молчит.
FHRP = окно «Касса №1», за которым дежурят два кассира
Клиенты всегда подходят к окну с табличкой «Касса №1» (виртуальный IP+MAC). Кто из двух кассиров сидит за окном — клиентам всё равно и не видно. Основной кассир вышел — второй мгновенно пересаживается за то же окно, табличка не менялась, очередь ничего не заметила. Правило «кто сидит за окном» — это и есть протокол HSRP/VRRP.
3. HSRP: роли, выборы, таймеры
HSRP (Hot Standby Router Protocol) — проприетарный протокол Cisco, исторически первый и до сих пор самый распространённый в Cisco-сетях. Механика:
- Роутеры группы обмениваются hello-пакетами (multicast
224.0.0.102для v2, UDP 1985) каждые 3 секунды. Не слышно активного 10 секунд (hold) — он считается мёртвым. - Роли: Active (обслуживает VIP), Standby (первый в очереди на подхват), остальные (если роутеров больше двух) — Listen.
- Выборы по priority (0–255, по умолчанию 100): выше — главнее. При равенстве — у кого больше IP-адрес интерфейса.
- Состояния по пути к роли: Init → Learn → Listen → Speak → Standby → Active. В
show standbyты видишь именно их.
Проверяем — команда, которую ты будешь вводить на каждом дежурстве:
- P — включён preempt; State — роль этого роутера; Active/Standby — кто есть кто в группе (с точки зрения этого роутера). Здоровая пара выглядит ровно так: один Active, один Standby, VIP совпадает.
Preempt — маленькая команда, большая политика
По умолчанию HSRP не отдаёт роль обратно: если R1 (priority 110) перезагрузился и
вернулся, а Active уже R2 — R2 так и останется активным. preempt разрешает более
приоритетному «отобрать» роль. Ставить ли его — вопрос политики: с preempt сеть всегда в
«правильной» конфигурации, но восстановление R1 вызовет второе микропереключение. Обычно ставят —
и на основном, и на резервном.
4. Момент аварии — по шагам
Вот что происходит в те секунды, когда R1 умирает (и почему пользователи ничего не замечают):
0000.0c07.ac0a и начинает отвечать на ARP для 10.1.10.1.5. Object tracking: когда шлюз жив, но бесполезен
Коварный сценарий: R1 здоров, HSRP работает… но у R1 упал аплинк в сторону ядра/ интернета. Он гордо остаётся Active — и сливает весь трафик сегмента в чёрную дыру, пока полностью исправный R2 скучает. Лечение — tracking: следим за состоянием аплинка и при его падении снижаем свой priority, уступая роль:
Track умеет следить не только за интерфейсом, но и за наличием маршрута и за доступностью адреса (IP SLA + ping) — «уступай роль, если не пингуется 8.8.8.8». Это уже прод-уровень зрелости конфига.
6. VRRP: то же самое, но стандарт
VRRP (Virtual Router Redundancy Protocol) — открытый стандарт (RFC 5798), делает ровно то же и живёт на всём: Cisco, Juniper, MikroTik, Linux (keepalived — да-да, VRRP держит виртуальные IP балансировщиков и кластеров, с ним ты встретишься и в DevOps). Отличия от HSRP — любимая таблица собеседующих:
| HSRP | VRRP | |
|---|---|---|
| Происхождение | Cisco, проприетарный | открытый стандарт RFC 5798 |
| Роли | Active / Standby | Master / Backup |
| Виртуальный MAC | 0000.0c07.acXX (v1) / 0000.0c9f.fXXX (v2) | 0000.5e00.01XX |
| Multicast / протокол | 224.0.0.2 (v1) / 224.0.0.102 (v2), UDP 1985 | 224.0.0.18, IP-протокол 112 |
| Таймеры по умолчанию | hello 3 c / hold 10 c | advertisement 1 c — «из коробки» быстрее |
| Preempt по умолчанию | выключен | включён |
| VIP = реальный адрес интерфейса? | нельзя — VIP отдельный | можно (владелец адреса получает priority 255) |
Практическое правило выбора: чистая Cisco-сеть — HSRP (привычка и фичи), мультивендор или Linux — VRRP. Знать нужно оба: диагностика у них одинаковая до степени смешения.
GLBP и современный контекст — обзорно
- GLBP (Cisco) добавляет балансировку: на ARP-запросы к одному VIP отвечает разными виртуальными MAC — трафик хостов размазывается по обоим роутерам. Красиво, но встречается редко; на собеседовании достаточно знать идею.
- В современных фабриках ДЦ (VXLAN/EVPN — модуль 8) проблему решают иначе: anycast-gateway — один и тот же виртуальный IP/MAC шлюза настроен сразу на всех leaf-коммутаторах. FHRP там не нужен. А в классическом enterprise и у операторов HSRP/VRRP — по-прежнему рабочая лошадка №1.
7. Плейбук №1: «оба роутера стали Active» (split-brain)
Самая знаменитая авария FHRP. Симптомы: в логах мигают
%HSRP-5-STATECHANGE … Standby -> Active, на обоих роутерах
show standby brief показывает Active/local, в сегменте — конфликт MAC,
у части хостов связь «то есть, то нет».
show vlan brief, show interfaces trunk.show standby | include Group|Virtual|Auth.show standby brief на обоих: один Active, второй Standby, счётчики
state-change остановились. И запиши в тикет первопричину (trunk!), а не «пересобрал HSRP».8. Плейбук №2: «переключение было, но связь падала на минуты»
standby 10 timers msec 250 msec 750 (согласованно на обоих!).clear mac address-table dynamic vlan 10.9. Мини-лаба
arp -a в офисной/учебной сети и посмотри на MAC шлюза.
Начинается с 00-00-0c-07-ac — здесь HSRP; 00-00-5e-00-01 — VRRP.
Последний байт — номер группы. Ты только что «прочитал» дизайн сети из одного MAC-адреса.show standby brief. Запусти непрерывный пинг с ПК на 8.8.8.8 (или loopback за
роутерами) и выключи активный роутер. Посчитай потерянные пинги. Затем ужми
таймеры (timers msec 250 msec 750) и повтори — почувствуй разницу.apt install keepalived + конфиг из раздела 6.
Убей MASTER — посмотри, как VIP переезжает (ip addr на BACKUP). Это ровно то, что
делает пара балансировщиков в проде — ты уже умеешь.10. Частые ошибки джунов
| Ошибка | Последствие | Как правильно |
|---|---|---|
| VIP прописан как адрес интерфейса (HSRP) | конфликт адресов, группа не собирается | VIP — отдельный адрес; реальные IP роутеров — свои |
| Разные версии HSRP на паре (v1/v2) | не слышат друг друга → оба Active | standby version 2 на обоих |
| Забыт preempt на «главном» | после ремонта основной не возвращает роль — сеть живёт «наоборот» месяцами незаметно | решай политику осознанно; обычно preempt на обоих |
| Нет track на аплинки | Active с мёртвым аплинком тянет трафик в дыру | track + decrement больше разницы priority |
| Таймеры ужаты только на одном роутере | флаппинг ролей | таймеры и аутентификация — зеркально на всей группе |
| Не смотрит на MAC 0000.0c07.ac… при диагностике | час ищет «чей это странный MAC» | выучи виртуальные OUI наизусть — это подпись FHRP |
11. Словарик модуля
| Термин | По-английски | Смысл в одну строку |
|---|---|---|
| FHRP | First Hop Redundancy Protocol | семейство протоколов резервирования шлюза (HSRP/VRRP/GLBP) |
| Виртуальный IP | VIP, virtual IP | адрес шлюза, которым владеет группа, а не конкретный роутер |
| Виртуальный MAC | virtual MAC | MAC группы (0000.0c07.acXX / 0000.5e00.01XX) — переезжает при failover |
| Active / Standby | — | роли HSRP: обслуживающий и подхватывающий |
| Master / Backup | — | те же роли в терминах VRRP |
| Priority / preempt | — | кто главнее / можно ли отобрать роль обратно |
| Hello / hold | — | пульс группы / сколько молчания = смерть |
| Tracking | object tracking | снижение priority при падении аплинка/маршрута/пинга |
| Split-brain | split brain | оба стали Active — симптом разрыва L2 между ними |
| keepalived | keepalived | VRRP-демон Linux — те же концепции в мире DevOps |
| Anycast-gateway | anycast gateway | «шлюз везде» в VXLAN/EVPN-фабриках — наследник FHRP в ДЦ |
12. Задачи — реши сам
Задача 1. В ARP-таблице офисного ПК шлюз 10.1.10.1 виден как 00-00-5e-00-01-0a. Что ты можешь сказать о сети, не заходя ни на одну железку?
OUI 0000.5e00.01 — это VRRP, последний байт 0a = группа
10. Значит шлюз зарезервирован минимум двумя устройствами (вероятно, не только Cisco —
иначе чаще ставят HSRP), и при отказе одного из них ПК ничего не заметит.
Задача 2. R1: priority 110, preempt. R2: priority 100, preempt. R1 перезагрузился на 5 минут и вернулся. Кто Active через минуту после возвращения и почему? А если бы preempt не было ни у кого?
С preempt: R1 вернулся, увидел Active с priority 100 < 110 — отобрал роль, Active снова R1. Без preempt: роль остаётся у R2 навсегда (до его аварии) — сеть работает, но «наоборот», и однажды это удивит дежурного.
Задача 3. После failover пинги с хостов пошли через 40 секунд, хотя hold-таймер 10 с. Логи чистые. Куда смотреть?
На коммутаторы: роль переключилась за 10 с, но MAC-таблицы свитчей не переучились
(GARP нового Active потерялся или отфильтрован) — кадры на виртуальный MAC летели в старый порт до
истечения aging. Проверить прохождение GARP; при инциденте — clear mac address-table dynamic.
Задача 4. У R1 (Active) упал единственный аплинк в ядро. HSRP-группа в норме: R1 Active, R2 Standby. Пользователи без связи. Почему «в норме» — это и есть проблема, и что добавить в конфиг?
HSRP следит только за собой на этом интерфейсе, аплинк ему безразличен: R1 честно жив
и держит роль, сливая трафик в никуда. Добавить object tracking:
track 1 interface Gi0/1 line-protocol + standby 10 track 1 decrement 20 —
при падении аплинка priority упадёт ниже R2, и роль уедет к нему.
Задача 5. На обоих роутерах show standby brief показывает State = Active. Перечисли три самые вероятные причины в порядке проверки.
1) Разрыв L2 между ними — VLAN не разрешён на trunk / порт down (проверяется пингом реальных адресов). 2) Несовпадение версии HSRP (v1 vs v2 — разные multicast-адреса) или номера группы/VIP/аутентификации. 3) ACL или storm-control, режущие hello-multicast. Это split-brain: чинится восстановлением связности, а не перезапуском HSRP.
Задача 6. DevOps-коллега говорит: «у нас два балансировщика с одним виртуальным IP на keepalived». Объясни ему в одном абзаце, что у него за технология и что будет при падении мастера.
Это VRRP — тот же протокол резервирования шлюза, только на Linux: мастер держит VIP на интерфейсе и шлёт advertisement каждую секунду. Умрёт мастер — backup за ~3 секунды объявит себя новым мастером, поднимет VIP у себя и разошлёт gratuitous ARP; клиенты продолжат ходить на тот же адрес, не заметив. Все грабли те же: split-brain при разрыве связности и необходимость согласованных приоритетов.
Поздравляю — ты закрыл последний крупный блок ядра трека. Дальше два направления: закрепить всё методологией troubleshooting и packet capture (если прошёл модули не по порядку) и собрать первую серьёзную лабораторию — кампус с VLAN, OSPF и парой HSRP-шлюзов в Packet Tracer/containerlab. А на странице профессии «Инженер СПД» смотри следующую ступень — глубину и мост в NetDevOps.