Обновлено: 23.03.2026

OSPF — динамическая маршрутизация

OSPFRoutingMulti-AreaФилиалы

OSPF в RouterOS 7

OSPF (Open Shortest Path First) — протокол динамической маршрутизации на основе состояния каналов (link-state), работающий внутри одной автономной системы. В RouterOS 7 реализация OSPF полностью переработана и интегрирована в единый Routing Daemon.

ℹ️
В RouterOS 7 конфигурация OSPF находится в /routing/ospf/. Старый синтаксис RouterOS 6 (/routing ospf) не совместим — при миграции необходимо полностью переписать конфигурацию.

OSPFv2 и OSPFv3

Ключевые концепции

Single-Area vs Multi-Area

В простых сетях (до 20-30 роутеров) достаточно одной области (Area 0). Для крупных сетей с филиалами применяется Multi-Area дизайн, который ограничивает распространение LSA, уменьшает размер LSDB и ускоряет конвергенцию при изменениях топологии.

Базовая настройка (Single Area)

Простейший сценарий: два роутера в одной backbone-области 0.0.0.0, связанные через Ethernet.

Схема сети

# R1 (10.0.0.1) ── ether1 ── (10.0.0.2) R2
# LAN: 192.168.1.0/24        LAN: 192.168.2.0/24Схема

Конфигурация R1

# Создаём OSPF instance
/routing/ospf/instance
add name=ospf-main router-id=10.0.0.1 version=2

# Создаём backbone area
/routing/ospf/area
add name=backbone instance=ospf-main area-id=0.0.0.0

# Добавляем интерфейсы в OSPF
/routing/ospf/interface-template
add area=backbone networks=10.0.0.0/30 type=ptp
add area=backbone networks=192.168.1.0/24 passive

# Назначаем IP-адреса
/ip/address
add address=10.0.0.1/30 interface=ether1
add address=192.168.1.1/24 interface=bridge-lanR1 — RouterOS CLI

Конфигурация R2

# Создаём OSPF instance
/routing/ospf/instance
add name=ospf-main router-id=10.0.0.2 version=2

# Создаём backbone area
/routing/ospf/area
add name=backbone instance=ospf-main area-id=0.0.0.0

# Добавляем интерфейсы
/routing/ospf/interface-template
add area=backbone networks=10.0.0.0/30 type=ptp
add area=backbone networks=192.168.2.0/24 passive

# Назначаем IP-адреса
/ip/address
add address=10.0.0.2/30 interface=ether1
add address=192.168.2.1/24 interface=bridge-lanR2 — RouterOS CLI
💡
Параметр passive в interface-template означает, что OSPF будет анонсировать сеть этого интерфейса, но не будет устанавливать соседство (adjacency) через него. Используйте для LAN-сегментов, где нет OSPF-соседей.

Multi-Area OSPF

В крупных корпоративных сетях с филиалами применяется Multi-Area дизайн. Каждый филиал помещается в отдельную OSPF-область, что ограничивает распространение LSA и упрощает управление.

Схема сети

                    ┌─────────────────┐
                    │   Area 0        │
                    │  (Backbone)     │
                    │                 │
                    │  ABR-1   ABR-2  │
                    │ 10.0.0.1 10.0.0.2│
                    └──┬────┬────┬────┘
                       │    │    │
          ┌────────────┘    │    └────────────┐
          │                 │                  │
   ┌──────┴──────┐   ┌─────┴──────┐   ┌──────┴──────┐
   │   Area 1    │   │   Area 2   │   │   Area 3    │
   │  Москва     │   │  Казань    │   │ Новосибирск │
   │ 192.168.10  │   │ 192.168.20 │   │ 192.168.30  │
   │ BR-MSK      │   │ BR-KZN     │   │ BR-NSK      │
   │ 10.1.1.2    │   │ 10.2.2.2   │   │ 10.3.3.2    │
   └─────────────┘   └────────────┘   └─────────────┘

# Транспортные сети между ABR и филиалами:
# ABR-1 ↔ BR-MSK:  10.1.1.0/30
# ABR-1 ↔ BR-KZN:  10.2.2.0/30
# ABR-2 ↔ BR-NSK:  10.3.3.0/30
# Backbone link:   10.0.0.0/30 (ABR-1 ↔ ABR-2)Сетевая диаграмма

Конфигурация ABR-1 (Area Border Router)

ABR-1 подключён к backbone (Area 0), а также является граничным роутером для Area 1 (Москва) и Area 2 (Казань).

# OSPF instance
/routing/ospf/instance
add name=ospf-main router-id=10.0.0.1 version=2

# Определяем все области
/routing/ospf/area
add name=backbone instance=ospf-main area-id=0.0.0.0
add name=area-msk instance=ospf-main area-id=0.0.0.1
add name=area-kzn instance=ospf-main area-id=0.0.0.2

# Интерфейсы backbone
/routing/ospf/interface-template
add area=backbone networks=10.0.0.0/30 type=ptp

# Интерфейсы Area 1 (Москва)
add area=area-msk networks=10.1.1.0/30 type=ptp

# Интерфейсы Area 2 (Казань)
add area=area-kzn networks=10.2.2.0/30 type=ptp

# IP-адреса
/ip/address
add address=10.0.0.1/30 interface=ether1 comment="backbone to ABR-2"
add address=10.1.1.1/30 interface=ether2 comment="to BR-MSK"
add address=10.2.2.1/30 interface=ether3 comment="to BR-KZN"ABR-1 — RouterOS CLI

Конфигурация ABR-2

# OSPF instance
/routing/ospf/instance
add name=ospf-main router-id=10.0.0.2 version=2

# Области
/routing/ospf/area
add name=backbone instance=ospf-main area-id=0.0.0.0
add name=area-nsk instance=ospf-main area-id=0.0.0.3

# Интерфейсы
/routing/ospf/interface-template
add area=backbone networks=10.0.0.0/30 type=ptp
add area=area-nsk networks=10.3.3.0/30 type=ptp

# IP-адреса
/ip/address
add address=10.0.0.2/30 interface=ether1 comment="backbone to ABR-1"
add address=10.3.3.1/30 interface=ether2 comment="to BR-NSK"ABR-2 — RouterOS CLI

Конфигурация филиала Москва (BR-MSK)

/routing/ospf/instance
add name=ospf-main router-id=10.1.1.2 version=2

/routing/ospf/area
add name=area-msk instance=ospf-main area-id=0.0.0.1

/routing/ospf/interface-template
add area=area-msk networks=10.1.1.0/30 type=ptp
add area=area-msk networks=192.168.10.0/24 passive

/ip/address
add address=10.1.1.2/30 interface=ether1
add address=192.168.10.1/24 interface=bridge-lanBR-MSK — RouterOS CLI

Конфигурация филиала Казань (BR-KZN)

/routing/ospf/instance
add name=ospf-main router-id=10.2.2.2 version=2

/routing/ospf/area
add name=area-kzn instance=ospf-main area-id=0.0.0.2

/routing/ospf/interface-template
add area=area-kzn networks=10.2.2.0/30 type=ptp
add area=area-kzn networks=192.168.20.0/24 passive

/ip/address
add address=10.2.2.2/30 interface=ether1
add address=192.168.20.1/24 interface=bridge-lanBR-KZN — RouterOS CLI

Конфигурация филиала Новосибирск (BR-NSK)

/routing/ospf/instance
add name=ospf-main router-id=10.3.3.2 version=2

/routing/ospf/area
add name=area-nsk instance=ospf-main area-id=0.0.0.3

/routing/ospf/interface-template
add area=area-nsk networks=10.3.3.0/30 type=ptp
add area=area-nsk networks=192.168.30.0/24 passive

/ip/address
add address=10.3.3.2/30 interface=ether1
add address=192.168.30.1/24 interface=bridge-lanBR-NSK — RouterOS CLI
ℹ️
При Multi-Area дизайне ABR автоматически генерирует Type 3 Summary LSA для передачи маршрутной информации между областями. Каждый филиальный роутер видит маршруты к другим филиалам как inter-area (IA) маршруты в таблице маршрутизации.

Stub и NSSA Areas

Stub и NSSA области используются для уменьшения размера таблицы маршрутизации на филиальных роутерах, ограничивая типы LSA, которые передаются в область.

Stub Area

В stub-области блокируются внешние маршруты (Type 5 LSA). Вместо них ABR инжектирует маршрут по умолчанию (default route). Подходит для филиалов, которым не нужны маршруты из других протоколов маршрутизации.

# На ABR — объявляем Area 1 как stub
/routing/ospf/area
add name=area-msk instance=ospf-main area-id=0.0.0.1 type=stub

# На филиальном роутере — тоже stub
/routing/ospf/area
add name=area-msk instance=ospf-main area-id=0.0.0.1 type=stubStub Area — RouterOS CLI
⚠️
Тип области (stub, NSSA) должен совпадать на всех роутерах внутри этой области. Несовпадение приведёт к тому, что adjacency не будет установлено.

Totally Stubby Area

Расширение stub-области: блокируются и Type 3 Summary LSA (межобластные маршруты). Филиальный роутер получает только маршрут по умолчанию от ABR. Минимальная нагрузка на LSDB.

# На ABR — totally stubby (no-summary блокирует Type 3 LSA)
/routing/ospf/area
set area-msk type=stub no-summary=yes

# На филиальном роутере — обычный stub
/routing/ospf/area
set area-msk type=stubTotally Stubby — RouterOS CLI

NSSA (Not-So-Stubby Area)

NSSA позволяет филиалу импортировать внешние маршруты (например, от локального провайдера интернета) через Type 7 LSA, при этом внешние маршруты из backbone (Type 5) по-прежнему блокируются. Идеально для филиалов с локальным интернет-выходом.

# На ABR
/routing/ospf/area
add name=area-kzn instance=ospf-main area-id=0.0.0.2 type=nssa

# На филиальном роутере (BR-KZN)
/routing/ospf/area
add name=area-kzn instance=ospf-main area-id=0.0.0.2 type=nssa

# Редистрибуция static через output filter
/routing/filter/rule
add chain=ospf-nssa-out rule="if (protocol static) { accept }"
add chain=ospf-nssa-out rule="reject"

/routing/ospf/instance
set ospf-main out-filter-chain=ospf-nssa-out

# Статический маршрут к провайдеру
/ip/route
add dst-address=0.0.0.0/0 gateway=203.0.113.1 comment="local ISP"NSSA — RouterOS CLI
💡
ABR автоматически преобразует Type 7 LSA (из NSSA) в Type 5 LSA при передаче в backbone. Таким образом, маршруты от локального провайдера филиала становятся доступны всей сети OSPF.

Настройка филиалов

Полный пример конфигурации филиального роутера с учётом всех практических аспектов: OSPF-область, default route, cost, passive-интерфейсы и аутентификация.

Полная конфигурация филиала

# === OSPF Instance ===
/routing/ospf/instance
add name=ospf-branch router-id=10.1.1.2 version=2

# === Area (stub — для минимизации LSDB) ===
/routing/ospf/area
add name=area-branch instance=ospf-branch area-id=0.0.0.1 type=stub

# === Interface templates ===
/routing/ospf/interface-template
# WAN-канал к ABR (point-to-point, cost настроен вручную)
add area=area-branch networks=10.1.1.0/30 type=ptp cost=100 priority=0
# LAN — passive (анонсируем сеть, но не ищем соседей)
add area=area-branch networks=192.168.10.0/24 passive
# Management VLAN
add area=area-branch networks=172.16.10.0/24 passive

# === Аутентификация (MD5) ===
/routing/ospf/interface-template
set [find networks=10.1.1.0/30] auth=md5 auth-id=1 auth-key="S3cureK3y!Br@nch1"

# === IP-адреса ===
/ip/address
add address=10.1.1.2/30 interface=ether1 comment="WAN to ABR"
add address=192.168.10.1/24 interface=bridge-lan comment="LAN"
add address=172.16.10.1/24 interface=vlan-mgmt comment="Management"Филиал — полная конфигурация

Инжекция Default Route на ABR

Для stub-областей ABR автоматически инжектирует default route. Для обычных областей нужно настроить вручную:

# На ABR: инжекция default route в area
/routing/ospf/instance
set ospf-main originate-default=if-installed

# Убедитесь, что на ABR есть default route
/ip/route
add dst-address=0.0.0.0/0 gateway=203.0.113.1ABR — Default Route

Настройка Cost интерфейса

Cost определяет предпочтительность маршрута. Рекомендуемые значения:

Аутентификация

OSPF поддерживает аутентификацию соседей для защиты от подмены маршрутной информации:

# MD5-аутентификация
/routing/ospf/interface-template
set [find networks=10.1.1.0/30] auth=md5 auth-id=1 auth-key="MySecretKey123"

# SHA-аутентификация (более надёжная)
/routing/ospf/interface-template
set [find networks=10.1.1.0/30] auth=sha256 auth-id=1 auth-key="SHA256SecureKey!2026"Аутентификация — RouterOS CLI
🔴
Ключ аутентификации должен совпадать на обоих концах линка. При несовпадении роутеры не смогут установить adjacency, и в логах появится ошибка authentication failure. Рекомендуется использовать SHA256 вместо MD5 для новых установок.

Фильтрация маршрутов

Фильтрация позволяет контролировать, какие маршруты передаются между областями и импортируются из других источников.

Area Range (суммаризация)

ABR может суммировать маршруты из области в один агрегированный маршрут, уменьшая размер таблицы маршрутизации в backbone:

# Суммаризация маршрутов Area 1 в один /16
/routing/ospf/area/range
add area=area-msk range=192.168.10.0/24 advertise=yes cost=50

# Скрыть подсети — анонсировать только суммарный маршрут
add area=area-kzn range=192.168.20.0/24 advertise=yes

# Полностью скрыть подсети области (не анонсировать)
add area=area-nsk range=192.168.30.0/24 advertise=noArea Range — RouterOS CLI

Фильтры маршрутов (Routing Filter Rules)

# Фильтр: принимать только определённые сети от OSPF
/routing/filter/rule
add chain=ospf-in rule="if (dst in 192.168.0.0/16 && dst-len >= 24) { accept }"
add chain=ospf-in rule="if (dst == 0.0.0.0/0) { accept }"
add chain=ospf-in rule="reject"

# Применяем фильтр к OSPF instance
/routing/ospf/instance
set ospf-main in-filter-chain=ospf-inRoute Filter — RouterOS CLI

Редистрибуция маршрутов в OSPF

🚨
В RouterOS 7 параметр redistribute= на OSPF instance не существует. Это синтаксис RouterOS 6! В ROS7 редистрибуция настраивается только через out-filter-chain с routing filter rules.
# Редистрибуция connected-сетей в OSPF
/routing/filter/rule
add chain=ospf-out rule="if (protocol connected) { accept }"
add chain=ospf-out rule="reject"

# Редистрибуция connected + static
/routing/filter/rule
add chain=ospf-out rule="if (protocol connected) { accept }"
add chain=ospf-out rule="if (protocol static) { accept }"
add chain=ospf-out rule="reject"

# Точечный фильтр — только определённые static маршруты
/routing/filter/rule
add chain=ospf-out rule="if (protocol connected) { accept }"
add chain=ospf-out rule="if (protocol static && dst == 10.99.0.0/16) { accept }"
add chain=ospf-out rule="reject"

# Применяем фильтр к OSPF instance
/routing/ospf/instance
set ospf-main out-filter-chain=ospf-outРедистрибуция ROS7 — RouterOS CLI
⚠️
Бездумная редистрибуция всех connected и static маршрутов может привести к петлям маршрутизации и нестабильности. Всегда используйте фильтры для точного контроля редистрибуции.

OSPF через VPN туннели

При подключении филиалов через интернет OSPF запускается поверх VPN-туннелей (WireGuard, GRE, L2TP). Это обеспечивает автоматическое переключение при отказе каналов.

OSPF через WireGuard

# Шаг 1: Настроен WireGuard туннель (wg-branch1)
# ABR: 10.255.1.1/30, филиал: 10.255.1.2/30

# Шаг 2: Добавляем WireGuard-интерфейс в OSPF
/routing/ospf/interface-template
add area=area-msk networks=10.255.1.0/30 type=ptp cost=1000 priority=0

# Cost 1000 — высокий, чтобы прямой канал был предпочтительнееWireGuard + OSPF — RouterOS CLI

OSPF через GRE

# Создаём GRE-туннель
/interface/gre
add name=gre-branch2 remote-address=198.51.100.10 local-address=198.51.100.1

/ip/address
add address=10.255.2.1/30 interface=gre-branch2

# Добавляем в OSPF
/routing/ospf/interface-template
add area=area-kzn networks=10.255.2.0/30 type=ptp cost=1000GRE + OSPF — RouterOS CLI

Резервирование: два туннеля с разным cost

# Основной канал — WireGuard через ISP1 (cost 100)
/routing/ospf/interface-template
add area=area-msk networks=10.255.1.0/30 type=ptp cost=100

# Резервный канал — GRE через ISP2 (cost 1000)
add area=area-msk networks=10.255.3.0/30 type=ptp cost=1000

# При падении основного канала трафик автоматически
# переключится на резервный GRE-туннельРезервирование — RouterOS CLI

BFD для быстрого обнаружения отказов

OSPF по умолчанию обнаруживает потерю соседа за 40 секунд (dead-interval). BFD (Bidirectional Forwarding Detection) сокращает это время до миллисекунд:

# Включаем BFD на OSPF-интерфейсе
/routing/ospf/interface-template
set [find networks=10.255.1.0/30] use-bfd=yes

# Настройка BFD (интервалы в миллисекундах)
/routing/bfd/configuration
add min-tx=200ms min-rx=200ms multiplier=3 disabled=no

# Проверка BFD-сессий
/routing/bfd/session/printBFD — RouterOS CLI
💡
При использовании BFD через VPN-туннели рекомендуется устанавливать min-tx/min-rx не менее 200ms и multiplier=3, чтобы избежать ложных срабатываний из-за джиттера на интернет-каналах. Для прямых Ethernet-линков можно использовать 50ms.

Мониторинг и отладка

Основные команды мониторинга

# Просмотр OSPF-соседей
/routing/ospf/neighbor/print

# Детальная информация о соседях
/routing/ospf/neighbor/print detail

# Просмотр OSPF-интерфейсов
/routing/ospf/interface/print

# База данных LSA
/routing/ospf/lsa/print

# Только Type 3 (Summary) LSA
/routing/ospf/lsa/print where type=summary

# OSPF-маршруты в таблице маршрутизации
/ip/route/print where ospf

# Статистика OSPF instance
/routing/ospf/instance/print detail

# Статистика маршрутизации
/routing/stats/printМониторинг — RouterOS CLI

Логирование OSPF

# Включаем подробные логи OSPF
/system/logging
add topics=ospf action=memory
add topics=ospf,!raw action=disk

# Просмотр логов
/log/print where topics~"ospf"Логирование — RouterOS CLI

Типичные проблемы

Сосед застрял в состоянии ExStart/Exchange

Причина: несовпадение MTU на интерфейсах. OSPF проверяет MTU в Database Description пакетах.

# Проверяем MTU на интерфейсах
/interface/print detail where name=ether1

# Установка одинакового MTU (пример для GRE)
/interface/gre
set gre-branch2 mtu=1400

# Или отключение проверки MTU в OSPF (не рекомендуется)
# В RouterOS 7 это делается через dont-check-mtu в interface-templateMTU fix — RouterOS CLI

Ошибка аутентификации

В логах: ospf authentication failure from X.X.X.X. Проверьте совпадение auth-key и auth-id на обоих роутерах:

# Проверяем текущие настройки аутентификации
/routing/ospf/interface-template/print detail where auth=md5Auth check — RouterOS CLI

Соседство не устанавливается

Чек-лист:

# Разрешаем OSPF в firewall
/ip/firewall/filter
add chain=input protocol=ospf action=accept comment="Allow OSPF"
add chain=forward protocol=ospf action=acceptFirewall — RouterOS CLI
🔴
Не забудьте добавить правила firewall для OSPF перед правилами drop. OSPF использует протокол IP номер 89 (не TCP/UDP), а также мультикаст-адреса 224.0.0.5 (AllSPFRouters) и 224.0.0.6 (AllDRouters).
ℹ️
В Winbox для мониторинга OSPF используйте: Routing → OSPF → Neighbors для просмотра соседей, Routing → OSPF → LSA Database для просмотра LSDB, и IP → Routes с фильтром по протоколу OSPF для просмотра маршрутов.