Что такое link-state
В отличие от distance-vector (RIP, EIGRP), где сосед просто говорит «до prefix X через меня метрика 5», link-state работает иначе:
- Каждый роутер описывает только свои локальные линки в LSA (Link State Advertisement)
- Все LSA flood'ятся по area без изменений
- Каждый роутер собирает у себя одинаковую LSDB (Link State Database) - полная карта area
- Локально считает SPF (Dijkstra) → таблица routing-table
Главное: все видят одинаковую топологию, нет распространения слухов через промежуточных, нет count-to-infinity петель.
Соседства (adjacency)
OSPF слышит соседей multicast 224.0.0.5 (ALL-OSPF-ROUTERS) на каждом включённом интерфейсе. Hello каждые 10s (Ethernet) или 30s (NBMA).
Состояния соседства:
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
- Down/Init - Hello ещё не получили или односторонний
- 2-Way - оба видят друг друга, но обмен LSDB ещё не делали (на broadcast-сети все non-DR соседи остаются в 2-Way)
- ExStart/Exchange/Loading - синхронизация LSDB
- Full - синхронизация завершена, можно использовать
В рабочей сети все нужные соседи должны быть Full (или 2-Way с не-DR).
show ip ospf neighbor через cmd-vtysh.
Area
Большую сеть OSPF делит на area - изолированные домены flooding'а.
- Area 0 - backbone, обязателен. Все остальные area подключаются к 0.
- Area N - non-backbone, может быть stub/totally-stubby для уменьшения LSDB
- ABR (Area Border Router) - стоит между area, summarize'ит маршруты
- ASBR (AS Boundary Router) - редистрибьютит во внешний мир (BGP, static)
Если у вас < ~50 роутеров - одной Area 0 хватит. Иерархия даёт смысл на сотнях узлов.
Типы LSA (упрощённо)
| Type | Имя | Что описывает |
|---|---|---|
| 1 | Router LSA | свои линки внутри area |
| 2 | Network LSA | broadcast-сегмент (генерит DR) |
| 3 | Summary LSA | prefix из соседнего area (генерит ABR) |
| 4 | ASBR Summary | как достать ASBR |
| 5 | External LSA | редистрибьютнутые внешние prefix'ы |
| 7 | NSSA External | то же что type-5 но в NSSA-area |
В show ip ospf database видно все LSA в LSDB.
DR / BDR на broadcast-сетях
На Ethernet-сегменте с N роутерами было бы N×(N-1)/2 adjacencies. Чтобы избежать flood-storm выбирают DR (Designated Router) и BDR (Backup). Все остальные строят Full только с DR/BDR.
- DR election: highest priority (по умолчанию 1), tie-breaker - Router ID
- На p2p-линках (типа
/30) DR не нужен - там и так один сосед
Если у вас loopback с большим IP и priority 0 - соберёте OSPF быстрее и предсказуемее.
Минимальная конфигурация (FRR)
router ospf
ospf router-id 1.1.1.1
network 10.0.0.0/30 area 0
network 192.168.10.0/24 area 0
Что делает network: на каждом интерфейсе чей IP попадает в этот
prefix - включается OSPF (рассылается Hello, prefix анонсируется в
LSA type 1).
Альтернатива (новее): per-interface конфигурация:
interface eth0
ip ospf area 0
Так точнее - не зависит от текущего IP интерфейса.
Типичные грабли
- MTU mismatch между соседями → застряли в
ExStart. Решение: одинаковый MTU илиip ospf mtu-ignore. - Hello/Dead интервалы не совпадают → соседи не видят друг друга. OSPF требует точного совпадения Hello и Dead.
- Auth mismatch (если включён MD5/key-chain) → silent drop.
- Subnet mask mismatch на broadcast-сегменте → не идёт 2-Way.
- passive-interface забыли поставить на интерфейсе к клиентам → они получают Hello от вас (не страшно, но шумно и потенциально опасно).
OSPF vs BGP в одной сети
- OSPF - внутри AS, быстрая сходимость, лимит ~500 prefix'ов в одной area без проблем
- BGP (bgp) - между AS или для transit'а большого числа prefix'ов
Классическая схема: OSPF несёт loopback'и роутеров (next-hop'ы), BGP - клиентские prefix'ы. Это снимает с OSPF нагрузку и оставляет BGP политику.