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
saveRouter 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 ospfRouter ID
Уникальный идентификатор OSPF роутера (формат IPv4 адреса).
set protocols ospf parameters router-id 10.0.0.1
commitАвтоматический выбор (если не настроен):
- Наибольший IP loopback интерфейса
- Наибольший 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
commitNetwork 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
commitDead 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
commitNetwork 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'
commitMD5 Authentication
Рекомендуется:
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'SecurePassword123!'
commitkey-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!'
commitPassive 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
commitArea 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
commitNSSA (Not-So-Stubby Area)
Позволяет import external routes внутри stub area:
set protocols ospf area 2 area-type nssa
commitTranslate 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
commitTotally NSSA:
set protocols ospf area 2 area-type nssa no-summary
commitno-summary блокирует Type 3 LSA (inter-area routes).
Route Redistribution
Импорт маршрутов из других источников.
Redistribution Sources
Connected:
set protocols ospf redistribute connected
commitStatic:
set protocols ospf redistribute static
commitBGP:
set protocols ospf redistribute bgp
commitKernel:
set protocols ospf redistribute kernel
commitMetric и Metric-Type
Установить метрику:
set protocols ospf redistribute connected metric 100
commitMetric 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
commitDefault 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
commitRoute-map для default route
set protocols ospf default-information originate route-map DEFAULT-ROUTE
commitArea Range (Summarization)
Суммирование маршрутов на ABR.
set protocols ospf area 1 range 192.168.0.0/16
commitABR анонсирует суммарный префикс вместо более специфичных.
С cost:
set protocols ospf area 1 range 192.168.0.0/16 cost 100
commitNot-advertise (suppress):
set protocols ospf area 1 range 192.168.0.0/16 not-advertise
commitDistance
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
commitHelper mode (помощь соседям при их restart):
set protocols ospf parameters graceful-restart helper enable
commitGrace period:
set protocols ospf parameters graceful-restart grace-period 120
commitBFD 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
commitBFD обнаруживает отказ за секунды vs десятки секунд с OSPF dead interval.
Virtual Link
Соединение non-backbone area с Area 0 через другую area.
set protocols ospf area 1 virtual-link 10.0.0.2
commit10.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!'
commitLogging
Adjacency Changes
set protocols ospf log-adjacency-changes
commitС деталями:
set protocols ospf log-adjacency-changes detail
commitAdvanced Parameters
Max Metric Router LSA
Объявить максимальную метрику (эффективно “вывести из использования”):
Administrative:
set protocols ospf max-metric router-lsa administrative
commitOn startup (временно после загрузки):
set protocols ospf max-metric router-lsa on-startup 300
commit300 секунд после загрузки роутер анонсирует max metric.
On shutdown:
set protocols ospf max-metric router-lsa on-shutdown 60
commitABR 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
saveBranch 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
saveMulti-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
saveArea 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
saveStub Area с default route
ABR:
set protocols ospf area 1 area-type stub default-cost 10
commitInternal 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
saveABR для 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
saveOSPF с 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
saveOSPF через 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
saveSite 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 detailOSPF Database
Link State Database:
show ip ospf databaseRouter LSA:
show ip ospf database routerNetwork LSA:
show ip ospf database networkSummary LSA:
show ip ospf database summaryExternal LSA:
show ip ospf database externalOSPF Routes
show ip ospf routeТолько OSPF маршруты в routing table:
show ip route ospfOSPF Interface
show ip ospf interfaceКонкретный интерфейс:
show ip ospf interface eth1OSPF Border Routers
show ip ospf border-routersClear OSPF Process
Restart OSPF:
restart ospfTroubleshooting
Neighbor не формируется
Проверьте:
IP connectivity:
ping <neighbor-ip>Subnet mask совпадает
Hello/Dead intervals совпадают:
show ip ospf interface eth1Authentication совпадает:
show ip ospf interface eth1Area ID совпадает
Network type совпадает (broadcast vs point-to-point)
MTU совпадает:
show interfaces ethernet eth1
Neighbor в состоянии INIT/2WAY
INIT - получает Hello, но не видит свой Router ID в Hello от neighbor.
2WAY - нормально для broadcast сетей если роутер не DR/BDR.
Проверьте Router ID:
show ip ospfRoutes не появляются
Проверьте:
Neighbor в состоянии FULL:
show ip ospf neighborDatabase содержит LSA:
show ip ospf databaseABR между areas:
show ip ospf border-routersArea configuration правильная
Stub/NSSA настроены на всех роутерах area
High CPU usage
OSPF SPF calculation:
Проверьте флapping интерфейсов:
show interfacesTune 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Используйте BFD вместо коротких hello intervals
Routing loops
Проверьте:
Area 0 contiguous (непрерывна)
ABR подключены к Area 0
Virtual links настроены правильно (если нужны)
Route summarization не перекрывается
Лучшие практики
- Router ID - всегда используйте loopback адреса
- Reference bandwidth - настройте для Gigabit+ сетей
- Authentication - используйте MD5 на всех интерфейсах
- Passive interfaces - для LAN без OSPF neighbors
- Point-to-point network type для VPN туннелей
- Area design:
- Area 0 - backbone
- Area 1+ - edge/branch networks
- Stub areas для leaf networks
- Summarization на ABR для уменьшения LSA
- BFD для быстрого failover
- Timers - не изменяйте без необходимости
- Monitoring - отслеживайте neighbor states
Безопасность
Рекомендации
MD5 Authentication:
set protocols ospf interface eth1 authentication md5 key-id 1 md5-key 'StrongPassword!'Passive interfaces для LAN:
set protocols ospf interface eth2 passiveFirewall для 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Ограничьте source для OSPF пакетов:
set firewall ipv4 input filter rule 100 source address 10.0.0.0/24Log adjacency changes:
set protocols ospf log-adjacency-changes detailНе используйте plaintext authentication
Производительность
Optimization
Reference bandwidth:
set protocols ospf auto-cost reference-bandwidth 10000SPF 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 30000Summarization на ABR:
set protocols ospf area 1 range 192.168.0.0/16Stub areas для уменьшения LSA:
set protocols ospf area 1 area-type stubBFD вместо коротких OSPF timers
Сравнение с другими протоколами
OSPF vs RIP
| Характеристика | OSPF | RIP |
|---|---|---|
| Тип | Link-state | Distance-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