OSPF (Open Shortest Path First)

OSPF - link-state протокол маршрутизации для IP сетей, широко используемый в enterprise networks.

Обзор

OSPF (RFC 2328 для OSPFv2, RFC 5340 для OSPFv3) - Interior Gateway Protocol (IGP) использующий алгоритм Dijkstra.

Характеристики:

  • Link-state протокол (каждый роутер имеет полную топологию)
  • Быстрая конвергенция
  • Масштабируемость через иерархический дизайн (areas)
  • VLSM и CIDR support
  • Метрика - cost (на основе bandwidth)
  • Multicast для обновлений (224.0.0.5, 224.0.0.6)

Версии:

  • OSPFv2 - для IPv4
  • OSPFv3 - для IPv6

Применение:

  • Enterprise campus networks
  • Data center networking
  • WAN между офисами
  • ISP backbone (в сочетании с BGP)

Преимущества перед RIP:

  • Нет hop count limit
  • Быстрая конвергенция
  • Bandwidth-based метрика
  • Поддержка VLSM
  • Меньше трафика обновлений

OSPF Areas

OSPF использует иерархический дизайн с областями (areas).

Area 0 (Backbone)

Area 0 - обязательная backbone area, к которой подключаются все другие areas.

Правила:

  • Все areas должны подключаться к Area 0
  • Area 0 должна быть contiguous (непрерывной)
  • Inter-area трафик проходит через Area 0

Типы роутеров

Internal Router - все интерфейсы в одной area.

Area Border Router (ABR) - роутер с интерфейсами в нескольких areas (обязательно включая Area 0).

Autonomous System Boundary Router (ASBR) - роутер, который redistribue внешние маршруты в OSPF.

Backbone Router - роутер с интерфейсом в Area 0.

Area Types

Normal Area - стандартная area, получает все типы LSA.

Stub Area - не получает external LSA (Type 5), использует default route для внешних сетей.

Totally Stubby Area - Cisco-специфичная, не получает external и summary LSA.

NSSA (Not-So-Stubby Area) - как Stub, но позволяет import external routes через Type 7 LSA.

Totally NSSA - комбинация NSSA и Totally Stubby.

Базовая конфигурация

Простая OSPF сеть

Router 1:

set protocols ospf parameters router-id 10.0.0.1

set protocols ospf area 0 network 10.0.0.0/30
set protocols ospf area 0 network 192.168.1.0/24

commit
save

Router 2:

set protocols ospf parameters router-id 10.0.0.2

set protocols ospf area 0 network 10.0.0.0/30
set protocols ospf area 0 network 192.168.2.0/24

commit
save

Проверка

show ip ospf neighbor
show ip ospf route
show ip route ospf

Router ID

Уникальный идентификатор OSPF роутера (формат IPv4 адреса).

set protocols ospf parameters router-id 10.0.0.1
commit

Автоматический выбор (если не настроен):

  1. Наибольший IP loopback интерфейса
  2. Наибольший IP активного физического интерфейса

Рекомендация: Всегда настраивайте router-id явно.

Best practice: Использовать loopback адрес:

set interfaces loopback lo address 10.255.255.1/32
set protocols ospf parameters router-id 10.255.255.1
commit

Network Configuration

Network Statement

Активировать OSPF на сетях:

set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf area 0 network 10.0.0.0/8
commit

Все интерфейсы с IP из указанных сетей будут участвовать в OSPF.

Interface-specific

Активировать OSPF на конкретном интерфейсе:

set protocols ospf interface eth1 area 0
set protocols ospf interface eth2 area 1
commit

Более гибко чем network statement.

Interface Parameters

Cost

OSPF cost (метрика) интерфейса:

set protocols ospf interface eth1 cost 10
commit

Формула по умолчанию: cost = reference-bandwidth / interface-bandwidth

Reference bandwidth (по умолчанию 100 Mbps):

set protocols ospf auto-cost reference-bandwidth 1000
commit

Рекомендуемые значения reference-bandwidth:

  • 1000 для Gigabit сетей
  • 10000 для 10 Gigabit сетей
  • 100000 для 100 Gigabit сетей

Priority

Приоритет для выбора DR/BDR (Designated Router):

set protocols ospf interface eth1 priority 100
commit

Значения: 0-255 (по умолчанию 1).

  • 0 - роутер не участвует в выборах DR/BDR
  • Выше - больше шансов стать DR

Hello и Dead Intervals

Hello interval (секунды):

set protocols ospf interface eth1 hello-interval 10
commit

Dead interval (секунды):

set protocols ospf interface eth1 dead-interval 40
commit

По умолчанию:

  • Hello: 10 секунд
  • Dead: 40 секунд (4x hello)

Важно: Должны совпадать между neighbors.

Bandwidth

Для правильного расчета cost:

set interfaces ethernet eth1 speed 1000
commit

Или явно установить bandwidth:

set protocols ospf interface eth1 bandwidth 1000
commit

Network Type

Тип сети OSPF:

set protocols ospf interface eth1 network point-to-point
commit

Типы:

  • broadcast - Ethernet (по умолчанию)
  • point-to-point - serial links, VPN tunnels
  • non-broadcast - Frame Relay, X.25
  • point-to-multipoint - частично mesh топологии

Point-to-point рекомендуется для VPN туннелей (избегает DR/BDR выборов).

Authentication

Защита OSPF от несанкционированных роутеров.

Plaintext Authentication

Не рекомендуется (пароль в открытом виде):

set protocols ospf interface eth1 authentication plaintext-password 'MyPassword'
commit

MD5 Authentication

Рекомендуется:

set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'SecurePassword123!'
commit

key-id - идентификатор ключа (1-255), позволяет плавную смену паролей.

Area-wide Authentication

Для всех интерфейсов в area:

set protocols ospf area 0 authentication md5
commit

Затем настроить ключи на каждом интерфейсе:

set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'Password!'
commit

Passive Interface

Интерфейс анонсирует свою сеть, но не формирует adjacencies.

set protocols ospf interface eth2 passive
commit

Полезно для:

  • LAN интерфейсов без других OSPF роутеров
  • Предотвращения несанкционированных OSPF neighbors

Все интерфейсы passive по умолчанию:

set protocols ospf passive-interface default
commit

Затем явно активировать нужные:

set protocols ospf interface eth0 passive disable
set protocols ospf interface eth1 passive disable
commit

Area Types Configuration

Stub Area

Не получает external routes (Type 5 LSA):

set protocols ospf area 1 area-type stub
commit

Настраивается на всех роутерах в area.

Default cost для stub area:

set protocols ospf area 1 area-type stub default-cost 10
commit

NSSA (Not-So-Stubby Area)

Позволяет import external routes внутри stub area:

set protocols ospf area 2 area-type nssa
commit

Translate Type 7 LSA в Type 5:

set protocols ospf area 2 area-type nssa translate always
commit

Опции translate:

  • candidate - автоматический выбор translator
  • always - всегда транслировать
  • never - никогда не транслировать

Totally Stubby / Totally NSSA

Totally Stubby:

set protocols ospf area 1 area-type stub no-summary
commit

Totally NSSA:

set protocols ospf area 2 area-type nssa no-summary
commit

no-summary блокирует Type 3 LSA (inter-area routes).

Route Redistribution

Импорт маршрутов из других источников.

Redistribution Sources

Connected:

set protocols ospf redistribute connected
commit

Static:

set protocols ospf redistribute static
commit

BGP:

set protocols ospf redistribute bgp
commit

Kernel:

set protocols ospf redistribute kernel
commit

Metric и Metric-Type

Установить метрику:

set protocols ospf redistribute connected metric 100
commit

Metric type:

set protocols ospf redistribute connected metric-type 1
commit

Типы:

  • Type 1 (E1) - external cost + internal cost
  • Type 2 (E2) - только external cost (по умолчанию)

Route-map для selective redistribution

set protocols ospf redistribute static route-map STATIC-TO-OSPF
commit

Default Route

Анонс default route в OSPF.

Default Information Originate

set protocols ospf default-information originate
commit

Анонсирует default route только если она существует в routing table.

С параметром always:

set protocols ospf default-information originate always
commit

Анонсирует всегда, даже если нет в routing table.

С метрикой:

set protocols ospf default-information originate always metric 10 metric-type 1
commit

Route-map для default route

set protocols ospf default-information originate route-map DEFAULT-ROUTE
commit

Area Range (Summarization)

Суммирование маршрутов на ABR.

set protocols ospf area 1 range 192.168.0.0/16
commit

ABR анонсирует суммарный префикс вместо более специфичных.

С cost:

set protocols ospf area 1 range 192.168.0.0/16 cost 100
commit

Not-advertise (suppress):

set protocols ospf area 1 range 192.168.0.0/16 not-advertise
commit

Distance

Administrative distance для OSPF маршрутов.

Global:

set protocols ospf distance global 110
commit

По типу маршрута:

set protocols ospf distance ospf intra-area 30
set protocols ospf distance ospf inter-area 110
set protocols ospf distance ospf external 150
commit

По умолчанию все OSPF маршруты имеют distance 110.

Timers

SPF Throttle

Управление частотой SPF calculation:

set protocols ospf timers throttle spf delay 200
set protocols ospf timers throttle spf initial-holdtime 1000
set protocols ospf timers throttle spf max-holdtime 10000
commit

Значения в миллисекундах:

  • delay - задержка перед первым SPF (0-600000 мс)
  • initial-holdtime - начальная задержка между SPF (0-600000 мс)
  • max-holdtime - максимальная задержка (0-600000 мс)

LSA Timers

Управление генерацией LSA:

set protocols ospf timers lsa min-arrival 1000
commit

Минимальный интервал между приемом одинаковых LSA (миллисекунды).

Graceful Restart

Позволяет продолжить forwarding во время restart OSPF процесса.

set protocols ospf parameters graceful-restart
commit

Helper mode (помощь соседям при их restart):

set protocols ospf parameters graceful-restart helper enable
commit

Grace period:

set protocols ospf parameters graceful-restart grace-period 120
commit

BFD Integration

Bidirectional Forwarding Detection для быстрого обнаружения отказов.

set protocols ospf interface eth1 bfd
commit

Настройка BFD профиля:

set protocols bfd profile ospf-peers interval transmit 300
set protocols bfd profile ospf-peers interval receive 300
set protocols bfd profile ospf-peers interval multiplier 3

set protocols ospf interface eth1 bfd profile ospf-peers

commit

BFD обнаруживает отказ за секунды vs десятки секунд с OSPF dead interval.

Virtual Link

Соединение non-backbone area с Area 0 через другую area.

set protocols ospf area 1 virtual-link 10.0.0.2
commit

10.0.0.2 - router-id удаленного ABR.

С authentication:

set protocols ospf area 1 virtual-link 10.0.0.2 authentication md5 key-id 1 md5-key 'Secret!'
commit

Logging

Adjacency Changes

set protocols ospf log-adjacency-changes
commit

С деталями:

set protocols ospf log-adjacency-changes detail
commit

Advanced Parameters

Max Metric Router LSA

Объявить максимальную метрику (эффективно “вывести из использования”):

Administrative:

set protocols ospf max-metric router-lsa administrative
commit

On startup (временно после загрузки):

set protocols ospf max-metric router-lsa on-startup 300
commit

300 секунд после загрузки роутер анонсирует max metric.

On shutdown:

set protocols ospf max-metric router-lsa on-shutdown 60
commit

ABR Type

Поведение Area Border Router:

set protocols ospf parameters abr-type cisco
commit

Типы:

  • cisco - Cisco-совместимый (по умолчанию)
  • ibm - IBM-совместимый
  • standard - RFC 2328
  • shortcut - с виртуальными links

RFC1583 Compatibility

Совместимость со старыми OSPF реализациями:

set protocols ospf parameters rfc1583-compatibility
commit

Примеры конфигурации

Простая двухточечная сеть

HQ Router:

set interfaces loopback lo address 10.255.255.1/32

set protocols ospf parameters router-id 10.255.255.1
set protocols ospf auto-cost reference-bandwidth 1000

set protocols ospf area 0 network 10.255.255.1/32
set protocols ospf area 0 network 10.0.0.0/30
set protocols ospf area 0 network 192.168.1.0/24

set protocols ospf interface eth1 network point-to-point
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'SecureOSPF123!'

set protocols ospf interface eth2 passive

commit
save

Branch Router:

set interfaces loopback lo address 10.255.255.2/32

set protocols ospf parameters router-id 10.255.255.2
set protocols ospf auto-cost reference-bandwidth 1000

set protocols ospf area 0 network 10.255.255.2/32
set protocols ospf area 0 network 10.0.0.0/30
set protocols ospf area 0 network 192.168.2.0/24

set protocols ospf interface eth1 network point-to-point
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'SecureOSPF123!'

set protocols ospf interface eth2 passive

commit
save

Multi-area с ABR

Core ABR (Area 0 и Area 1):

set interfaces loopback lo address 10.255.255.1/32

set protocols ospf parameters router-id 10.255.255.1
set protocols ospf auto-cost reference-bandwidth 1000

# Area 0 (backbone)
set protocols ospf area 0 network 10.255.255.1/32
set protocols ospf area 0 network 10.0.0.0/24

# Area 1
set protocols ospf area 1 network 10.1.0.0/24

set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'Area0Pass!'
set protocols ospf interface eth2 authentication md5 key-id 1 md5-key 'Area1Pass!'

commit
save

Area 1 Router:

set interfaces loopback lo address 10.255.255.10/32

set protocols ospf parameters router-id 10.255.255.10
set protocols ospf auto-cost reference-bandwidth 1000

set protocols ospf area 1 network 10.255.255.10/32
set protocols ospf area 1 network 10.1.0.0/24
set protocols ospf area 1 network 192.168.10.0/24

set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'Area1Pass!'
set protocols ospf interface eth2 passive

commit
save

Stub Area с default route

ABR:

set protocols ospf area 1 area-type stub default-cost 10
commit

Internal Router в Stub Area:

set protocols ospf area 1 area-type stub
set protocols ospf area 1 network 192.168.20.0/24
commit

Роутер получает default route с cost 10 от ABR.

NSSA с redistribution

ASBR в NSSA:

set protocols ospf area 2 area-type nssa

set protocols ospf area 2 network 192.168.30.0/24

# Redistribute static routes
set protocols static route 203.0.113.0/24 blackhole
set protocols ospf redistribute static metric 20 metric-type 1

commit
save

ABR для NSSA:

set protocols ospf area 0 network 10.0.0.0/24
set protocols ospf area 2 area-type nssa translate always
set protocols ospf area 2 network 10.2.0.0/24

commit
save

OSPF с BGP redistribution

Edge Router:

# OSPF internal
set protocols ospf parameters router-id 10.255.255.1
set protocols ospf area 0 network 10.0.0.0/8

# BGP для external
set protocols bgp system-as 65001
set protocols bgp neighbor 203.0.113.1 remote-as 65000
set protocols bgp address-family ipv4-unicast network 192.0.2.0/24

# Redistribute BGP в OSPF
set protocols ospf redistribute bgp metric 100 metric-type 2

# Redistribute OSPF в BGP (selective)
set protocols bgp address-family ipv4-unicast redistribute ospf route-map OSPF-TO-BGP

set policy route-map OSPF-TO-BGP rule 10 action permit
set policy route-map OSPF-TO-BGF rule 10 match ip address prefix-list INTERNAL-NETWORKS

set policy prefix-list INTERNAL-NETWORKS rule 10 action permit
set policy prefix-list INTERNAL-NETWORKS rule 10 prefix 10.0.0.0/8 le 24

commit
save

OSPF через VPN (VTI)

Site A:

# VTI interface
set interfaces vti vti0 address 172.16.0.1/30

# OSPF через VTI
set protocols ospf parameters router-id 10.0.0.1
set protocols ospf interface vti0 area 0
set protocols ospf interface vti0 network point-to-point
set protocols ospf interface vti0 authentication md5 key-id 1 md5-key 'VPN-OSPF!'

set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf interface eth1 passive

commit
save

Site B:

# VTI interface
set interfaces vti vti0 address 172.16.0.2/30

# OSPF через VTI
set protocols ospf parameters router-id 10.0.0.2
set protocols ospf interface vti0 area 0
set protocols ospf interface vti0 network point-to-point
set protocols ospf interface vti0 authentication md5 key-id 1 md5-key 'VPN-OSPF!'

set protocols ospf area 0 network 192.168.2.0/24
set protocols ospf interface eth1 passive

commit
save

Операционные команды

OSPF Neighbors

show ip ospf neighbor

Вывод:

Neighbor ID     Pri State           Dead Time Address         Interface
10.0.0.2          1 Full/DR         00:00:35  10.0.0.2        eth1

Детали neighbor:

show ip ospf neighbor detail

OSPF Database

Link State Database:

show ip ospf database

Router LSA:

show ip ospf database router

Network LSA:

show ip ospf database network

Summary LSA:

show ip ospf database summary

External LSA:

show ip ospf database external

OSPF Routes

show ip ospf route

Только OSPF маршруты в routing table:

show ip route ospf

OSPF Interface

show ip ospf interface

Конкретный интерфейс:

show ip ospf interface eth1

OSPF Border Routers

show ip ospf border-routers

Clear OSPF Process

Restart OSPF:

restart ospf

Troubleshooting

Neighbor не формируется

Проверьте:

  1. IP connectivity:

    ping <neighbor-ip>
  2. Subnet mask совпадает

  3. Hello/Dead intervals совпадают:

    show ip ospf interface eth1
  4. Authentication совпадает:

    show ip ospf interface eth1
  5. Area ID совпадает

  6. Network type совпадает (broadcast vs point-to-point)

  7. MTU совпадает:

    show interfaces ethernet eth1

Neighbor в состоянии INIT/2WAY

INIT - получает Hello, но не видит свой Router ID в Hello от neighbor.

2WAY - нормально для broadcast сетей если роутер не DR/BDR.

Проверьте Router ID:

show ip ospf

Routes не появляются

Проверьте:

  1. Neighbor в состоянии FULL:

    show ip ospf neighbor
  2. Database содержит LSA:

    show ip ospf database
  3. ABR между areas:

    show ip ospf border-routers
  4. Area configuration правильная

  5. Stub/NSSA настроены на всех роутерах area

High CPU usage

OSPF SPF calculation:

  1. Проверьте флapping интерфейсов:

    show interfaces
  2. Tune SPF timers:

    set protocols ospf timers throttle spf delay 1000
    set protocols ospf timers throttle spf initial-holdtime 5000
    set protocols ospf timers throttle spf max-holdtime 30000
    commit
  3. Используйте BFD вместо коротких hello intervals

Routing loops

Проверьте:

  1. Area 0 contiguous (непрерывна)

  2. ABR подключены к Area 0

  3. Virtual links настроены правильно (если нужны)

  4. Route summarization не перекрывается

Лучшие практики

  1. Router ID - всегда используйте loopback адреса
  2. Reference bandwidth - настройте для Gigabit+ сетей
  3. Authentication - используйте MD5 на всех интерфейсах
  4. Passive interfaces - для LAN без OSPF neighbors
  5. Point-to-point network type для VPN туннелей
  6. Area design:
    • Area 0 - backbone
    • Area 1+ - edge/branch networks
    • Stub areas для leaf networks
  7. Summarization на ABR для уменьшения LSA
  8. BFD для быстрого failover
  9. Timers - не изменяйте без необходимости
  10. Monitoring - отслеживайте neighbor states

Безопасность

Рекомендации

  1. MD5 Authentication:

    set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'StrongPassword!'
  2. Passive interfaces для LAN:

    set protocols ospf interface eth2 passive
  3. Firewall для OSPF трафика:

    set firewall ipv4 input filter rule 100 action accept
    set firewall ipv4 input filter rule 100 destination address 224.0.0.5
    set firewall ipv4 input filter rule 100 protocol ospf
    
    set firewall ipv4 input filter rule 101 action accept
    set firewall ipv4 input filter rule 101 destination address 224.0.0.6
    set firewall ipv4 input filter rule 101 protocol ospf
  4. Ограничьте source для OSPF пакетов:

    set firewall ipv4 input filter rule 100 source address 10.0.0.0/24
  5. Log adjacency changes:

    set protocols ospf log-adjacency-changes detail
  6. Не используйте plaintext authentication

Производительность

Optimization

  1. Reference bandwidth:

    set protocols ospf auto-cost reference-bandwidth 10000
  2. SPF throttle timers для нестабильных сетей:

    set protocols ospf timers throttle spf delay 1000
    set protocols ospf timers throttle spf initial-holdtime 5000
    set protocols ospf timers throttle spf max-holdtime 30000
  3. Summarization на ABR:

    set protocols ospf area 1 range 192.168.0.0/16
  4. Stub areas для уменьшения LSA:

    set protocols ospf area 1 area-type stub
  5. BFD вместо коротких OSPF timers

Сравнение с другими протоколами

OSPF vs RIP

ХарактеристикаOSPFRIP
ТипLink-stateDistance-vector
МетрикаCost (bandwidth)Hop count
Hop limitНет15
КонвергенцияБыстраяМедленная
МасштабируемостьВысокаяНизкая
СложностьСредняяПростая
VLSMДаRIPv2 да

OSPF vs BGP

OSPF - для internal routing (IGP). BGP - для external routing (EGP).

Часто используются вместе: OSPF internal, BGP для ISP connectivity.

Следующие шаги

  • BGP - для подключения к ISP
  • Static Routes - backup для OSPF
  • BFD - быстрое обнаружение отказов
  • VTI Interfaces - OSPF через VPN
Проверено OpenNix LLC · Обновлено