Cisco с нуля 11. OSPF для начинающих
Note
Команды сверены с официальной документацией Cisco (руководства по настройке Cisco IOS XE 17.x для Catalyst 9000 и маршрутизаторов ISR; отличия классической IOS 15.x отмечены в тексте). Перед работой на боевом оборудовании проверьте их на тестовом стенде или сделайте резервную копию.
В предыдущих статьях мы прописывали маршруты вручную. Для двух маршрутизаторов это нормально, но стоит добавить третий или второй канал связи, и ручные записи превращаются в источник ошибок. В этой статье мы заменим статику на динамический протокол OSPF: R1 и R2 сами найдут друг друга, обменяются сетями, а R2 заодно получит от R1 маршрут в интернет. В конце вы будете уметь проверить, что соседство установилось, и разобрать типичные причины, почему оно не поднимается.
Для двух маршрутизаторов со статикой OSPF не обязателен: он окупается, когда сетей и каналов становится больше. Ядро статьи — router ID, passive-interface, ip ospf 1 area 0, default-information originate и проверка командами show ip ospf neighbor и show ip route ospf; разделы, помеченные «можно пропустить», при первом чтении можно оставить на потом.
Что понадобится
Для OSPF нужен второй маршрутизатор (или стенд из статьи про статическую маршрутизацию): на одном устройстве соседства не получится. Если R2 у вас нет, читайте статью обзорно и команды не выполняйте.
- Два маршрутизатора
R1иR2, соединённые между собой сетью10.0.12.0/30(R1—10.0.12.1,R2—10.0.12.2). Если с масками подсетей возникают трудности, держите под рукой таблицу масок подсети. - На
R2уже выполнена базовая настройка из статьи про первичную настройку: имя,enable secret, пользователь и SSH с ограничением на линияхvty. - За
R1настроены VLAN 10, 20 и 99 с адресами шлюзов.1(см. маршрутизацию между VLAN);R1выходит к провайдеру черезGigabitEthernet0/0/0и имеет статический маршрут по умолчанию на203.0.113.1. - За
R2— сеть192.168.50.0/24, шлюз192.168.50.1на самомR2. - Доступ к обоим маршрутизаторам (лучше консольный: см. первую статью серии).
Порты и адреса стыка заданы в статье про статическую маршрутизацию; таблица ниже — напоминание. Имена на вашей модели могут отличаться, проверьте show ip interface brief: на классической IOS 15.x порты называются иначе (например, GigabitEthernet0/1.10 вместо GigabitEthernet0/0/1.10), подставляйте свои имена. Если у R1 нет порта GigabitEthernet0/0/2 (на моделях с двумя встроенными портами нужен модуль расширения), используйте любой свободный порт и подставляйте его имя в команды ниже.
| Устройство | Интерфейс | Назначение | Адрес |
|---|---|---|---|
R1 |
GigabitEthernet0/0/2 |
стык к R2 |
10.0.12.1/30 |
R1 |
GigabitEthernet0/0/1.10, .20, .99 |
LAN (VLAN 10/20/99) | 192.168.10.1, 192.168.20.1, 192.168.99.1 (/24) |
R1 |
GigabitEthernet0/0/0 |
провайдер (WAN) | 203.0.113.2/30 |
R2 |
GigabitEthernet0/0/0 |
стык к R1 |
10.0.12.2/30 |
R2 |
GigabitEthernet0/0/1 |
LAN | 192.168.50.1/24 |
Адреса на интерфейсах должны быть уже настроены (см. интерфейсы и IP-адресацию); эта статья добавляет только OSPF.
Зачем нужна динамическая маршрутизация
Статический маршрут — это ваше обещание маршрутизатору: «сеть X достижима через соседа Y». Маршрутизатор не проверяет, правда ли это. Динамический протокол даёт два преимущества:
- Масштаб. Новая сеть за любым маршрутизатором автоматически становится известна всем остальным. Не нужно заходить на каждое устройство и дописывать строки.
- Автоматическое переключение. Если канал или сосед пропал, протокол заметит это и уберёт ставшие недостижимыми маршруты; при наличии запасного пути трафик пойдёт по нему сам.
Недостаток — небольшая нагрузка на устройство и необходимость понимать, как протокол работает. Есть несколько динамических протоколов: RIP (простой, но устаревший), EIGRP (разработан Cisco, его мы здесь не разбираем), BGP (протокол интернета и больших сетей, отдельная большая тема). OSPF — открытый стандарт, понятный не только на оборудовании Cisco, и самый распространённый выбор для внутренней сети организации.
Как работает OSPF в общих чертах
OSPF (Open Shortest Path First) — протокол состояния каналов (link-state) для внутренней маршрутизации (IGP). Работа идёт в несколько шагов:
- Знакомство с соседями. Маршрутизаторы на каждом OSPF-интерфейсе периодически рассылают служебные пакеты Hello через multicast-адрес (для Hello это
224.0.0.5). Увидев Hello от соседа с подходящими параметрами, маршрутизатор устанавливает с ним соседство. - Обмен описаниями. Каждый маршрутизатор описывает свои интерфейсы и подключённые сети в объявлениях состояния каналов — LSA (Link-State Advertisement) — и передаёт их соседям. Набор всех LSA образует базу данных состояния каналов (LSDB). У всех маршрутизаторов одной области эта база в итоге одинакова.
- Расчёт маршрутов. По базе каждый маршрутизатор алгоритмом SPF (Shortest Path First) сам строит дерево кратчайших путей до всех сетей и записывает лучшие маршруты в таблицу маршрутизации. В таблице они помечены буквой
O, а административная дистанция OSPF равна 110 (у статического маршрута она 1; как это влияет на выбор маршрута, разобрано в предупреждении в разделе «Включаем OSPF»; префиксы и дистанции объяснены в статье про статическую маршрутизацию).
Cost и выбор пути
«Длина» пути в OSPF называется cost (стоимость). Для интерфейса она по умолчанию равна эталонной пропускной способности, делённой на пропускную способность интерфейса. Эталон по умолчанию — 100 Мбит/с. Стоимость пути — сумма стоимостей исходящих интерфейсов по дороге до сети; выбирается путь с наименьшей суммой.
Area 0
Сеть OSPF делится на области (area). Все области должны быть связаны с магистральной областью — Area 0 (backbone). В нашей маленькой сети достаточно одной области, и это именно Area 0. Деление на несколько областей нужно в больших сетях, на первом этапе эту тему можно пропустить.
Router ID
Каждый маршрутизатор OSPF идентифицируется router ID — числом в формате IPv4-адреса. Он не обязан быть реальным адресом интерфейса, но должен быть уникальным в сети. Если задать его вручную, он не будет меняться при изменении адресов. Если не задавать, маршрутизатор выберет его сам (в первую очередь адрес loopback-интерфейса, иначе наибольший IP-адрес среди интерфейсов), и смена такого адреса приведёт к пересчёту. Мы зададим router ID вручную, взяв адреса стыка: 10.0.12.1 для R1 и 10.0.12.2 для R2. Если вы создавали Loopback0 для примера в статье про интерфейсы, в этой серии он как router ID не используется (на практике loopback для этого подходит хорошо, так как не падает вместе с портами).
DR, BDR и тип сети (можно пропустить)
Если пропускаете: достаточно знать, что на стыке двух маршрутизаторов выборы DR/BDR не нужны, и поэтому в настройке ниже есть команда ip ospf network point-to-point.
На сегментах типа Ethernet OSPF по умолчанию считает сеть broadcast («широковещательной») — к ней могут быть подключены много маршрутизаторов. Чтобы они не устанавливали полное соседство друг с другом попарно, выбираются DR (Designated Router) и BDR (Backup Designated Router): остальные маршрутизаторы сегмента полностью синхронизируются только с ними и остаются в состоянии 2WAY между собой (такие маршрутизаторы называются DROTHER, и полного соседства друг с другом они не образуют). В выводе show ip ospf neighbor это видно как FULL/DR, FULL/BDR, FULL/DROTHER.
Но наш стык 10.0.12.0/30 — это ровно два маршрутизатора. Выборы DR/BDR там не нужны. На интерфейсе стыка принято задавать тип сети point-to-point командой ip ospf network point-to-point: DR/BDR не выбираются, соседство быстрее и проще читается. Тип сети должен совпадать на обоих концах, поэтому команду вводят на обоих маршрутизаторах. Это рекомендуемая практика для стыка двух маршрутизаторов, а не обязательное требование протокола.
Состояния соседа (можно пропустить)
Соседство проходит несколько стадий: Down → Init → 2-Way → Exstart → Exchange → Loading → Full. Нормальное устоявшееся состояние — FULL (на broadcast-сегменте между двумя маршрутизаторами DROTHER допустимо 2WAY). Если сосед завис в Init, Exstart или Exchange — это сигнал искать проблему (ниже).
Включаем OSPF
Warning
Если на R1 и R2 после статьи про статическую маршрутизацию остались статические маршруты друг к другу, часть из них перекроет маршруты, полученные по OSPF. Статика (дистанция 1) побеждает OSPF (дистанция 110) только для того же префикса и той же маски: на R1 это 192.168.50.0/24 через 10.0.12.2, и в таблице останется S, хотя соседство и база OSPF будут в порядке. На R2 суммарный 192.168.0.0/16 через 10.0.12.1 не мешает: OSPF-маршруты /24 длиннее и выбираются раньше. Но если на R2 есть статический default через R1, он перекроет default, полученный по OSPF. Не удаляйте статику до включения OSPF. Сначала настройте протокол и убедитесь, что соседство в состоянии FULL, и только потом убирайте статику по одной записи (раздел «Убираем статические маршруты» ниже). Так связь между сетями не пропадёт, пока OSPF не готов.
Прежде чем начать, убедитесь, что стык работает: с R1 должен проходить ping 10.0.12.2. Статический маршрут по умолчанию на R1 к провайдеру (203.0.113.1) оставьте при любых условиях: именно его мы будем распространять.
Два способа включить интерфейс в OSPF
Чтобы интерфейс участвовал в OSPF, его нужно привязать к области. Для этого есть два способа.
Способ A — командой network в режиме процесса OSPF. Вы пишете адрес и wildcard-маску (это инвертированная маска подсети: для /24 — 0.0.0.255, для /30 — 0.0.0.3). Любой интерфейс, чей адрес попадает в этот диапазон, включается в OSPF. Например, в режиме router ospf 1 строка network 10.0.12.0 0.0.0.3 area 0 включает интерфейс стыка, а network 192.168.10.0 0.0.0.255 area 0 — интерфейс с адресом из сети VLAN 10.
Это классический способ, он встречается в большинстве старых конфигураций и работает на любой версии. Минус в том, что включение интерфейса определяется «маской-фильтром» в другом месте конфигурации: легко включить лишнее или забыть нужное. Для сравнения, как выглядит способ A для R1 (это альтернатива способу B: не вводите оба варианта подряд):
enable
configure terminal
router ospf 1
router-id 10.0.12.1
network 10.0.12.0 0.0.0.3 area 0
network 192.168.10.0 0.0.0.255 area 0
network 192.168.20.0 0.0.0.255 area 0
network 192.168.99.0 0.0.0.255 area 0
end
Способ B — командой на самом интерфейсе. В режиме интерфейса пишется ip ospf <номер процесса> area <область>, например ip ospf 1 area 0 на GigabitEthernet0/0/2. Здесь всё видно прямо в конфигурации интерфейса, нет масок и «случайных» совпадений. Руководство по настройке OSPF для IOS XE 17.x рекомендует именно этот способ для OSPFv2, поэтому в статье мы используем его. Команда есть и на классической IOS 15.x. Лучше не смешивать способы на одном устройстве: если настройки пересекаются, команда на интерфейсе имеет приоритет над network, и конфигурацию труднее читать.
Номер процесса (1) имеет только локальное значение: у R1 и R2 он может и не совпадать. Для простоты используем 1 на обоих.
Настройка R1
Теперь настроим R1 полностью. Здесь сразу несколько решений:
- задаём router ID вручную;
- делаем пассивными все интерфейсы командой
passive-interface defaultи затем разрешаем OSPF-общение только на стыке (no passive-interface). Пассивный интерфейс не отправляет и не принимает OSPF-пакеты, но его сеть всё равно объявляется в OSPF. Это то, что нужно для LAN: сети офиса попадут в таблицуR2, а посторонние устройства в офисной сети не смогут установить с вашим маршрутизатором соседство и передать в OSPF чужие маршруты. Интерфейс провайдераGigabitEthernet0/0/0в OSPF мы вообще не включаем, и благодаряpassive-interface defaultон дополнительно защищён; - включаем в OSPF подинтерфейсы LAN (
GigabitEthernet0/0/1.10,.20,.99) и стык; - на стыке задаём тип сети
point-to-point; - распространяем маршрут по умолчанию командой
default-information originate.
Important
Если вместо подинтерфейсов у вас используются SVI (Switch Virtual Interface, виртуальные интерфейсы VLAN на устройстве третьего уровня; см. статью про маршрутизацию между VLAN), то есть interface Vlan10 и т. д., команда ip ospf 1 area 0 вводится на них. Отдельно объявлять такие интерфейсы пассивными не нужно: их закрывает passive-interface default.
enable
configure terminal
router ospf 1
router-id 10.0.12.1
passive-interface default
no passive-interface GigabitEthernet0/0/2
default-information originate
exit
interface GigabitEthernet0/0/2
description Link to R2
ip ospf network point-to-point
ip ospf 1 area 0
exit
interface GigabitEthernet0/0/1.10
ip ospf 1 area 0
exit
interface GigabitEthernet0/0/1.20
ip ospf 1 area 0
exit
interface GigabitEthernet0/0/1.99
ip ospf 1 area 0
end
Конфигурацию пока не сохраняем: сначала убедимся, что всё работает (см. «Как проверить»). Так при неудаче можно вернуться к прежнему состоянию перезагрузкой, а не закрепить ошибку.
На этом этапе доступ к R1 по LAN не пострадает: OSPF не меняет адреса и не трогает существующие маршруты. Пока R2 не настроен, соседей у R1 нет, и новых маршрутов он не получит.
Если вы вводите router-id на процессе, который уже работает, новый router ID вступит в силу только после clear ip ospf process или перезагрузки. Это сбросит соседства на время пересчёта, поэтому на боевом оборудовании делайте это в согласованное окно.
Про default-information originate. По умолчанию команда отключена. Без ключа always маршрутизатор объявляет маршрут по умолчанию, только если такой маршрут есть у него самого. У R1 он есть (статический на провайдера), так что этого достаточно. Ключ always заставил бы R1 объявлять default даже при потере связи с провайдером, и R2 продолжал бы слать интернет-трафик в никуда, поэтому новичкам always не нужен. Сам R1 после этой команды становится граничным маршрутизатором (ASBR): он «приносит» в OSPF внешний маршрут, и в таблице R2 он будет с пометкой E2.
Если статический default на R1 ещё не задан, добавьте его (как в статье про DHCP и NAT и статье про статическую маршрутизацию):
enable
configure terminal
ip route 0.0.0.0 0.0.0.0 203.0.113.1
end
Настройка R2
enable
configure terminal
router ospf 1
router-id 10.0.12.2
passive-interface default
no passive-interface GigabitEthernet0/0/0
exit
interface GigabitEthernet0/0/0
description Link to R1
ip ospf network point-to-point
ip ospf 1 area 0
exit
interface GigabitEthernet0/0/1
description LAN 192.168.50.0/24
ip ospf 1 area 0
end
Конфигурацию на R2 тоже пока не сохраняем.
Tip
Команда passive-interface default делает пассивными и все новые интерфейсы, которые вы добавите потом. Если после её появления вы подключаете ещё один маршрутизатор, не забудьте no passive-interface на нужном порту. Это одна из самых частых причин «соседство не поднимается».
Как проверить
Подождите 10-20 секунд и проверьте, что соседство установилось. На R1:
show ip ospf neighbor
Пример вывода (значения Dead Time и Pri зависят от версии):
Neighbor ID Pri State Dead Time Address Interface
10.0.12.2 0 FULL/ - 00:00:36 10.0.12.2 GigabitEthernet0/0/2
В столбце State должно быть FULL. Прочерк после слэша означает, что на стыке point-to-point роли DR/BDR не выбираются. Neighbor ID — router ID соседа, Address — его адрес на стыке, а Dead Time — сколько времени осталось до объявления соседа недоступным, если от него не придёт очередной Hello (по умолчанию 40 секунд). Это обратный отсчёт: с каждым пришедшим Hello значение возвращается к 40, а дойдя до 0, сосед признаётся недоступным.
Какие интерфейсы участвуют в OSPF:
show ip ospf interface brief
Пример вывода:
Interface PID Area IP Address/Mask Cost State Nbrs F/C
Gi0/0/2 1 0 10.0.12.1/30 1 P2P 1/1
Gi0/0/1.10 1 0 192.168.10.1/24 1 DR 0/0
Gi0/0/1.20 1 0 192.168.20.1/24 1 DR 0/0
Gi0/0/1.99 1 0 192.168.99.1/24 1 DR 0/0
Столбец Nbrs F/C показывает число полностью синхронизированных соседей из общего числа. Стык должен показать 1/1, а у LAN-интерфейсов 0/0: они пассивны, соседей там быть не должно. Состояние P2P подтверждает тип сети point-to-point.
Затем посмотрите настройки процесса:
show ip protocols
Пример вывода (формат зависит от версии IOS, ниже — сокращённый фрагмент):
Routing Protocol is "ospf 1"
Router ID 10.0.12.1
It is an autonomous system boundary router
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Maximum path: 4
Routing on Interfaces Configured Explicitly (Area 0):
GigabitEthernet0/0/1.99
GigabitEthernet0/0/1.20
GigabitEthernet0/0/1.10
GigabitEthernet0/0/2
Passive Interface(s):
GigabitEthernet0/0/0
GigabitEthernet0/0/1
GigabitEthernet0/0/1.10
GigabitEthernet0/0/1.20
GigabitEthernet0/0/1.99
Routing Information Sources:
Gateway Distance Last Update
10.0.12.2 110 00:02:14
Distance: (default is 110)
Здесь важно увидеть router ID, список интерфейсов в OSPF, список пассивных интерфейсов и источник маршрутов 10.0.12.2. Физические GigabitEthernet0/0/0 и GigabitEthernet0/0/1 оказались в списке пассивных только из-за passive-interface default: в OSPF они не участвуют (провайдерский порт мы не включали, а 0/0/1 служит лишь «родителем» подинтерфейсов). При способе A вместо блока «Routing on Interfaces Configured Explicitly» будет блок Routing for Networks: со строками из ваших команд network.
Теперь самое интересное: что R2 узнал от R1. На R2:
show ip route ospf
Пример вывода (так таблица выглядит, когда статика уже убрана; коды и метрики могут отличаться):
Gateway of last resort is 10.0.12.1 to network 0.0.0.0
O*E2 0.0.0.0/0 [110/1] via 10.0.12.1, 00:03:10, GigabitEthernet0/0/0
O 192.168.10.0/24 [110/2] via 10.0.12.1, 00:04:02, GigabitEthernet0/0/0
O 192.168.20.0/24 [110/2] via 10.0.12.1, 00:04:02, GigabitEthernet0/0/0
O 192.168.99.0/24 [110/2] via 10.0.12.1, 00:04:02, GigabitEthernet0/0/0
Расшифровка: O — маршрут получен по OSPF внутри области; E2 — внешний маршрут типа 2 (так выглядит маршрут по умолчанию, пришедший от ASBR); * — кандидат в шлюзы по умолчанию. В скобках [110/2] — административная дистанция и метрика (cost). Метрика внешнего маршрута зависит от версии IOS и настроек (metric в default-information originate, default-metric), поэтому число в вашем выводе может отличаться от примера; важно, что код O*E2 и шлюз 10.0.12.1. Аналогично на R1 в таблице должна появиться сеть 192.168.50.0/24. Проверьте также, что клиент в 192.168.50.0/24 пингует 192.168.10.1.
Если статические маршруты ещё не убраны, картина будет такой. На R1 вместо O у 192.168.50.0/24 останется код S. На R2 записи 192.168.10.0/24, 192.168.20.0/24 и 192.168.99.0/24 всё равно появятся с кодом O, а default O*E2 появится, если у R2 нет собственного статического default. Статический 192.168.0.0/16 на R2 останется в таблице рядом с ними (команда show ip route static) и будет маскировать несуществующие сети из этого диапазона. Это ожидаемо (причины описаны в предупреждении выше); переходите к следующему подразделу.
Убираем статические маршруты
Когда show ip ospf neighbor показывает FULL на обоих маршрутизаторах и show ip ospf database (см. подраздел про базу данных ниже) содержит LSA от обоих (10.0.12.1 и 10.0.12.2), можно убирать статику, которая теперь не нужна. Перед этим сохраните настройки OSPF вместе со статикой на обоих маршрутизаторах (copy running-config startup-config): это ваша точка отката.
Warning
Статические маршруты могут быть единственным путём, по которому вы управляете R2 или сетью за ним. Удалив запись, вы можете потерять связь, пока OSPF не добавит свою. Работайте через консоль. Если консоли нет, перед началом выполните reload in 10 в режиме R2# (или R1#) на том устройстве, где удаляете: через 10 минут оно перезагрузится и вернётся к сохранённой конфигурации, в которой статика ещё есть; отмена — reload cancel. Если устройство спросит System configuration has been modified. Save? [yes/no], ответьте no, затем подтвердите перезагрузку клавишей Enter (подробнее — в первой статье серии). Не сохраняйте конфигурацию после удаления, пока не убедитесь, что связь работает, иначе откат через reload ничего не вернёт.
Сначала посмотрите, что есть: show running-config | include ip route. На R2 удалите маршрут(ы) к сетям за R1, в нашей схеме это 192.168.0.0/16 через 10.0.12.1 (и статический маршрут по умолчанию через R1, если вы его добавляли: иначе он перекроет default, полученный по OSPF; для него команда будет no ip route 0.0.0.0 0.0.0.0 10.0.12.1).
enable
configure terminal
no ip route 192.168.0.0 255.255.0.0 10.0.12.1
end
show ip route
ping 192.168.10.1 source GigabitEthernet0/0/1
На R1 удалите маршрут к сети за R2. Статический default на провайдера не трогайте. Суммарный маршрут 192.168.0.0/16 на Null0, если вы создавали его в статье про статическую маршрутизацию, тоже оставьте: он не мешает маршруту к 192.168.50.0/24, полученному по OSPF: префикс /24 длиннее, чем /16.
enable
configure terminal
no ip route 192.168.50.0 255.255.255.0 10.0.12.2
end
show ip route
ping 192.168.50.1 source GigabitEthernet0/0/1.10
После каждого удаления проверяйте таблицу: нужная сеть должна остаться, но уже с кодом O. Если связи нет, верните запись (ip route ... с теми же параметрами) и вернитесь к проверке соседства.
Если всё работает на обоих маршрутизаторах, сохраните конфигурацию на каждом из них и отмените запланированную перезагрузку, если запускали её:
enable
reload cancel
copy running-config startup-config
Если reload in не использовался, reload cancel выдаст сообщение об отсутствии запланированной перезагрузки, это безвредно.
Выход клиентов R2 в интернет
Чтобы клиенты 192.168.50.0/24 выходили в интернет, одного маршрута по умолчанию мало. По схеме из статьи про DHCP и NAT трансляция на R1 разрешена только для сетей из ACL 1 (192.168.10.0/24, 192.168.20.0/24 и 192.168.99.0/24) и работает на интерфейсах, помеченных ip nat inside (подинтерфейсы VLAN 10, 20 и 99). Трафик из 192.168.50.0/24 приходит на стык GigabitEthernet0/0/2, который под NAT не размечен, поэтому уйдёт в интернет без трансляции, а такие пакеты провайдер отбросит. Добавьте сеть в ACL и разметьте стык:
enable
configure terminal
access-list 1 permit 192.168.50.0 0.0.0.255
interface GigabitEthernet0/0/2
ip nat inside
end
Проверьте с клиента из 192.168.50.0/24 доступ к внешнему адресу, например ping 192.0.2.53, а на R1 — show ip nat translations. Если вы используете списки доступа из статьи про ACL, убедитесь, что они не режут трафик из 192.168.50.0/24 и пакеты OSPF на стыке.
Когда всё работает, сохраните конфигурацию на R1: copy running-config startup-config.
База данных OSPF кратко (можно пропустить)
Если интересно увидеть «сырьё», из которого собираются маршруты, выполните:
show ip ospf database
Пример вывода (идентификаторы и счётчики вымышленные):
OSPF Router with ID (10.0.12.1) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
10.0.12.1 10.0.12.1 412 0x80000006 0x00A1B2 5
10.0.12.2 10.0.12.2 398 0x80000004 0x00C3D4 3
Type-5 AS External Link States
Link ID ADV Router Age Seq# Checksum Tag
0.0.0.0 10.0.12.1 380 0x80000001 0x00E5F6 1
Router Link States — это LSA типа 1: по одному от каждого маршрутизатора области. Type-5 AS External — внешние маршруты, в нашем случае default от R1. В сетях с несколькими маршрутизаторами на одном Ethernet-сегменте здесь появляются и Net Link States (LSA типа 2 от DR), у нас же сегмент point-to-point, и такого раздела нет.
Cost: auto-cost reference-bandwidth
Эталонная пропускная способность по умолчанию — 100 Мбит/с. Из-за этого интерфейсы 100 Мбит/с, 1 Гбит/с и 10 Гбит/с получают одинаковую стоимость 1 (меньше единицы cost не бывает), и OSPF не отличает быстрый канал от медленного. На маленькой сети с единственным путём это не мешает, но как только появляется второй путь, выбор может оказаться неверным.
Это настраивается в режиме процесса:
enable
configure terminal
router ospf 1
auto-cost reference-bandwidth 1000
end
Значение задаётся в Мбит/с (допустимо от 1 до 4294967). Если самая быстрая линия — гигабитная, подойдёт 1000; при наличии 10G берите больше (например, 10000 и выше). Команду нужно вводить на всех маршрутизаторах OSPF-сети: метрики должны считаться одинаково, иначе пути сравниваются в разных единицах. Если нужно один раз задать стоимость конкретного канала вручную, используется интерфейсная команда ip ospf cost <1-65535>; она перекрывает значение, рассчитанное автоматически.
Аутентификация OSPF (можно пропустить)
По умолчанию OSPF не проверяет, кто присылает ему пакеты: любое устройство в сегменте, которое «заговорит» на OSPF, может стать соседом. Для защиты используют аутентификацию. Классический вариант — пакеты подписываются хэшем MD5 с общим ключом. Включается на интерфейсе, и на обоих концах ключ должен совпадать.
Caution
Если включить аутентификацию только на одном маршрутизаторе, соседство разорвётся примерно через 40 секунд (время Dead). Если вы управляете R2 через сеть, которая идёт по этому стыку, вы потеряете доступ. Подготовьте команды для обоих устройств заранее и работайте через консоль либо запланируйте возврат через reload in 10, как описано выше в разделе про удаление статики (на вопрос System configuration has been modified. Save? [yes/no] отвечайте no). Не сохраняйте конфигурацию, пока соседство не вернулось в состояние FULL.
<КЛЮЧ> ниже — заглушка, подставьте свой общий ключ. На R1:
enable
configure terminal
interface GigabitEthernet0/0/2
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 <КЛЮЧ>
end
На R2 то же самое на его стыковом интерфейсе:
enable
configure terminal
interface GigabitEthernet0/0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 <КЛЮЧ>
end
Номер ключа (1) и сам ключ должны совпадать на соседях. Длина ключа для MD5 — до 16 символов. Включите service password-encryption: он скроет ключ OSPF (как и пароли линий) в конфигурации от случайного взгляда. Это шифрование type 7, оно обратимо, поэтому копии конфигураций всё равно храните как секретные. MD5 сегодня считается слабым алгоритмом: в новых версиях IOS XE есть более современный вариант (связка ключей key-chain и подпись HMAC-SHA, команда ip ospf authentication key-chain); его синтаксис зависит от версии, поэтому смотрите руководство для вашего образа.
Если соседство не поднимается
Сначала смотрите show ip ospf neighbor. Нет строки вообще, Init, Exstart или Exchange — значит, что-то не так. Главные подозреваемые перечислены ниже. Для проверки большинства пунктов хватает show ip ospf interface на обеих сторонах и сравнения вывода.
| Причина | Как выглядит и как проверить |
|---|---|
| Не совпадают Hello- или Dead-интервалы | Соседа нет. Hello по умолчанию 10 с, Dead 40 с. show ip ospf interface, сравните строку Timer intervals configured |
| Разные номера областей (area) | Соседа нет. show ip ospf interface, сравните Area |
| Разные подсети или маски на стыке | На broadcast-сегменте соседа нет. На point-to-point (как наш стык) маска в Hello не проверяется: соседство может подняться, а связь между адресами не работать. Сверьте адреса и маски на обоих концах: show ip interface brief, show interface |
Разные типы сети (broadcast против point-to-point) |
Тип сети в Hello не передаётся, поэтому сосед может дойти до FULL, но маршруты окажутся неверными или не появятся (на broadcast-конце выбирается DR, на p2p-конце нет). Сравните Network Type в show ip ospf interface на обоих концах |
| Разный MTU | Сосед «залипает» в EXSTART или EXCHANGE. Сравните MTU в show interface, выровняйте командой ip mtu |
| Разные настройки аутентификации | Соседа нет. Тип аутентификации и ключи должны совпадать |
| Одинаковые router ID | У непосредственных соседей соседство обычно не поднимается, в журнале (show logging) ищите сообщение о дублирующемся router ID; у маршрутизаторов, не связанных напрямую, бывают нестабильные маршруты. Проверьте show ip ospf на обоих устройствах |
Интерфейс пассивный (passive-interface) там, где нужно соседство |
Hello не отправляются. show ip ospf interface, show ip protocols (список Passive Interface(s)) |
| ACL блокирует OSPF | Hello не доходят. Проверьте ACL на стыке; OSPF — это отдельный IP-протокол (номер 89), а не TCP/UDP, его пакеты идут на multicast-адрес 224.0.0.5 (Hello и сообщения всем OSPF-маршрутизаторам), а на broadcast-сегментах с DR/BDR ещё и на 224.0.0.6 (по RFC 2328) |
| Нет связи на втором уровне или IP-адреса неверны | ping 10.0.12.2, show interface |
Если на стыке применены ACL, проверьте входящие списки на обоих концах (show ip interface GigabitEthernet0/0/2, строка Inbound access list). В них должен быть разрешён протокол OSPF, например строкой permit ospf any any, либо трафик на 224.0.0.5 и 224.0.0.6.
Для отладки можно включить debug-вывод OSPF, но на боевом оборудовании делайте это осторожно, лучше на короткое время и по консоли, затем выключайте командой undebug all.
Типичные ошибки
- Passive-interface там, где нужно соседство. Оставили
passive-interface defaultи забылиno passive-interfaceна стыке. Соседей нет, при этомnetworkилиip ospf areaвыглядят правильно. - Статика с дистанцией 1 перекрывает OSPF. В базе OSPF маршруты есть, а в таблице видны статические (подробности — в предупреждении в разделе «Включаем OSPF»). Удалите лишние
ip route. - Забыли включить интерфейс в OSPF. Сеть не объявляется. Смотрите
show ip ospf interface brief: если порта нет в списке, он не участвует. - Не совпадают тип сети, таймеры, MTU или router ID на концах стыка. Всегда сравнивайте
show ip ospf interfaceиshow ip ospfна двух устройствах рядом; одинаковый router ID часто появляется при копировании конфигурации с одного маршрутизатора на другой. - Сеть за
R2не добавлена в NAT наR1. Default по OSPF есть, пинг доR1проходит, а в интернет клиенты не выходят: ACL для PAT иip nat insideна стыке не обновлены (см. выше). default-information originate alwaysбез нужды. Маршрутизатор анонсирует «шлюз в интернет» даже при потере провайдера.
Что дальше
- Статическая маршрутизация и маршрут по умолчанию: когда статика лучше динамики и как её совмещать с OSPF.
- Списки доступа (ACL): как ограничить трафик, не сломав OSPF.
- Резервные копии, обновление IOS и диагностика: последняя статья серии.
- Автоматическое копирование конфигурации Cisco: настройте резервную копию, прежде чем менять конфигурацию на боевых устройствах.