"Коротко
<br />
Статические маршруты не масштабируются. При трёх и более роутерах и нескольких каналах переходи на OSPF — он сам узнаёт о сетях, сам пересчитывает маршруты при падении канала, работает на любом железе. BGP нужен только если у тебя два провайдера и свой AS. Время <a href="https://it-apteka.com/install-asterisk-full-manual/" title="Asterisk с нуля: установка, настройка и запуск IP-телефонии на сервере" target="_blank" rel="noopener" data-wpil-monitor-id="2148">настройки OSPF с нуля</a> — около часа. Время разгребания последствий неправильной настройки BGP — не берусь предсказывать.<br />
<h2>Диагноз: когда статика начинает болеть</h2>
<p>Поднял офис. Три роутера, два филиала, VPN между ними. Прописал статику на каждом — работает. Потом добавился четвёртый роутер, пятый, резервный канал к провайдеру. И в какой-то момент ты уже держишь в голове двадцать маршрутов на шести устройствах, а когда падает один канал — полчаса правишь конфиги вручную.</p>
<p>Знакомо? Это не твоя ошибка — это просто предел статической маршрутизации.</p>
<p>Что получишь после этой статьи: рабочий OSPF с аутентификацией на Cisco и <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mikrotik/" target="_blank" rel="noopener" title="mikrotik" data-wpil-keyword-link="linked" data-wpil-monitor-id="2146">MikroTik</a>, понимание BGP на уровне «подключить второго провайдера и не сломать интернет», плюс разбор самых частых ошибок с командами для диагностики. Примерно 1,5-2 часа на вдумчивое чтение и настройку.</p>
<p>Что нужно: доступ к роутерам по SSH или консоли, базовые знания IP-адресации, нарисованная топология сети. Последнее — обязательно. Без схемы настраивать OSPF это как собирать мебель без инструкции.</p>
<p>Что разберём:</p>
<ul>
<li>Когда переходить со статики и почему</li>
<li>Как работает OSPF изнутри — коротко, без воды</li>
<li>Пошаговая <a href="https://it-apteka.com/nastrojka-vlan-na-mikrotik-routeros-7-polnyj-gajd-po-bridge-trunk-i-wi-fi/" title="Настройка VLAN на MikroTik RouterOS 7 — полный гайд 2026" target="_blank" rel="noopener" data-wpil-monitor-id="2149">настройка на Cisco IOS и MikroTik</a></li>
<li>OSPF с MD5-аутентификацией</li>
<li>Базовая настройка BGP для двух провайдеров</li>
<li>Troubleshooting: 7 реальных ошибок и их решение</li>
<li>Безопасность, <a class="wpil_keyword_link" href="https://it-apteka.com/category/monitoring/" target="_blank" rel="noopener" title="Мониторинг" data-wpil-keyword-link="linked" data-wpil-monitor-id="2143">мониторинг</a>, бэкап конфигов</li>
</ul>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Статическая маршрутизация"] --> B{"3+ роутера\nили 2+ канала?"}
B -- "Нет" --> C["Оставь статику\nпроще и надёжнее"]
B -- "Да" --> D["Переходи на OSPF"]
D --> E["Внутри компании\nOSPF area 0"]
D --> F{"Есть 2+\nпровайдера?"}
F -- "Нет" --> G["OSPF + default route\nот провайдера"]
F -- "Да" --> H["BGP на границе\n+ OSPF внутри"]
style A fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
style B fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style D fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style G fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style H fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
</pre>
<h2>Причины: почему статика не тянет</h2>
<p>Конкретно. Без философии.</p>
<h3>1. Нет автоматического восстановления при отказе</h3>
<p>Упал канал — статика молчит. Пакеты идут в никуда, пока ты не придёшь и не уберёшь маршрут вручную. OSPF обнаружит отказ за 40 секунд (по умолчанию), с BFD — за 1 секунду, и перестроит таблицу автоматически.</p>
<h3>2. Линейный рост сложности</h3>
<p>Добавил один роутер — правишь конфиги на всех остальных. У тебя 10 роутеров и добавился 11-й: 10 правок вручную. При OSPF — настраиваешь только 11-й.</p>
<h3>3. Нет балансировки нагрузки</h3>
<p>Статика не умеет сама распределять трафик по нескольким каналам одинаковой стоимости. OSPF поддерживает ECMP (Equal Cost Multi-Path) — несколько маршрутов одновременно.</p>
<h3>4. Ошибки — молча</h3>
<p>Опечатался в маске или следующем хопе — статика это проглотит. Трафик пойдёт не туда, и ты будешь искать проблему часами. OSPF не даст установить некорректное соседство.</p>
<h3>5. Не масштабируется в несколько площадок</h3>
<p>Три офиса, пять VPN-туннелей, два дата-центра. Статические таблицы превращаются в кашу, которую никто не хочет поддерживать. А потом уходит тот, кто это строил, и остаётся legacy которое «трогать нельзя, само работает».</p>
<h2>База: как работает OSPF</h2>
<p>Понимать протокол нужно хотя бы на уровне «что происходит», иначе при отладке будешь тыкать наугад.</p>
<h3>Этапы работы OSPF</h3>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'sequence': {
'mirrorActors': false,
'messageAlign': 'center',
'actorMargin': 150,
'width': 180,
'noteMargin': 12
}
}}%%
sequenceDiagram
participant R1 as Router-1
participant R2 as Router-2
R1->>R2: Hello (224.0.0.5)
R2->>R1: Hello (224.0.0.5)
R1->>R2: DBD - Database Description
R2->>R1: DBD - Database Description
R1->>R2: LSR - Link State Request
R2->>R1: LSU - Link State Update
R1->>R2: LSAck - подтверждение
Note over R1,R2: State = FULL, соседство установлено
R1->>R2: Hello каждые 10 сек
R2->>R1: Hello каждые 10 сек
</pre>
<p>Шесть состояний OSPF соседства по порядку: Down, Init, 2-Way, Exstart, Exchange, Loading, Full. Тебя интересует только одно — Full. Всё остальное промежуточное. Если застрял не в Full — читай troubleshooting ниже.</p>
<h3>Ключевые понятия</h3>
<table>
<thead>
<tr>
<th>Термин</th>
<th>Что это</th>
<th>Зачем знать</th>
</tr>
</thead>
<tbody>
<tr>
<td>Router ID</td>
<td>Уникальный ID роутера в OSPF (формат IPv4)</td>
<td>Задавай вручную, иначе роутер выберет сам и это создаст сюрпризы</td>
</tr>
<tr>
<td>Area</td>
<td>Логическая группа роутеров</td>
<td>Area 0 — обязательная backbone area. Все остальные должны граничить с ней</td>
</tr>
<tr>
<td>LSDB</td>
<td>Link State Database — полная карта топологии</td>
<td>Должна быть одинаковой на всех роутерах одной Area</td>
</tr>
<tr>
<td>Cost</td>
<td>Метрика OSPF = 100 Мбит / пропускная способность</td>
<td>GigE cost=1, FastE cost=10, старые 10Мбит cost=100</td>
</tr>
<tr>
<td>DR / BDR</td>
<td>Designated Router / <a class="wpil_keyword_link" href="https://it-apteka.com/category/rezervnoe-kopirovanie/" target="_blank" rel="noopener" title="Резервное копирование" data-wpil-keyword-link="linked" data-wpil-monitor-id="2147">Backup</a> DR</td>
<td>На Ethernet-сегментах выбирается один DR для экономии LSA-трафика</td>
</tr>
<tr>
<td>Hello / Dead</td>
<td>Таймеры приветствия и смерти</td>
<td>Hello=10 сек, Dead=40 сек по умолчанию. Должны совпадать у соседей</td>
</tr>
<tr>
<td>Wildcard mask</td>
<td>Инвертированная маска подсети</td>
<td>/24 = wildcard 0.0.0.255, /30 = 0.0.0.3, /32 = 0.0.0.0</td>
</tr>
</tbody>
</table>
<h3>Выбор протокола: OSPF, BGP, RIP или EIGRP</h3>
<table>
<thead>
<tr>
<th>Протокол</th>
<th>Тип</th>
<th>Когда использовать</th>
<th>Когда не использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td>RIP v2</td>
<td>Distance Vector</td>
<td>Учебные лабы</td>
<td>Никогда в продакшне. Метрика только в хопах, конвергенция медленная</td>
</tr>
<tr>
<td>OSPF</td>
<td>Link State</td>
<td>Корпоративные сети, филиалы, ЦОД</td>
<td>Сеть из 1-2 роутеров — избыточно</td>
</tr>
<tr>
<td>EIGRP</td>
<td>Hybrid</td>
<td>Сети только на Cisco</td>
<td>Если есть хоть один не-Cisco — проблемы</td>
</tr>
<tr>
<td>IS-IS</td>
<td>Link State</td>
<td>Провайдерские сети, крупные ISP</td>
<td>Корпоративные сети — OSPF проще</td>
</tr>
<tr>
<td>BGP</td>
<td>Path Vector</td>
<td>Подключение к провайдерам, несколько AS</td>
<td>Внутри одной компании — OSPF справится</td>
</tr>
</tbody>
</table>
<h2>Подготовка к настройке</h2>
<h3>Системные требования</h3>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Минимум</th>
<th>Рекомендуется</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cisco IOS</td>
<td>12.4(T)</td>
<td>15.x и новее</td>
</tr>
<tr>
<td>MikroTik RouterOS</td>
<td>6.x</td>
<td>7.x (OSPF переработан)</td>
</tr>
<tr>
<td>Juniper JunOS</td>
<td>12.1</td>
<td>20.x и новее</td>
</tr>
<tr>
<td>FRRouting (<a class="wpil_keyword_link" href="https://it-apteka.com/category/linux/" target="_blank" rel="noopener" title="Linux" data-wpil-keyword-link="linked" data-wpil-monitor-id="2145">Linux</a>)</td>
<td>7.x</td>
<td>9.x и новее</td>
</tr>
<tr>
<td>RAM на роутере</td>
<td>64 МБ</td>
<td>256+ МБ при большой LSDB</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальна Cisco IOS 17.x, MikroTik RouterOS 7.14. Перед <a href="https://it-apteka.com/uptime-kuma-alerting-bez-zamorochek-dlja-admina-kotoryj-cenit-vremja/" title="Установка и настройка Uptime Kuma: self-hosted мониторинг сайтов за 5 минут" target="_blank" rel="noopener" data-wpil-monitor-id="2150">настройкой проверь свежие релизы на официальных сайтах</a>.</p>
<h3>Топология для примеров</h3>
<p>Буду использовать одну топологию на протяжении всей статьи. Нарисуй у себя то же самое.</p>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 60, 'rankSpacing': 60}
}}%%
flowchart TD
ISP1["ISP-1\nAS 65000\n198.51.100.1"]
ISP2["ISP-2\nAS 65001\n203.0.113.1"]
HQ["HQ-Router\nRouter-ID 1.1.1.1\nLoopback 1.1.1.1/32\nGe0/0: 10.0.0.1/30\nGe0/1: 10.0.0.5/30\nGe0/2: 10.1.0.1/30\nGe0/3: 10.1.0.5/30"]
BR1["Branch1-Router\nRouter-ID 2.2.2.2\nGe0/0: 10.0.0.2/30\nGe0/1: 192.168.10.1/24"]
BR2["Branch2-Router\nRouter-ID 3.3.3.3\nGe0/0: 10.0.0.6/30\nGe0/1: 192.168.20.1/24"]
LAN1["LAN Filial-1\n192.168.10.0/24"]
LAN2["LAN Filial-2\n192.168.20.0/24"]
ISP1 --> HQ
ISP2 --> HQ
HQ --> BR1
HQ --> BR2
BR1 --> LAN1
BR2 --> LAN2
style HQ fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style BR1 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style BR2 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style ISP1 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style ISP2 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style LAN1 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style LAN2 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
</pre>
<h3>Порты OSPF и BGP</h3>
<table>
<thead>
<tr>
<th>Протокол</th>
<th>Транспорт</th>
<th>Порт / адрес</th>
<th>Назначение</th>
</tr>
</thead>
<tbody>
<tr>
<td>OSPF Hello</td>
<td>IP протокол 89</td>
<td>Multicast 224.0.0.5</td>
<td>Обнаружение соседей, все OSPF роутеры</td>
</tr>
<tr>
<td>OSPF DR/BDR</td>
<td>IP протокол 89</td>
<td>Multicast 224.0.0.6</td>
<td>Трафик к DR и BDR</td>
</tr>
<tr>
<td>BGP</td>
<td>TCP</td>
<td>179</td>
<td>Сессии между BGP peers</td>
</tr>
<tr>
<td>BFD</td>
<td>UDP</td>
<td>3784 (control), 3785 (echo)</td>
<td>Быстрое обнаружение отказов</td>
</tr>
</tbody>
</table>
<h3>Что сделать до настройки</h3>
<ul>
<li>Нарисуй топологию со всеми IP-адресами</li>
<li>Убедись, что все интерфейсы подняты и роутеры пингуют друг друга напрямую</li>
<li>Сними backup конфигов: <strong>copy running-config tftp</strong> или <strong>export compact</strong> на MikroTik</li>
<li>Запиши Router ID, который будешь использовать (рекомендую loopback-адреса)</li>
<li>Определи, какие сети нужно анонсировать в OSPF</li>
</ul>
<h2>Настройка OSPF на Cisco IOS: шаги</h2>
<h3>Шаг 1. Настрой интерфейсы и loopback</h3>
<p>Loopback не падает никогда — в отличие от физических интерфейсов. Используй его как Router ID и для управления роутером.</p>
<p>HQ-Router:</p>
<pre><code class="language-bash">
configure terminal
interface Loopback0
ip address 1.1.1.1 255.255.255.255
description OSPF-Router-ID
interface GigabitEthernet0/0
description Link-to-Branch1
ip address 10.0.0.1 255.255.255.252
no shutdown
interface GigabitEthernet0/1
description Link-to-Branch2
ip address 10.0.0.5 255.255.255.252
no shutdown
end
write memory
</code></pre>
<p>Branch1-Router:</p>
<pre><code class="language-bash">
configure terminal
interface Loopback0
ip address 2.2.2.2 255.255.255.255
description OSPF-Router-ID
interface GigabitEthernet0/0
description Link-to-HQ
ip address 10.0.0.2 255.255.255.252
no shutdown
interface GigabitEthernet0/1
description LAN-Filial1
ip address 192.168.10.1 255.255.255.0
no shutdown
end
write memory
</code></pre>
<p>Branch2-Router — аналогично, IP-адреса по топологии выше.</p>
<p><a href="https://it-apteka.com/nastrojka-ospf-na-mikrotik-routeros-7-polnyj-gajd-ot-diagnoza-do-proverki/" title="Настройка OSPF на MikroTik RouterOS 7: полный гайд от диагноза до проверки" target="_blank" rel="noopener" data-wpil-monitor-id="2151">Проверка перед OSPF</a> — убедись что пинг работает:</p>
<pre><code class="language-bash">
! С HQ пингуем оба филиала
ping 10.0.0.2 source 10.0.0.1
ping 10.0.0.6 source 10.0.0.5
</code></pre>
"Если
<br />
Не переходи к OSPF. Сначала разберись с физической связностью. show interface покажет состояние интерфейса, show ip interface brief — краткий статус всех. OSPF не поможет если L1/L2 не работает.<br />
<h3>Шаг 2. Включи процесс OSPF и задай Router ID</h3>
<p>Process ID — локальное число, не нужно совпадение на разных роутерах. Router ID — уникальный в масштабах всего OSPF домена.</p>
<p>HQ-Router:</p>
<pre><code class="language-bash">
configure terminal
router ospf 1
router-id 1.1.1.1
log-adjacency-changes detail
end
</code></pre>
<p>Branch1-Router:</p>
<pre><code class="language-bash">
configure terminal
router ospf 1
router-id 2.2.2.2
log-adjacency-changes detail
end
</code></pre>
<p>Branch2-Router — то же самое, router-id 3.3.3.3.</p>
<h3>Шаг 3. Анонсируй сети в OSPF</h3>
<p>Два метода. Первый — через <strong><a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="2144">network</a></strong> в процессе OSPF, второй — через <strong>ip ospf</strong> прямо на интерфейсе. Второй точнее — явно виден какой интерфейс участвует.</p>
<p>Метод 1 — через network (Cisco-классика):</p>
<pre><code class="language-bash">
! HQ-Router
configure terminal
router ospf 1
! Сеть к филиалу 1
network 10.0.0.0 0.0.0.3 area 0
! Сеть к филиалу 2
network 10.0.0.4 0.0.0.3 area 0
! Loopback
network 1.1.1.1 0.0.0.0 area 0
end
</code></pre>
<pre><code class="language-bash">
! Branch1-Router
configure terminal
router ospf 1
network 10.0.0.0 0.0.0.3 area 0
network 192.168.10.0 0.0.0.255 area 0
network 2.2.2.2 0.0.0.0 area 0
end
</code></pre>
<p>Метод 2 — через интерфейс (рекомендуется):</p>
<pre><code class="language-bash">
! HQ-Router - альтернативный способ
configure terminal
interface Loopback0
ip ospf 1 area 0
interface GigabitEthernet0/0
ip ospf 1 area 0
interface GigabitEthernet0/1
ip ospf 1 area 0
end
</code></pre>
<p>LAN-интерфейсы филиалов переведи в passive mode — они анонсируются в OSPF, но Hello не отправляют. Это снижает нагрузку и убирает <a href="https://it-apteka.com/kakoj-vpn-server-ustanovit-na-ubuntu-dlja-nativnogo-podkljuchenija/" title="Настройка IKEv2 VPN сервера на Ubuntu 24.04: StrongSwan без лишних клиентов" target="_blank" rel="noopener" data-wpil-monitor-id="2775">лишний трафик в сеть</a> конечных пользователей.</p>
<pre><code class="language-bash">
! На Branch1 и Branch2
configure terminal
router ospf 1
passive-interface GigabitEthernet0/1
end
</code></pre>
<p>P2P-каналы между роутерами переведи в режим point-to-point. Так не нужны выборы DR/BDR и сходимость быстрее.</p>
<pre><code class="language-bash">
! На всех WAN-интерфейсах между роутерами
configure terminal
interface GigabitEthernet0/0
ip ospf network point-to-point
end
</code></pre>
<h3>Шаг 4. Настрой OSPF с аутентификацией MD5</h3>
<p>Без аутентификации любой роутер в сегменте может стать OSPF-соседом и вбросить в сеть левые маршруты. Это и атака, и случайная ошибка. Настраивай аутентификацию всегда.</p>
<pre><code class="language-bash">
! HQ-Router - аутентификация на интерфейсе к Branch1
configure terminal
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
interface GigabitEthernet0/1
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
end
</code></pre>
<pre><code class="language-bash">
! Branch1-Router - тот же ключ, иначе соседство не установится
configure terminal
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
end
</code></pre>
"Ключ
<br />
MD5-ключ должен совпадать на обоих роутерах для каждого канала. Если поменял ключ на одном — сразу меняй на другом. Иначе соседство упадёт. Храни ключи в менеджере паролей, не в блокноте.<br />
<h3>Шаг 5. Оптимизируй таймеры сходимости</h3>
<p>Стандартные таймеры Hello/Dead (10/40 сек) дают сходимость за 40-50 секунд. Для корпоративных сетей это много. Уменьши до 2/8 или включи BFD.</p>
<p>Вариант 1 — быстрые Hello-таймеры:</p>
<pre><code class="language-bash">
configure terminal
interface GigabitEthernet0/0
! Hello каждые 2 секунды, Dead через 8
ip ospf hello-interval 2
ip ospf dead-interval 8
end
</code></pre>
<p>Вариант 2 — BFD (лучше, работает быстрее):</p>
<pre><code class="language-bash">
configure terminal
interface GigabitEthernet0/0
! BFD: интервал 300 мс, multiplier 3 = обнаружение за ~900 мс
bfd interval 300 min_rx 300 multiplier 3
ip ospf bfd
end
router ospf 1
bfd all-interfaces
end
</code></pre>
<h2>Настройка OSPF на MikroTik RouterOS 7</h2>
<p>В <a href="https://it-apteka.com/mikrotik-routeros-7-nastrojka-ospf-wifi-i-chr-poshagovyj-recept-bez-soplej/" title="MikroTik RouterOS 7: Настройка OSPF, WiFi и CHR — пошаговый рецепт без соплей" target="_blank" rel="noopener" data-wpil-monitor-id="2152">RouterOS 7 OSPF</a> переработан — синтаксис изменился. Если у тебя RouterOS 6 — часть команд будет другой.</p>
<h3>MikroTik — настройка через CLI</h3>
<p>HQ-Router на MikroTik:</p>
<pre><code class="language-bash">
# Создаём OSPF instance
/routing ospf instance
add name=ospf-main router-id=1.1.1.1
# Создаём Area 0
/routing ospf area
add instance=ospf-main name=backbone area-id=0.0.0.0
# Добавляем интерфейсы в OSPF
/routing ospf interface-template
add instance=ospf-main area=backbone interfaces=ether1 type=ptp \
auth=md5 auth-key="SecureOSPF-Key-2024"
add instance=ospf-main area=backbone interfaces=ether2 type=ptp \
auth=md5 auth-key="SecureOSPF-Key-2024"
# LAN - пассивный
add instance=ospf-main area=backbone interfaces=bridge1 passive=yes
# Анонсируем loopback
/routing ospf interface-template
add instance=ospf-main area=backbone interfaces=lo type=ptp
</code></pre>
<p>Проверка соседства на MikroTik:</p>
<pre><code class="language-bash">
/routing ospf neighbor print
/ip route print where routing-mark=ospf-main
</code></pre>
<h2>Проверка: OSPF работает или нет</h2>
<p>После <a href="https://it-apteka.com/docker-compose-ustanovka-komandy-i-nastrojka-kontejnerov/" title="Docker Compose — установка, команды и настройка контейнеров" target="_blank" rel="noopener" data-wpil-monitor-id="2153">настройки — три команды</a>, которые дадут полную картину.</p>
<h3>Cisco — команды проверки</h3>
<pre><code class="language-bash">
! Команда 1 - соседи
show ip ospf neighbor
! Ожидаемый вывод:
! Neighbor ID Pri State Dead Time Address Interface
! 2.2.2.2 1 FULL/ - 00:00:35 10.0.0.2 GigabitEthernet0/0
! 3.3.3.3 1 FULL/ - 00:00:38 10.0.0.6 GigabitEthernet0/1
! State FULL - всё в порядке
! Если FULL/ - (с дефисом) - это p2p интерфейс, DR/BDR не выбираются
</code></pre>
<pre><code class="language-bash">
! Команда 2 - маршруты от OSPF
show ip route ospf
! Ожидаемый вывод:
! 192.168.10.0/24 [110/2] via 10.0.0.2, GigabitEthernet0/0
! 192.168.20.0/24 [110/2] via 10.0.0.6, GigabitEthernet0/1
! O - маршрут от OSPF, [110/2] - AD=110, метрика=2
</code></pre>
<pre><code class="language-bash">
! Команда 3 - база данных топологии
show ip ospf database summary
! Все роутеры одной Area должны иметь одинаковую LSDB
! Количество LSA должно совпадать
</code></pre>
<pre><code class="language-bash">
! Тест сквозной связности
! С HQ пингуем LAN-сеть Branch2 через Branch1-маршрут
ping 192.168.20.1 source 192.168.10.1 repeat 10
</code></pre>
<p>Результат: если получил 10 ответов — OSPF работает корректно.</p>
<h2>Настройка BGP: два провайдера, без катастроф</h2>
<p>BGP — это не просто протокол, это политика маршрутизации между автономными системами. Ошибка в BGP-конфиге может повлиять на связность за пределами твоей сети. Это не страшилка — это факт, который нужно держать в голове.</p>
<h3>Когда реально нужен BGP</h3>
<ul>
<li>Два или более провайдера, нужна балансировка или резервирование</li>
<li>Есть собственный номер AS (выдаётся через RIPE/ARIN)</li>
<li>Есть собственный публичный IPv4/IPv6-блок для анонса</li>
<li>Нужен контроль входящего трафика от разных провайдеров</li>
</ul>
<p>Если у тебя просто два провайдера и нужен фейловер — сначала посмотри на IP SLA + static routes с разной метрикой. Это проще BGP и решает 80% задач.</p>
<h3>Архитектура: OSPF внутри, BGP на границе</h3>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
I1["ISP-1\neBGP AS65000"]
I2["ISP-2\neBGP AS65001"]
BR["Border Router\neBGP к провайдерам\nOSPF к внутренним"]
HQ["HQ-Router\nOSPF"]
B1["Branch1\nOSPF"]
B2["Branch2\nOSPF"]
I1 -- "eBGP" --> BR
I2 -- "eBGP" --> BR
BR -- "OSPF default-route" --> HQ
HQ --> B1
HQ --> B2
style I1 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px
style I2 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px
style BR fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style HQ fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B1 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B2 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
</pre>
<h3>Шаг 1. Настройка eBGP с двумя провайдерами</h3>
<p>Сценарий: у тебя AS65100, публичный блок 203.0.113.0/24, два провайдера.</p>
<pre><code class="language-bash">
configure terminal
! BGP процесс с твоим AS-номером
router bgp 65100
bgp router-id 1.1.1.1
bgp log-neighbor-changes
! Анонсируем свой публичный блок
network 203.0.113.0 mask 255.255.255.0
! Сосед провайдер 1
neighbor 198.51.100.1 remote-as 65000
neighbor 198.51.100.1 description ISP-1-Primary
! Получаем только default route, не весь интернет
neighbor 198.51.100.1 prefix-list ONLY-DEFAULT in
! Анонсируем наш блок провайдеру
neighbor 198.51.100.1 prefix-list OUR-BLOCK out
! Сосед провайдер 2
neighbor 203.0.113.254 remote-as 65001
neighbor 203.0.113.254 description ISP-2-Backup
neighbor 203.0.113.254 prefix-list ONLY-DEFAULT in
neighbor 203.0.113.254 prefix-list OUR-BLOCK out
end
</code></pre>
<pre><code class="language-bash">
! Prefix-list - только default route от провайдеров
ip prefix-list ONLY-DEFAULT permit 0.0.0.0/0
! Prefix-list - только наш блок в сторону провайдеров
ip prefix-list OUR-BLOCK permit 203.0.113.0/24
</code></pre>
"Никогда
<br />
Full table от провайдера — это 900 000+ маршрутов. Без достаточного RAM роутер упадёт. Без понимания BGP-политик ты можешь стать транзитным узлом для чужого трафика. Всегда фильтруй входящие маршруты prefix-list. Это не паранойя — это базовая гигиена.<br />
<h3>Шаг 2. Приоритизация провайдеров через Local Preference</h3>
<p>ISP-1 основной, ISP-2 резервный. Local Preference работает внутри AS — чем выше, тем предпочтительнее.</p>
<pre><code class="language-bash">
configure terminal
! Route-map для ISP-1 - высокий приоритет
route-map ISP1-IN permit 10
set local-preference 200
! Route-map для ISP-2 - низкий приоритет
route-map ISP2-IN permit 10
set local-preference 100
! Применяем к соседям
router bgp 65100
neighbor 198.51.100.1 route-map ISP1-IN in
neighbor 203.0.113.254 route-map ISP2-IN in
end
</code></pre>
<p>Теперь весь исходящий трафик идёт через ISP-1, при его падении — автоматически переключается на ISP-2.</p>
<h3>Шаг 3. Редистрибуция default route в OSPF</h3>
<p>Внутренние <a href="https://it-apteka.com/mss-clamping-na-routere-pochemu-lomaetsja-internet-i-kak-jeto-ispravit/" title="MSS Clamping на роутере: почему ломается интернет и как это исправить" target="_blank" rel="noopener" data-wpil-monitor-id="2154">роутеры</a> должны знать куда слать пакеты в интернет. Рассказываем им через OSPF.</p>
<pre><code class="language-bash">
configure terminal
router ospf 1
! Анонсируем default route в OSPF только если BGP его знает
default-information originate
end
</code></pre>
<h3>Проверка BGP</h3>
<pre><code class="language-bash">
! Статус соседства
show ip bgp summary
! Ожидаемый вывод:
! Neighbor V AS MsgRcvd MsgSent Up/Down State/PfxRcd
! 198.51.100.1 4 65000 452 448 03:22:11 1
! 203.0.113.254 4 65001 441 437 03:22:08 1
! PfxRcd = 1 - получен один маршрут (default route), всё верно
! BGP-таблица
show ip bgp
! Что анонсируем провайдерам
show ip bgp neighbors 198.51.100.1 advertised-routes
! Что получаем от провайдеров
show ip bgp neighbors 198.51.100.1 received-routes
</code></pre>
<h2>Осложнения: 7 реальных ошибок</h2>
<h3>Ошибка 1: Соседство OSPF не устанавливается</h3>
<p>show ip ospf neighbor пустой или соседи в состоянии DOWN.</p>
<table>
<thead>
<tr>
<th>Причина</th>
<th>Диагностика</th>
<th>Решение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Нет физической связности</td>
<td>ping [IP соседа]</td>
<td>Проверь кабель, no shutdown на интерфейсах</td>
</tr>
<tr>
<td>Интерфейс не в OSPF</td>
<td>show ip ospf interface</td>
<td>Добавь network или ip ospf area</td>
</tr>
<tr>
<td>Разные Area ID</td>
<td>show ip ospf interface detail</td>
<td>Приведи к одной Area</td>
</tr>
<tr>
<td>Несовпадение Hello/Dead</td>
<td>show ip ospf interface detail</td>
<td>ip ospf hello-interval / dead-interval</td>
</tr>
<tr>
<td>Блокировка firewall</td>
<td>debug ip ospf adj</td>
<td>Разреши протокол 89, multicast 224.0.0.5</td>
</tr>
<tr>
<td>MTU mismatch</td>
<td>show interface MTU</td>
<td>ip ospf mtu-ignore или выровняй MTU</td>
</tr>
<tr>
<td>Несовпадение MD5-ключей</td>
<td>debug ip ospf adj</td>
<td>Проверь ключи на обоих концах</td>
</tr>
</tbody>
</table>
<pre><code class="language-bash">
! Диагностика MTU на интерфейсе
show interface GigabitEthernet0/0 | include MTU
! Если MTU разные - либо выровняй, либо:
configure terminal
interface GigabitEthernet0/0
ip ospf mtu-ignore
! Детальный лог соседства
debug ip ospf adj
! После диагностики - обязательно выключи debug:
undebug all
</code></pre>
<h3>Ошибка 2: Соседи застряли в состоянии EXSTART/EXCHANGE</h3>
<p>Это классика MTU mismatch. Один роутер пытается отправить DBD-пакет, другой его не принимает из-за размера.</p>
<pre><code class="language-bash">
! Проверь MTU на обоих роутерах
show interface GigabitEthernet0/0 | include MTU
! Временное решение
interface GigabitEthernet0/0
ip ospf mtu-ignore
! Нормальное решение - выровняй MTU на обоих интерфейсах
interface GigabitEthernet0/0
mtu 1500
</code></pre>
<h3>Ошибка 3: Соседство FULL, но маршрутов нет</h3>
<pre><code class="language-bash">
! Проверяем LSDB - есть ли нужная сеть
show ip ospf database | include 192.168.10
! Если сети нет в LSDB - она не анонсируется
! Проверяем на Branch1 что настроен network
show run | section ospf
! Проверяем конкурирующие маршруты
show ip route 192.168.10.0
! Если есть статика с AD ниже 110 - она перекрывает OSPF
</code></pre>
<h3>Ошибка 4: Медленная сходимость после падения канала</h3>
<p>По умолчанию Dead-интервал 40 секунд. Плюс время на пересчёт SPF. Итого 45-60 секунд недоступности. Решение — BFD или уменьшение таймеров.</p>
<pre><code class="language-bash">
! Уменьшаем таймеры SPF
configure terminal
router ospf 1
timers throttle spf 50 200 5000
timers throttle lsa 50 200 5000
</code></pre>
<h3>Ошибка 5: BGP сессия не поднимается</h3>
<pre><code class="language-bash">
! Проверяем статус
show ip bgp summary
! Смотрим на State - если не Established:
! Idle - нет маршрута до соседа, проверь физику
! Active - TCP соединение не устанавливается, проверь firewall (порт 179)
! Connect - проблемы с TCP handshake
! Проверяем доступность BGP-соседа
ping 198.51.100.1
! Проверяем что порт 179 не заблокирован
telnet 198.51.100.1 179
</code></pre>
<h3>Ошибка 6: BGP сессия UP, но маршрутов нет</h3>
<pre><code class="language-bash">
! Смотрим что получаем
show ip bgp neighbors 198.51.100.1 received-routes
! Если пусто - провайдер ничего не анонсирует или soft-reconfiguration не включён
router bgp 65100
neighbor 198.51.100.1 soft-reconfiguration inbound
! Применяем политики заново без сброса сессии
clear ip bgp 198.51.100.1 soft in
</code></pre>
<h3>Ошибка 7: Асимметричная маршрутизация</h3>
<p>Трафик уходит через ISP-1, возвращается через ISP-2. Stateful firewall в этом случае может рвать сессии. Это не всегда ошибка — иногда норма, но нужно знать.</p>
<pre><code class="language-bash">
! Проверяем через какой интерфейс уходит трафик
traceroute 8.8.8.8
! Если нужна симметрия - используй одинаковый Local Preference
! или настрой policy-based routing
</code></pre>
<h2>Безопасность OSPF и BGP</h2>
<h3>OSPF — минимальный набор</h3>
<pre><code class="language-bash">
configure terminal
router ospf 1
! Пассивный режим по умолчанию для всех
passive-interface default
! Явно активируем только нужные
no passive-interface GigabitEthernet0/0
no passive-interface GigabitEthernet0/1
end
</code></pre>
<p>MD5-аутентификация уже настроена выше — не пропускай этот шаг.</p>
<h3>BGP — защита от утечек маршрутов</h3>
<pre><code class="language-bash">
configure terminal
! Максимальное количество маршрутов от провайдера
router bgp 65100
neighbor 198.51.100.1 maximum-prefix 10 80
! 80% - предупреждение, 100% - сессия сбрасывается
! GTSM - TTL security против спуфинга BGP-сессий
neighbor 198.51.100.1 ttl-security hops 1
end
</code></pre>
<pre><code class="language-bash">
! Firewall - разрешаем BGP только от конкретных соседей
ip access-list extended BGP-PEERS
permit tcp host 198.51.100.1 any eq 179
permit tcp any host 198.51.100.1 eq 179
deny tcp any any eq 179
permit ip any any
</code></pre>
<h3>SSH и ограничение управления</h3>
<pre><code class="language-bash">
configure terminal
! SSH вместо telnet
ip ssh version 2
ip ssh authentication-retries 3
line vty 0 4
transport input ssh
access-class MGMT-ONLY in
! Доступ к управлению только из своей сети
ip access-list standard MGMT-ONLY
permit 192.168.1.0 0.0.0.255
deny any
end
</code></pre>
<h2>Резервное копирование конфигураций</h2>
<p>Перед любым изменением в маршрутизации — снимай backup. Без вопросов.</p>
<h3>Что бэкапить</h3>
<ul>
<li>Running configuration всех роутеров</li>
<li>Таблицы маршрутизации (show ip route) — для сравнения до/после</li>
<li>BGP-таблицы если используешь BGP</li>
</ul>
<h3>Как и как часто</h3>
<pre><code class="language-bash">
! Cisco - сохранение конфига на TFTP
copy running-config tftp://192.168.1.100/HQ-Router-backup.cfg
! Или на flash
copy running-config flash:HQ-Router-backup.cfg
! MikroTik
/export compact file=mikrotik-backup
! Автоматический бэкап через EEM (Cisco)
configure terminal
event manager applet DAILY-BACKUP
event timer cron name DAILY cron-entry "0 2 * * *"
action 1.0 cli command "copy running-config tftp://192.168.1.100/router-backup.cfg"
end
</code></pre>
<p>Хранить: минимум 7 дней ротации, лучше 30. Минимум две копии в разных местах.</p>
<h2>Мониторинг OSPF и BGP</h2>
<h3>Что мониторить</h3>
<table>
<thead>
<tr>
<th>Метрика</th>
<th>SNMP OID / команда</th>
<th>Порог тревоги</th>
</tr>
</thead>
<tbody>
<tr>
<td>Состояние OSPF-соседей</td>
<td>ospfNbrState (1.3.6.1.2.1.14.10.1.6)</td>
<td>Не равно 8 (Full)</td>
</tr>
<tr>
<td>Количество OSPF-маршрутов</td>
<td>show ip route summary</td>
<td>Резкое изменение +-10%</td>
</tr>
<tr>
<td>BGP-сессия</td>
<td>bgpPeerState (1.3.6.1.2.1.15.3.1.2)</td>
<td>Не равно 6 (Established)</td>
</tr>
<tr>
<td>Изменения топологии (LSA)</td>
<td>ospfSpfRuns</td>
<td>Более 10 за минуту — нестабильность</td>
</tr>
<tr>
<td>CPU при SPF</td>
<td>show processes cpu sorted</td>
<td>Более 80% длительно</td>
</tr>
</tbody>
</table>
<pre><code class="language-bash">
! Лог-треп на OSPF-события
configure terminal
snmp-server enable traps ospf state-change
snmp-server enable traps bgp
snmp-server host 192.168.1.200 version 2c public ospf bgp
end
</code></pre>
<h2>Обновление: как не сломать маршрутизацию</h2>
<h3>Порядок действий при обновлении IOS</h3>
<ul>
<li>Сними backup конфига и запиши текущую версию IOS</li>
<li>Проверь release notes на изменения в OSPF/BGP поведении</li>
<li>Обновляй сначала филиальные роутеры, HQ — последним</li>
<li>После каждого обновления проверяй: show ip ospf neighbor, show ip route ospf</li>
<li>Дай сети 15 минут стабилизироваться перед следующим роутером</li>
</ul>
<pre><code class="language-bash">
! Откат если что-то пошло не так
configure terminal
! Загрузка резервной версии IOS
boot system flash:iosname-old.bin
end
reload
</code></pre>
<h2>Профилактика: как не сломать снова</h2>
<h3>Правило 1: Документируй топологию и конфиги</h3>
<p>Нарисованная схема — это не бюрократия. Это то, что спасёт тебя в 3 ночи когда что-то упало и нужно быстро понять где искать. Держи актуальную схему в draw.io или <a href="https://www.netbox.dev/" target="_blank" rel="noopener">NetBox</a>. После каждого изменения — обновляй.</p>
<h3>Правило 2: Тестируй отказоустойчивость заранее</h3>
<p>Раз в квартал — плановые тесты. Физически отключи WAN-кабель на HQ и засеки время сходимости. Проверь что все филиалы переключились. Запиши результат. Узнать что фейловер не работает лучше во время планового теста, а не во время реального инцидента.</p>
<pre><code class="language-bash">
! Имитация падения интерфейса без физического отключения
configure terminal
interface GigabitEthernet0/0
shutdown
! Через минуту - проверяем что маршруты пересчитались
show ip route ospf
show ip ospf neighbor
! Возвращаем
interface GigabitEthernet0/0
no shutdown
end
</code></pre>
<h3>Правило 3: Мониторь OSPF-соседство, не только пинг</h3>
<p>OSPF может упасть при живом пинге. Если сосед перешёл в DOWN — пинг между интерфейсами всё равно проходит, но маршруты уже не обновляются. Мониторь именно ospfNbrState через SNMP или через Zabbix/Prometheus.</p>
<pre><code class="language-bash">
! Простой bash-скрипт для проверки OSPF-соседей через SNMP
! Запускай по cron каждые 5 минут
#!/bin/bash
ROUTER="192.168.1.1"
COMMUNITY="public"
# OID состояния соседей: 1.3.6.1.2.1.14.10.1.6
RESULT=$(snmpwalk -v2c -c $COMMUNITY $ROUTER 1.3.6.1.2.1.14.10.1.6 2>/dev/null | grep -v "= INTEGER: 8")
if [ -n "$RESULT" ]; then
echo "OSPF NEIGHBOR DOWN: $RESULT"
# Тут отправка алерта в Slack/Telegram
fi
</code></pre>
<h3>Правило 4: Защита конфигов от случайных изменений</h3>
<p>На Cisco можно заблокировать изменение OSPF-конфига без предварительного подтверждения через Configuration Archive и Change Logging.</p>
<pre><code class="language-bash">
configure terminal
! Ведение журнала изменений конфига
archive
log config
logging enable
notify syslog contenttype plaintext
hidekeys
end
</code></pre>
<h3>Правило 5: Контролируй рост LSDB</h3>
<p>В большой сети LSDB разрастается и начинает жрать RAM. Если у тебя больше 200 роутеров в одной Area — пора думать о разделении на несколько Area или о route summarization.</p>
<pre><code class="language-bash">
! Смотрим размер LSDB
show ip ospf database database-summary
! Если роутеров > 200 в одной Area - добавляем ABR (Area Border Router)
! и делим сеть на area 0 (backbone) + area 1, area 2 и т.д.
! Агрегация маршрутов на ABR - уменьшаем LSDB
router ospf 1
! Если в area 1 есть 192.168.10.0/24, 192.168.11.0/24 ... 192.168.15.0/24
area 1 range 192.168.10.0 255.255.248.0
</code></pre>
<h2>Продвинутые возможности OSPF</h2>
<h3>Multi-area OSPF: когда Area 0 не хватает</h3>
<p>Одна Area 0 справляется с сетями до 50-100 роутеров комфортно. При большем количестве — LSDB растёт, SPF-пересчёт становится дороже по CPU. Решение — разделить на несколько Area.</p>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
CORE["Area 0 - Backbone\nHQ роутеры, ЦОД"]
ABR1["ABR-1\nArea 0 + Area 1"]
ABR2["ABR-2\nArea 0 + Area 2"]
A1["Area 1\nФилиал Москва"]
A2["Area 2\nФилиал СПб"]
CORE --> ABR1
CORE --> ABR2
ABR1 --> A1
ABR2 --> A2
style CORE fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style ABR1 fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style ABR2 fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style A1 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style A2 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
</pre>
<pre><code class="language-bash">
! Настройка ABR (Area Border Router) - роутер в двух Area
configure terminal
interface GigabitEthernet0/0
! Интерфейс к Area 0
ip ospf 1 area 0
interface GigabitEthernet0/1
! Интерфейс к Area 1
ip ospf 1 area 1
router ospf 1
router-id 10.0.0.1
! Суммаризация маршрутов из Area 1 в Area 0
area 1 range 192.168.10.0 255.255.255.0
end
</code></pre>
<h3>Stub Area: для удалённых офисов</h3>
<p>Stub area — это Area, в которую не передаются External LSA (Type 5). Маленький офис не нуждается во всей топологии — ему достаточно default route от ABR. Экономит RAM и упрощает конвергенцию.</p>
<pre><code class="language-bash">
! На ABR - настраиваем Area 1 как stub
configure terminal
router ospf 1
area 1 stub
end
! На всех роутерах Area 1 - то же самое
configure terminal
router ospf 1
area 1 stub
end
! Все роутеры в одной Area должны иметь одинаковый тип Area
</code></pre>
<h3>Виртуальный канал OSPF (Virtual Link)</h3>
<p>Если по какой-то причине Area не имеет прямого соединения с Area 0 — нужен virtual link. Это редкий случай, но встречается при слиянии компаний когда две независимые OSPF-сети нужно соединить.</p>
<pre><code class="language-bash">
! Virtual link через транзитную Area 2
! На обоих ABR, которые граничат с Area 2
router ospf 1
area 2 virtual-link [Router-ID удалённого ABR]
</code></pre>
<h2>BGP: продвинутые политики</h2>
<h3>AS-PATH prepend: управление входящим трафиком</h3>
<p>Local Preference управляет исходящим трафиком — через какой ISP уходить. AS-PATH prepend управляет входящим — через какой ISP к тебе приходить. Чем длиннее AS-PATH, тем менее предпочтителен маршрут для удалённых роутеров.</p>
<pre><code class="language-bash">
configure terminal
! ISP-2 - резервный. Делаем AS-PATH длиннее через него
route-map ISP2-OUT permit 10
! Добавляем свой AS три раза - маршрут станет менее привлекательным
set as-path prepend 65100 65100 65100
router bgp 65100
neighbor 203.0.113.254 route-map ISP2-OUT out
end
! Применяем без сброса сессии
clear ip bgp 203.0.113.254 soft out
</code></pre>
<h3>MED (Multi-Exit Discriminator): для двух точек подключения к одному ISP</h3>
<p>Если к одному провайдеру подключён в двух точках — MED говорит провайдеру через какую точку лучше слать трафик к тебе.</p>
<pre><code class="language-bash">
configure terminal
! Основная точка - низкий MED (предпочтительнее)
route-map PRIMARY-POINT permit 10
set metric 100
! Резервная точка - высокий MED
route-map BACKUP-POINT permit 10
set metric 200
router bgp 65100
neighbor 198.51.100.1 route-map PRIMARY-POINT out
neighbor 198.51.100.5 route-map BACKUP-POINT out
end
</code></pre>
<h3>BGP Community: теггирование маршрутов</h3>
<p>Community — это тег на маршруте, который помогает применять политики без написания отдельных prefix-list. Провайдеры используют community для управления локальными предпочтениями.</p>
<pre><code class="language-bash">
configure terminal
! Помечаем анонсы для ISP-1 как основные
route-map MARK-PRIMARY permit 10
set community 65000:100
! Помечаем анонсы для ISP-2 как резервные
route-map MARK-BACKUP permit 10
set community 65001:200
router bgp 65100
neighbor 198.51.100.1 route-map MARK-PRIMARY out
neighbor 203.0.113.254 route-map MARK-BACKUP out
! Разрешаем передавать community атрибут
neighbor 198.51.100.1 send-community
end
</code></pre>
<h3>BGP на MikroTik RouterOS 7</h3>
<pre><code class="language-bash">
# Создаём BGP instance
/routing bgp instance
add name=bgp-main as=65100 router-id=1.1.1.1
# Добавляем соседей (peers)
/routing bgp peer
add name=ISP-1 instance=bgp-main remote-address=198.51.100.1 \
remote-as=65000 out-filter=OUR-BLOCK-OUT in-filter=ONLY-DEFAULT-IN
add name=ISP-2 instance=bgp-main remote-address=203.0.113.254 \
remote-as=65001 out-filter=OUR-BLOCK-OUT in-filter=ONLY-DEFAULT-IN
# Routing filters (MikroTik RouterOS 7)
/routing filter rule
add chain=OUR-BLOCK-OUT rule="if (dst == 203.0.113.0/24) { accept } else { reject }"
add chain=ONLY-DEFAULT-IN rule="if (dst == 0.0.0.0/0) { accept } else { reject }"
# Анонсируем наш блок
/routing bgp network
add network=203.0.113.0/24
# Проверка
/routing bgp peer print
/routing bgp peer print detail
</code></pre>
<h2>Замена статических маршрутов: план миграции</h2>
<p>Не делай migration в одно окно. Делай поэтапно с возможностью отката на каждом шаге.</p>
<h3>Этап 0: Подготовка</h3>
<p>Сними backup всех конфигов. Запиши текущие статические маршруты на каждом роутере. Запланируй maintenance window — минимум 2 часа. Убедись что у тебя есть out-of-band доступ к роутерам (консоль или управление через отдельный интерфейс).</p>
<h3>Этап 1: Запусти OSPF параллельно со статикой</h3>
<pre><code class="language-bash">
! Включаем OSPF - статика остаётся, имеет приоритет (AD=1 vs AD=110)
configure terminal
router ospf 1
router-id 1.1.1.1
interface GigabitEthernet0/0
ip ospf 1 area 0
end
! Проверяем что OSPF-маршруты появились (они ещё не активны - вытеснены статикой)
show ip route ospf
</code></pre>
<h3>Этап 2: Проверь что OSPF видит все нужные сети</h3>
<pre><code class="language-bash">
! Сравни список OSPF-маршрутов со списком статических
show ip route ospf
show ip route static
! Если какой-то сети нет в OSPF - не переходи к следующему этапу
! Найди почему она не анонсируется и исправь
</code></pre>
<h3>Этап 3: Удаляй статику по одному маршруту</h3>
<pre><code class="language-bash">
! Удаляем один статический маршрут
no ip route 192.168.10.0 255.255.255.0 10.0.0.2
! Немедленно проверяем что OSPF подхватил
show ip route 192.168.10.0
! Тест доступности
ping 192.168.10.1
! Если всё OK - переходим к следующему маршруту
! Если нет - возвращаем статику
ip route 192.168.10.0 255.255.255.0 10.0.0.2
</code></pre>
<h3>Этап 4: После полного перехода</h3>
<pre><code class="language-bash">
! Убеждаемся что статики не осталось
show ip route static
! Финальный backup конфига
write memory
copy running-config tftp://192.168.1.100/post-ospf-migration.cfg
</code></pre>
<p>Весь процесс миграции для сети из 5 роутеров занимает 2-3 часа при аккуратном подходе. Торопиться некуда — у тебя есть возможность откатиться на каждом шаге.</p>
<h2>Альтернативные решения</h2>
<h3>IP SLA + статика — когда BGP избыточен</h3>
<p>Два провайдера, нужен простой фейловер без BGP. IP SLA проверяет доступность через каждый канал и переключает маршрут.</p>
<pre><code class="language-bash">
configure terminal
! Трекер - проверяем доступность 8.8.8.8 через ISP-1
ip sla 1
icmp-echo 8.8.8.8 source-interface GigabitEthernet0/2
frequency 5
ip sla schedule 1 life forever start-time now
track 1 ip sla 1 reachability
! Основной маршрут через ISP-1 - активен пока track 1 UP
ip route 0.0.0.0 0.0.0.0 198.51.100.1 10 track 1
! Резервный маршрут через ISP-2 - большая метрика, включается при падении трека
ip route 0.0.0.0 0.0.0.0 203.0.113.1 20
end
</code></pre>
<h3>FRRouting на Linux — полноценный OSPF/BGP без Cisco</h3>
<p>Если нет бюджета на Cisco — <a href="https://frrouting.org/" target="_blank" rel="noopener">FRRouting</a> даёт тот же функционал на обычном Linux-сервере. Синтаксис почти идентичен Cisco.</p>
<pre><code class="language-bash">
# Установка FRRouting на Ubuntu
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo apt-key add -
echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | sudo tee -a /etc/apt/sources.list.d/frr.list
sudo apt update && sudo apt install frr frr-pythontools
# Включаем OSPF и BGP демоны
sudo nano /etc/frr/daemons
# ospfd=yes
# bgpd=yes
sudo systemctl restart frr
# Настройка через vtysh
sudo vtysh
configure terminal
router ospf
router-id 1.1.1.1
network 10.0.0.0/30 area 0
end
</code></pre>
<h2>FAQ</h2>
<h3>Почему OSPF не видит соседей хотя пинг работает?</h3>
<p>Самые частые причины: firewall блокирует IP-протокол 89 (не TCP/UDP, а именно 89), интерфейс в passive mode, несовпадение Area ID или таймеров Hello/Dead. Проверь по порядку: show ip ospf interface — убедись что интерфейс в нужной Area и не passive. Если всё верно — debug ip ospf adj и смотри что происходит при попытке установить соседство. Не забудь undebug all после диагностики.</p>
<h3>Как проверить что OSPF пересчитал маршруты после падения канала?</h3>
<p>Три команды: show ip ospf neighbor покажет что соседство упало, show ip route ospf покажет новые маршруты через резервный путь, show ip ospf покажет счётчик SPF runs — если он вырос, пересчёт произошёл. Для проверки скорости сходимости используй continuous ping: ping 192.168.20.1 repeat 1000, и в процессе физически отключи кабель — посчитай сколько пакетов потерял.</p>
<h3>Что если нужен OSPF между Cisco и MikroTik?</h3>
<p>OSPF — открытый стандарт, работает между любыми производителями. Главное: одинаковые Area, совпадающие таймеры Hello/Dead, одинаковый тип аутентификации и ключ. На p2p-каналах убедись что оба конца в режиме point-to-point — это убирает выборы DR/BDR и устраняет половину проблем совместимости.</p>
<h3>Можно ли запустить OSPF параллельно со статикой при миграции?</h3>
<p>Да, и это правильный подход. Запусти OSPF, проверь что маршруты появились. Статика с Administrative Distance 1 будет иметь приоритет над OSPF (AD 110). Когда убедишься что OSPF работает корректно — удаляй статику по одному маршруту. Откатиться всегда просто: ip route обратно.</p>
<h3>Нужен ли BGP если есть только один провайдер?</h3>
<p>Нет. Один провайдер — статический дефолтный маршрут плюс OSPF для анонса внутри сети. BGP оправдан от двух провайдеров и выше, или если у тебя есть собственный AS и публичный IP-блок. В остальных случаях это избыточная сложность.</p>
<h3>Почему AD у OSPF равна 110, а не меньше?</h3>
<p>Administrative Distance — условный приоритет источника маршрута. Connected: AD=0, Static: AD=1, eBGP: AD=20, OSPF: AD=110, RIP: AD=120. Статика с AD=1 имеет приоритет над OSPF с AD=110 намеренно: явно прописанный маршрут — это сознательное решение администратора, OSPF не должен его перекрывать. Это же позволяет при миграции запускать OSPF параллельно — статика активна пока ты сам её не уберёшь.</p>
<h3>Как быстро OSPF переключается при падении канала?</h3>
<p>По умолчанию: Dead-интервал 40 секунд + SPF-пересчёт 1-5 секунд = 41-45 секунд простоя. С таймерами 2/8 (Hello/Dead): 8-10 секунд. С BFD 300 мс / multiplier 3: менее 1 секунды. Для офисных приложений хватает 8-10 секунд. BFD нужен если возишь VoIP или real-time трафик.</p>
<h3>Что такое ECMP и как включить?</h3>
<p>Equal Cost Multi-Path — балансировка трафика между несколькими маршрутами одинаковой метрики. Если два WAN-канала одинаковой полосы — OSPF будет использовать оба. По умолчанию до 4 путей, настраивается до 16.</p>
<pre><code class="language-bash">
configure terminal
router ospf 1
maximum-paths 8
end
! Проверка ECMP в таблице маршрутизации
show ip route 192.168.30.0
! O 192.168.30.0/24 [110/2] via 10.0.0.2, GigabitEthernet0/0
! [110/2] via 10.0.0.6, GigabitEthernet0/1
! Оба маршрута активны одновременно
</code></pre>
<h2>Результат: что теперь работает</h2>
<p>Ты перешёл со статики на OSPF. Роутеры сами обмениваются маршрутами, сами пересчитывают пути при падении канала, сами уведомляют соседей об изменениях. Добавить новый <a href="https://it-apteka.com/mikrotik-hap-obzor-vseh-modelej-harakteristiki-i-nastrojka-routera/" title="MikroTik hAP: обзор всех моделей, характеристики и настройка роутера" target="_blank" rel="noopener" data-wpil-monitor-id="2155">роутер — это настройка</a> одного устройства, не правка конфигов на всех остальных. Это ценно не в день запуска, а через полгода когда ты добавишь четвёртый филиал.</p>
<p>Если настроил BGP с двумя провайдерами — у тебя автоматическое резервирование на уровне интернет-подключения. ISP-1 упал — трафик ушёл через ISP-2, и ты узнаешь об этом из мониторинга, а не от пользователей которые не могут зайти в облако.</p>
<p>Если что-то не заработало — пиши в комментариях. Укажи: топологию, оборудование, вывод show ip ospf neighbor и show ip route ospf. Разберём конкретную ситуацию.</p>
"Подпишись
<br />
Практические разборы по сетям, скрипты для автоматизации, реальные кейсы из продакшна. Без воды и маркетинговой шелухи.<br />
Коротко о главном
Статические маршруты не масштабируются. При трёх и более роутерах и нескольких каналах переходи на OSPF — он сам узнаёт о сетях, сам пересчитывает маршруты при падении канала, работает на любом железе. BGP нужен только если у тебя два провайдера и свой AS. Время
настройки OSPF с нуля — около часа. Время разгребания последствий неправильной настройки BGP — не берусь предсказывать.
Диагноз: когда статика начинает болеть
Поднял офис. Три роутера, два филиала, VPN между ними. Прописал статику на каждом — работает. Потом добавился четвёртый роутер, пятый, резервный канал к провайдеру. И в какой-то момент ты уже держишь в голове двадцать маршрутов на шести устройствах, а когда падает один канал — полчаса правишь конфиги вручную.
Знакомо? Это не твоя ошибка — это просто предел статической маршрутизации.
Что получишь после этой статьи: рабочий OSPF с аутентификацией на Cisco и MikroTik, понимание BGP на уровне «подключить второго провайдера и не сломать интернет», плюс разбор самых частых ошибок с командами для диагностики. Примерно 1,5-2 часа на вдумчивое чтение и настройку.
Что нужно: доступ к роутерам по SSH или консоли, базовые знания IP-адресации, нарисованная топология сети. Последнее — обязательно. Без схемы настраивать OSPF это как собирать мебель без инструкции.
Что разберём:
- Когда переходить со статики и почему
- Как работает OSPF изнутри — коротко, без воды
- Пошаговая настройка на Cisco IOS и MikroTik
- OSPF с MD5-аутентификацией
- Базовая настройка BGP для двух провайдеров
- Troubleshooting: 7 реальных ошибок и их решение
- Безопасность, мониторинг, бэкап конфигов
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Статическая маршрутизация"] --> B{"3+ роутера\nили 2+ канала?"}
B -- "Нет" --> C["Оставь статику\nпроще и надёжнее"]
B -- "Да" --> D["Переходи на OSPF"]
D --> E["Внутри компании\nOSPF area 0"]
D --> F{"Есть 2+\nпровайдера?"}
F -- "Нет" --> G["OSPF + default route\nот провайдера"]
F -- "Да" --> H["BGP на границе\n+ OSPF внутри"]
style A fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
style B fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style D fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style G fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style H fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
Причины: почему статика не тянет
Конкретно. Без философии.
1. Нет автоматического восстановления при отказе
Упал канал — статика молчит. Пакеты идут в никуда, пока ты не придёшь и не уберёшь маршрут вручную. OSPF обнаружит отказ за 40 секунд (по умолчанию), с BFD — за 1 секунду, и перестроит таблицу автоматически.
2. Линейный рост сложности
Добавил один роутер — правишь конфиги на всех остальных. У тебя 10 роутеров и добавился 11-й: 10 правок вручную. При OSPF — настраиваешь только 11-й.
3. Нет балансировки нагрузки
Статика не умеет сама распределять трафик по нескольким каналам одинаковой стоимости. OSPF поддерживает ECMP (Equal Cost Multi-Path) — несколько маршрутов одновременно.
4. Ошибки — молча
Опечатался в маске или следующем хопе — статика это проглотит. Трафик пойдёт не туда, и ты будешь искать проблему часами. OSPF не даст установить некорректное соседство.
5. Не масштабируется в несколько площадок
Три офиса, пять VPN-туннелей, два дата-центра. Статические таблицы превращаются в кашу, которую никто не хочет поддерживать. А потом уходит тот, кто это строил, и остаётся legacy которое «трогать нельзя, само работает».
База: как работает OSPF
Понимать протокол нужно хотя бы на уровне «что происходит», иначе при отладке будешь тыкать наугад.
Этапы работы OSPF
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'sequence': {
'mirrorActors': false,
'messageAlign': 'center',
'actorMargin': 150,
'width': 180,
'noteMargin': 12
}
}}%%
sequenceDiagram
participant R1 as Router-1
participant R2 as Router-2
R1->>R2: Hello (224.0.0.5)
R2->>R1: Hello (224.0.0.5)
R1->>R2: DBD - Database Description
R2->>R1: DBD - Database Description
R1->>R2: LSR - Link State Request
R2->>R1: LSU - Link State Update
R1->>R2: LSAck - подтверждение
Note over R1,R2: State = FULL, соседство установлено
R1->>R2: Hello каждые 10 сек
R2->>R1: Hello каждые 10 сек
Шесть состояний OSPF соседства по порядку: Down, Init, 2-Way, Exstart, Exchange, Loading, Full. Тебя интересует только одно — Full. Всё остальное промежуточное. Если застрял не в Full — читай troubleshooting ниже.
Ключевые понятия
| Термин |
Что это |
Зачем знать |
| Router ID |
Уникальный ID роутера в OSPF (формат IPv4) |
Задавай вручную, иначе роутер выберет сам и это создаст сюрпризы |
| Area |
Логическая группа роутеров |
Area 0 — обязательная backbone area. Все остальные должны граничить с ней |
| LSDB |
Link State Database — полная карта топологии |
Должна быть одинаковой на всех роутерах одной Area |
| Cost |
Метрика OSPF = 100 Мбит / пропускная способность |
GigE cost=1, FastE cost=10, старые 10Мбит cost=100 |
| DR / BDR |
Designated Router / Backup DR |
На Ethernet-сегментах выбирается один DR для экономии LSA-трафика |
| Hello / Dead |
Таймеры приветствия и смерти |
Hello=10 сек, Dead=40 сек по умолчанию. Должны совпадать у соседей |
| Wildcard mask |
Инвертированная маска подсети |
/24 = wildcard 0.0.0.255, /30 = 0.0.0.3, /32 = 0.0.0.0 |
Выбор протокола: OSPF, BGP, RIP или EIGRP
| Протокол |
Тип |
Когда использовать |
Когда не использовать |
| RIP v2 |
Distance Vector |
Учебные лабы |
Никогда в продакшне. Метрика только в хопах, конвергенция медленная |
| OSPF |
Link State |
Корпоративные сети, филиалы, ЦОД |
Сеть из 1-2 роутеров — избыточно |
| EIGRP |
Hybrid |
Сети только на Cisco |
Если есть хоть один не-Cisco — проблемы |
| IS-IS |
Link State |
Провайдерские сети, крупные ISP |
Корпоративные сети — OSPF проще |
| BGP |
Path Vector |
Подключение к провайдерам, несколько AS |
Внутри одной компании — OSPF справится |
Подготовка к настройке
Системные требования
| Компонент |
Минимум |
Рекомендуется |
| Cisco IOS |
12.4(T) |
15.x и новее |
| MikroTik RouterOS |
6.x |
7.x (OSPF переработан) |
| Juniper JunOS |
12.1 |
20.x и новее |
| FRRouting (Linux) |
7.x |
9.x и новее |
| RAM на роутере |
64 МБ |
256+ МБ при большой LSDB |
На момент публикации актуальна Cisco IOS 17.x, MikroTik RouterOS 7.14. Перед настройкой проверь свежие релизы на официальных сайтах.
Топология для примеров
Буду использовать одну топологию на протяжении всей статьи. Нарисуй у себя то же самое.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 60, 'rankSpacing': 60}
}}%%
flowchart TD
ISP1["ISP-1\nAS 65000\n198.51.100.1"]
ISP2["ISP-2\nAS 65001\n203.0.113.1"]
HQ["HQ-Router\nRouter-ID 1.1.1.1\nLoopback 1.1.1.1/32\nGe0/0: 10.0.0.1/30\nGe0/1: 10.0.0.5/30\nGe0/2: 10.1.0.1/30\nGe0/3: 10.1.0.5/30"]
BR1["Branch1-Router\nRouter-ID 2.2.2.2\nGe0/0: 10.0.0.2/30\nGe0/1: 192.168.10.1/24"]
BR2["Branch2-Router\nRouter-ID 3.3.3.3\nGe0/0: 10.0.0.6/30\nGe0/1: 192.168.20.1/24"]
LAN1["LAN Filial-1\n192.168.10.0/24"]
LAN2["LAN Filial-2\n192.168.20.0/24"]
ISP1 --> HQ
ISP2 --> HQ
HQ --> BR1
HQ --> BR2
BR1 --> LAN1
BR2 --> LAN2
style HQ fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style BR1 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style BR2 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style ISP1 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style ISP2 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,color:#1e293b
style LAN1 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style LAN2 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
Порты OSPF и BGP
| Протокол |
Транспорт |
Порт / адрес |
Назначение |
| OSPF Hello |
IP протокол 89 |
Multicast 224.0.0.5 |
Обнаружение соседей, все OSPF роутеры |
| OSPF DR/BDR |
IP протокол 89 |
Multicast 224.0.0.6 |
Трафик к DR и BDR |
| BGP |
TCP |
179 |
Сессии между BGP peers |
| BFD |
UDP |
3784 (control), 3785 (echo) |
Быстрое обнаружение отказов |
Что сделать до настройки
- Нарисуй топологию со всеми IP-адресами
- Убедись, что все интерфейсы подняты и роутеры пингуют друг друга напрямую
- Сними backup конфигов: copy running-config tftp или export compact на MikroTik
- Запиши Router ID, который будешь использовать (рекомендую loopback-адреса)
- Определи, какие сети нужно анонсировать в OSPF
Настройка OSPF на Cisco IOS: шаги
Шаг 1. Настрой интерфейсы и loopback
Loopback не падает никогда — в отличие от физических интерфейсов. Используй его как Router ID и для управления роутером.
HQ-Router:
configure terminal
interface Loopback0
ip address 1.1.1.1 255.255.255.255
description OSPF-Router-ID
interface GigabitEthernet0/0
description Link-to-Branch1
ip address 10.0.0.1 255.255.255.252
no shutdown
interface GigabitEthernet0/1
description Link-to-Branch2
ip address 10.0.0.5 255.255.255.252
no shutdown
end
write memory
Branch1-Router:
configure terminal
interface Loopback0
ip address 2.2.2.2 255.255.255.255
description OSPF-Router-ID
interface GigabitEthernet0/0
description Link-to-HQ
ip address 10.0.0.2 255.255.255.252
no shutdown
interface GigabitEthernet0/1
description LAN-Filial1
ip address 192.168.10.1 255.255.255.0
no shutdown
end
write memory
Branch2-Router — аналогично, IP-адреса по топологии выше.
Проверка перед OSPF — убедись что пинг работает:
! С HQ пингуем оба филиала
ping 10.0.0.2 source 10.0.0.1
ping 10.0.0.6 source 10.0.0.5
Если пинг не проходит
Не переходи к OSPF. Сначала разберись с физической связностью. show interface покажет состояние интерфейса, show ip interface brief — краткий статус всех. OSPF не поможет если L1/L2 не работает.
Шаг 2. Включи процесс OSPF и задай Router ID
Process ID — локальное число, не нужно совпадение на разных роутерах. Router ID — уникальный в масштабах всего OSPF домена.
HQ-Router:
configure terminal
router ospf 1
router-id 1.1.1.1
log-adjacency-changes detail
end
Branch1-Router:
configure terminal
router ospf 1
router-id 2.2.2.2
log-adjacency-changes detail
end
Branch2-Router — то же самое, router-id 3.3.3.3.
Шаг 3. Анонсируй сети в OSPF
Два метода. Первый — через network в процессе OSPF, второй — через ip ospf прямо на интерфейсе. Второй точнее — явно виден какой интерфейс участвует.
Метод 1 — через network (Cisco-классика):
! HQ-Router
configure terminal
router ospf 1
! Сеть к филиалу 1
network 10.0.0.0 0.0.0.3 area 0
! Сеть к филиалу 2
network 10.0.0.4 0.0.0.3 area 0
! Loopback
network 1.1.1.1 0.0.0.0 area 0
end
! Branch1-Router
configure terminal
router ospf 1
network 10.0.0.0 0.0.0.3 area 0
network 192.168.10.0 0.0.0.255 area 0
network 2.2.2.2 0.0.0.0 area 0
end
Метод 2 — через интерфейс (рекомендуется):
! HQ-Router - альтернативный способ
configure terminal
interface Loopback0
ip ospf 1 area 0
interface GigabitEthernet0/0
ip ospf 1 area 0
interface GigabitEthernet0/1
ip ospf 1 area 0
end
LAN-интерфейсы филиалов переведи в passive mode — они анонсируются в OSPF, но Hello не отправляют. Это снижает нагрузку и убирает лишний трафик в сеть конечных пользователей.
! На Branch1 и Branch2
configure terminal
router ospf 1
passive-interface GigabitEthernet0/1
end
P2P-каналы между роутерами переведи в режим point-to-point. Так не нужны выборы DR/BDR и сходимость быстрее.
! На всех WAN-интерфейсах между роутерами
configure terminal
interface GigabitEthernet0/0
ip ospf network point-to-point
end
Шаг 4. Настрой OSPF с аутентификацией MD5
Без аутентификации любой роутер в сегменте может стать OSPF-соседом и вбросить в сеть левые маршруты. Это и атака, и случайная ошибка. Настраивай аутентификацию всегда.
! HQ-Router - аутентификация на интерфейсе к Branch1
configure terminal
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
interface GigabitEthernet0/1
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
end
! Branch1-Router - тот же ключ, иначе соседство не установится
configure terminal
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 SecureOSPF-Key-2024
end
Ключ одинаковый на обоих концах
MD5-ключ должен совпадать на обоих роутерах для каждого канала. Если поменял ключ на одном — сразу меняй на другом. Иначе соседство упадёт. Храни ключи в менеджере паролей, не в блокноте.
Шаг 5. Оптимизируй таймеры сходимости
Стандартные таймеры Hello/Dead (10/40 сек) дают сходимость за 40-50 секунд. Для корпоративных сетей это много. Уменьши до 2/8 или включи BFD.
Вариант 1 — быстрые Hello-таймеры:
configure terminal
interface GigabitEthernet0/0
! Hello каждые 2 секунды, Dead через 8
ip ospf hello-interval 2
ip ospf dead-interval 8
end
Вариант 2 — BFD (лучше, работает быстрее):
configure terminal
interface GigabitEthernet0/0
! BFD: интервал 300 мс, multiplier 3 = обнаружение за ~900 мс
bfd interval 300 min_rx 300 multiplier 3
ip ospf bfd
end
router ospf 1
bfd all-interfaces
end
Настройка OSPF на MikroTik RouterOS 7
В RouterOS 7 OSPF переработан — синтаксис изменился. Если у тебя RouterOS 6 — часть команд будет другой.
MikroTik — настройка через CLI
HQ-Router на MikroTik:
# Создаём OSPF instance
/routing ospf instance
add name=ospf-main router-id=1.1.1.1
# Создаём Area 0
/routing ospf area
add instance=ospf-main name=backbone area-id=0.0.0.0
# Добавляем интерфейсы в OSPF
/routing ospf interface-template
add instance=ospf-main area=backbone interfaces=ether1 type=ptp \
auth=md5 auth-key="SecureOSPF-Key-2024"
add instance=ospf-main area=backbone interfaces=ether2 type=ptp \
auth=md5 auth-key="SecureOSPF-Key-2024"
# LAN - пассивный
add instance=ospf-main area=backbone interfaces=bridge1 passive=yes
# Анонсируем loopback
/routing ospf interface-template
add instance=ospf-main area=backbone interfaces=lo type=ptp
Проверка соседства на MikroTik:
/routing ospf neighbor print
/ip route print where routing-mark=ospf-main
Проверка: OSPF работает или нет
После настройки — три команды, которые дадут полную картину.
Cisco — команды проверки
! Команда 1 - соседи
show ip ospf neighbor
! Ожидаемый вывод:
! Neighbor ID Pri State Dead Time Address Interface
! 2.2.2.2 1 FULL/ - 00:00:35 10.0.0.2 GigabitEthernet0/0
! 3.3.3.3 1 FULL/ - 00:00:38 10.0.0.6 GigabitEthernet0/1
! State FULL - всё в порядке
! Если FULL/ - (с дефисом) - это p2p интерфейс, DR/BDR не выбираются
! Команда 2 - маршруты от OSPF
show ip route ospf
! Ожидаемый вывод:
! 192.168.10.0/24 [110/2] via 10.0.0.2, GigabitEthernet0/0
! 192.168.20.0/24 [110/2] via 10.0.0.6, GigabitEthernet0/1
! O - маршрут от OSPF, [110/2] - AD=110, метрика=2
! Команда 3 - база данных топологии
show ip ospf database summary
! Все роутеры одной Area должны иметь одинаковую LSDB
! Количество LSA должно совпадать
! Тест сквозной связности
! С HQ пингуем LAN-сеть Branch2 через Branch1-маршрут
ping 192.168.20.1 source 192.168.10.1 repeat 10
Результат: если получил 10 ответов — OSPF работает корректно.
Настройка BGP: два провайдера, без катастроф
BGP — это не просто протокол, это политика маршрутизации между автономными системами. Ошибка в BGP-конфиге может повлиять на связность за пределами твоей сети. Это не страшилка — это факт, который нужно держать в голове.
Когда реально нужен BGP
- Два или более провайдера, нужна балансировка или резервирование
- Есть собственный номер AS (выдаётся через RIPE/ARIN)
- Есть собственный публичный IPv4/IPv6-блок для анонса
- Нужен контроль входящего трафика от разных провайдеров
Если у тебя просто два провайдера и нужен фейловер — сначала посмотри на IP SLA + static routes с разной метрикой. Это проще BGP и решает 80% задач.
Архитектура: OSPF внутри, BGP на границе
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
I1["ISP-1\neBGP AS65000"]
I2["ISP-2\neBGP AS65001"]
BR["Border Router\neBGP к провайдерам\nOSPF к внутренним"]
HQ["HQ-Router\nOSPF"]
B1["Branch1\nOSPF"]
B2["Branch2\nOSPF"]
I1 -- "eBGP" --> BR
I2 -- "eBGP" --> BR
BR -- "OSPF default-route" --> HQ
HQ --> B1
HQ --> B2
style I1 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px
style I2 fill:#f8fafc,stroke:#94a3b8,stroke-width:2px
style BR fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style HQ fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B1 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B2 fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
Шаг 1. Настройка eBGP с двумя провайдерами
Сценарий: у тебя AS65100, публичный блок 203.0.113.0/24, два провайдера.
configure terminal
! BGP процесс с твоим AS-номером
router bgp 65100
bgp router-id 1.1.1.1
bgp log-neighbor-changes
! Анонсируем свой публичный блок
network 203.0.113.0 mask 255.255.255.0
! Сосед провайдер 1
neighbor 198.51.100.1 remote-as 65000
neighbor 198.51.100.1 description ISP-1-Primary
! Получаем только default route, не весь интернет
neighbor 198.51.100.1 prefix-list ONLY-DEFAULT in
! Анонсируем наш блок провайдеру
neighbor 198.51.100.1 prefix-list OUR-BLOCK out
! Сосед провайдер 2
neighbor 203.0.113.254 remote-as 65001
neighbor 203.0.113.254 description ISP-2-Backup
neighbor 203.0.113.254 prefix-list ONLY-DEFAULT in
neighbor 203.0.113.254 prefix-list OUR-BLOCK out
end
! Prefix-list - только default route от провайдеров
ip prefix-list ONLY-DEFAULT permit 0.0.0.0/0
! Prefix-list - только наш блок в сторону провайдеров
ip prefix-list OUR-BLOCK permit 203.0.113.0/24
Никогда не принимай full BGP table без явной цели
Full table от провайдера — это 900 000+ маршрутов. Без достаточного RAM роутер упадёт. Без понимания BGP-политик ты можешь стать транзитным узлом для чужого трафика. Всегда фильтруй входящие маршруты prefix-list. Это не паранойя — это базовая гигиена.
Шаг 2. Приоритизация провайдеров через Local Preference
ISP-1 основной, ISP-2 резервный. Local Preference работает внутри AS — чем выше, тем предпочтительнее.
configure terminal
! Route-map для ISP-1 - высокий приоритет
route-map ISP1-IN permit 10
set local-preference 200
! Route-map для ISP-2 - низкий приоритет
route-map ISP2-IN permit 10
set local-preference 100
! Применяем к соседям
router bgp 65100
neighbor 198.51.100.1 route-map ISP1-IN in
neighbor 203.0.113.254 route-map ISP2-IN in
end
Теперь весь исходящий трафик идёт через ISP-1, при его падении — автоматически переключается на ISP-2.
Шаг 3. Редистрибуция default route в OSPF
Внутренние роутеры должны знать куда слать пакеты в интернет. Рассказываем им через OSPF.
configure terminal
router ospf 1
! Анонсируем default route в OSPF только если BGP его знает
default-information originate
end
Проверка BGP
! Статус соседства
show ip bgp summary
! Ожидаемый вывод:
! Neighbor V AS MsgRcvd MsgSent Up/Down State/PfxRcd
! 198.51.100.1 4 65000 452 448 03:22:11 1
! 203.0.113.254 4 65001 441 437 03:22:08 1
! PfxRcd = 1 - получен один маршрут (default route), всё верно
! BGP-таблица
show ip bgp
! Что анонсируем провайдерам
show ip bgp neighbors 198.51.100.1 advertised-routes
! Что получаем от провайдеров
show ip bgp neighbors 198.51.100.1 received-routes
Осложнения: 7 реальных ошибок
Ошибка 1: Соседство OSPF не устанавливается
show ip ospf neighbor пустой или соседи в состоянии DOWN.
| Причина |
Диагностика |
Решение |
| Нет физической связности |
ping [IP соседа] |
Проверь кабель, no shutdown на интерфейсах |
| Интерфейс не в OSPF |
show ip ospf interface |
Добавь network или ip ospf area |
| Разные Area ID |
show ip ospf interface detail |
Приведи к одной Area |
| Несовпадение Hello/Dead |
show ip ospf interface detail |
ip ospf hello-interval / dead-interval |
| Блокировка firewall |
debug ip ospf adj |
Разреши протокол 89, multicast 224.0.0.5 |
| MTU mismatch |
show interface MTU |
ip ospf mtu-ignore или выровняй MTU |
| Несовпадение MD5-ключей |
debug ip ospf adj |
Проверь ключи на обоих концах |
! Диагностика MTU на интерфейсе
show interface GigabitEthernet0/0 | include MTU
! Если MTU разные - либо выровняй, либо:
configure terminal
interface GigabitEthernet0/0
ip ospf mtu-ignore
! Детальный лог соседства
debug ip ospf adj
! После диагностики - обязательно выключи debug:
undebug all
Ошибка 2: Соседи застряли в состоянии EXSTART/EXCHANGE
Это классика MTU mismatch. Один роутер пытается отправить DBD-пакет, другой его не принимает из-за размера.
! Проверь MTU на обоих роутерах
show interface GigabitEthernet0/0 | include MTU
! Временное решение
interface GigabitEthernet0/0
ip ospf mtu-ignore
! Нормальное решение - выровняй MTU на обоих интерфейсах
interface GigabitEthernet0/0
mtu 1500
Ошибка 3: Соседство FULL, но маршрутов нет
! Проверяем LSDB - есть ли нужная сеть
show ip ospf database | include 192.168.10
! Если сети нет в LSDB - она не анонсируется
! Проверяем на Branch1 что настроен network
show run | section ospf
! Проверяем конкурирующие маршруты
show ip route 192.168.10.0
! Если есть статика с AD ниже 110 - она перекрывает OSPF
Ошибка 4: Медленная сходимость после падения канала
По умолчанию Dead-интервал 40 секунд. Плюс время на пересчёт SPF. Итого 45-60 секунд недоступности. Решение — BFD или уменьшение таймеров.
! Уменьшаем таймеры SPF
configure terminal
router ospf 1
timers throttle spf 50 200 5000
timers throttle lsa 50 200 5000
Ошибка 5: BGP сессия не поднимается
! Проверяем статус
show ip bgp summary
! Смотрим на State - если не Established:
! Idle - нет маршрута до соседа, проверь физику
! Active - TCP соединение не устанавливается, проверь firewall (порт 179)
! Connect - проблемы с TCP handshake
! Проверяем доступность BGP-соседа
ping 198.51.100.1
! Проверяем что порт 179 не заблокирован
telnet 198.51.100.1 179
Ошибка 6: BGP сессия UP, но маршрутов нет
! Смотрим что получаем
show ip bgp neighbors 198.51.100.1 received-routes
! Если пусто - провайдер ничего не анонсирует или soft-reconfiguration не включён
router bgp 65100
neighbor 198.51.100.1 soft-reconfiguration inbound
! Применяем политики заново без сброса сессии
clear ip bgp 198.51.100.1 soft in
Ошибка 7: Асимметричная маршрутизация
Трафик уходит через ISP-1, возвращается через ISP-2. Stateful firewall в этом случае может рвать сессии. Это не всегда ошибка — иногда норма, но нужно знать.
! Проверяем через какой интерфейс уходит трафик
traceroute 8.8.8.8
! Если нужна симметрия - используй одинаковый Local Preference
! или настрой policy-based routing
Безопасность OSPF и BGP
OSPF — минимальный набор
configure terminal
router ospf 1
! Пассивный режим по умолчанию для всех
passive-interface default
! Явно активируем только нужные
no passive-interface GigabitEthernet0/0
no passive-interface GigabitEthernet0/1
end
MD5-аутентификация уже настроена выше — не пропускай этот шаг.
BGP — защита от утечек маршрутов
configure terminal
! Максимальное количество маршрутов от провайдера
router bgp 65100
neighbor 198.51.100.1 maximum-prefix 10 80
! 80% - предупреждение, 100% - сессия сбрасывается
! GTSM - TTL security против спуфинга BGP-сессий
neighbor 198.51.100.1 ttl-security hops 1
end
! Firewall - разрешаем BGP только от конкретных соседей
ip access-list extended BGP-PEERS
permit tcp host 198.51.100.1 any eq 179
permit tcp any host 198.51.100.1 eq 179
deny tcp any any eq 179
permit ip any any
SSH и ограничение управления
configure terminal
! SSH вместо telnet
ip ssh version 2
ip ssh authentication-retries 3
line vty 0 4
transport input ssh
access-class MGMT-ONLY in
! Доступ к управлению только из своей сети
ip access-list standard MGMT-ONLY
permit 192.168.1.0 0.0.0.255
deny any
end
Резервное копирование конфигураций
Перед любым изменением в маршрутизации — снимай backup. Без вопросов.
Что бэкапить
- Running configuration всех роутеров
- Таблицы маршрутизации (show ip route) — для сравнения до/после
- BGP-таблицы если используешь BGP
Как и как часто
! Cisco - сохранение конфига на TFTP
copy running-config tftp://192.168.1.100/HQ-Router-backup.cfg
! Или на flash
copy running-config flash:HQ-Router-backup.cfg
! MikroTik
/export compact file=mikrotik-backup
! Автоматический бэкап через EEM (Cisco)
configure terminal
event manager applet DAILY-BACKUP
event timer cron name DAILY cron-entry "0 2 * * *"
action 1.0 cli command "copy running-config tftp://192.168.1.100/router-backup.cfg"
end
Хранить: минимум 7 дней ротации, лучше 30. Минимум две копии в разных местах.
Мониторинг OSPF и BGP
Что мониторить
| Метрика |
SNMP OID / команда |
Порог тревоги |
| Состояние OSPF-соседей |
ospfNbrState (1.3.6.1.2.1.14.10.1.6) |
Не равно 8 (Full) |
| Количество OSPF-маршрутов |
show ip route summary |
Резкое изменение +-10% |
| BGP-сессия |
bgpPeerState (1.3.6.1.2.1.15.3.1.2) |
Не равно 6 (Established) |
| Изменения топологии (LSA) |
ospfSpfRuns |
Более 10 за минуту — нестабильность |
| CPU при SPF |
show processes cpu sorted |
Более 80% длительно |
! Лог-треп на OSPF-события
configure terminal
snmp-server enable traps ospf state-change
snmp-server enable traps bgp
snmp-server host 192.168.1.200 version 2c public ospf bgp
end
Обновление: как не сломать маршрутизацию
Порядок действий при обновлении IOS
- Сними backup конфига и запиши текущую версию IOS
- Проверь release notes на изменения в OSPF/BGP поведении
- Обновляй сначала филиальные роутеры, HQ — последним
- После каждого обновления проверяй: show ip ospf neighbor, show ip route ospf
- Дай сети 15 минут стабилизироваться перед следующим роутером
! Откат если что-то пошло не так
configure terminal
! Загрузка резервной версии IOS
boot system flash:iosname-old.bin
end
reload
Профилактика: как не сломать снова
Правило 1: Документируй топологию и конфиги
Нарисованная схема — это не бюрократия. Это то, что спасёт тебя в 3 ночи когда что-то упало и нужно быстро понять где искать. Держи актуальную схему в draw.io или NetBox. После каждого изменения — обновляй.
Правило 2: Тестируй отказоустойчивость заранее
Раз в квартал — плановые тесты. Физически отключи WAN-кабель на HQ и засеки время сходимости. Проверь что все филиалы переключились. Запиши результат. Узнать что фейловер не работает лучше во время планового теста, а не во время реального инцидента.
! Имитация падения интерфейса без физического отключения
configure terminal
interface GigabitEthernet0/0
shutdown
! Через минуту - проверяем что маршруты пересчитались
show ip route ospf
show ip ospf neighbor
! Возвращаем
interface GigabitEthernet0/0
no shutdown
end
Правило 3: Мониторь OSPF-соседство, не только пинг
OSPF может упасть при живом пинге. Если сосед перешёл в DOWN — пинг между интерфейсами всё равно проходит, но маршруты уже не обновляются. Мониторь именно ospfNbrState через SNMP или через Zabbix/Prometheus.
! Простой bash-скрипт для проверки OSPF-соседей через SNMP
! Запускай по cron каждые 5 минут
#!/bin/bash
ROUTER="192.168.1.1"
COMMUNITY="public"
# OID состояния соседей: 1.3.6.1.2.1.14.10.1.6
RESULT=$(snmpwalk -v2c -c $COMMUNITY $ROUTER 1.3.6.1.2.1.14.10.1.6 2>/dev/null | grep -v "= INTEGER: 8")
if [ -n "$RESULT" ]; then
echo "OSPF NEIGHBOR DOWN: $RESULT"
# Тут отправка алерта в Slack/Telegram
fi
Правило 4: Защита конфигов от случайных изменений
На Cisco можно заблокировать изменение OSPF-конфига без предварительного подтверждения через Configuration Archive и Change Logging.
configure terminal
! Ведение журнала изменений конфига
archive
log config
logging enable
notify syslog contenttype plaintext
hidekeys
end
Правило 5: Контролируй рост LSDB
В большой сети LSDB разрастается и начинает жрать RAM. Если у тебя больше 200 роутеров в одной Area — пора думать о разделении на несколько Area или о route summarization.
! Смотрим размер LSDB
show ip ospf database database-summary
! Если роутеров > 200 в одной Area - добавляем ABR (Area Border Router)
! и делим сеть на area 0 (backbone) + area 1, area 2 и т.д.
! Агрегация маршрутов на ABR - уменьшаем LSDB
router ospf 1
! Если в area 1 есть 192.168.10.0/24, 192.168.11.0/24 ... 192.168.15.0/24
area 1 range 192.168.10.0 255.255.248.0
Продвинутые возможности OSPF
Multi-area OSPF: когда Area 0 не хватает
Одна Area 0 справляется с сетями до 50-100 роутеров комфортно. При большем количестве — LSDB растёт, SPF-пересчёт становится дороже по CPU. Решение — разделить на несколько Area.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
CORE["Area 0 - Backbone\nHQ роутеры, ЦОД"]
ABR1["ABR-1\nArea 0 + Area 1"]
ABR2["ABR-2\nArea 0 + Area 2"]
A1["Area 1\nФилиал Москва"]
A2["Area 2\nФилиал СПб"]
CORE --> ABR1
CORE --> ABR2
ABR1 --> A1
ABR2 --> A2
style CORE fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style ABR1 fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style ABR2 fill:#fef3c7,stroke:#f97316,stroke-width:2px,color:#92400e
style A1 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style A2 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
! Настройка ABR (Area Border Router) - роутер в двух Area
configure terminal
interface GigabitEthernet0/0
! Интерфейс к Area 0
ip ospf 1 area 0
interface GigabitEthernet0/1
! Интерфейс к Area 1
ip ospf 1 area 1
router ospf 1
router-id 10.0.0.1
! Суммаризация маршрутов из Area 1 в Area 0
area 1 range 192.168.10.0 255.255.255.0
end
Stub Area: для удалённых офисов
Stub area — это Area, в которую не передаются External LSA (Type 5). Маленький офис не нуждается во всей топологии — ему достаточно default route от ABR. Экономит RAM и упрощает конвергенцию.
! На ABR - настраиваем Area 1 как stub
configure terminal
router ospf 1
area 1 stub
end
! На всех роутерах Area 1 - то же самое
configure terminal
router ospf 1
area 1 stub
end
! Все роутеры в одной Area должны иметь одинаковый тип Area
Виртуальный канал OSPF (Virtual Link)
Если по какой-то причине Area не имеет прямого соединения с Area 0 — нужен virtual link. Это редкий случай, но встречается при слиянии компаний когда две независимые OSPF-сети нужно соединить.
! Virtual link через транзитную Area 2
! На обоих ABR, которые граничат с Area 2
router ospf 1
area 2 virtual-link [Router-ID удалённого ABR]
BGP: продвинутые политики
AS-PATH prepend: управление входящим трафиком
Local Preference управляет исходящим трафиком — через какой ISP уходить. AS-PATH prepend управляет входящим — через какой ISP к тебе приходить. Чем длиннее AS-PATH, тем менее предпочтителен маршрут для удалённых роутеров.
configure terminal
! ISP-2 - резервный. Делаем AS-PATH длиннее через него
route-map ISP2-OUT permit 10
! Добавляем свой AS три раза - маршрут станет менее привлекательным
set as-path prepend 65100 65100 65100
router bgp 65100
neighbor 203.0.113.254 route-map ISP2-OUT out
end
! Применяем без сброса сессии
clear ip bgp 203.0.113.254 soft out
MED (Multi-Exit Discriminator): для двух точек подключения к одному ISP
Если к одному провайдеру подключён в двух точках — MED говорит провайдеру через какую точку лучше слать трафик к тебе.
configure terminal
! Основная точка - низкий MED (предпочтительнее)
route-map PRIMARY-POINT permit 10
set metric 100
! Резервная точка - высокий MED
route-map BACKUP-POINT permit 10
set metric 200
router bgp 65100
neighbor 198.51.100.1 route-map PRIMARY-POINT out
neighbor 198.51.100.5 route-map BACKUP-POINT out
end
BGP Community: теггирование маршрутов
Community — это тег на маршруте, который помогает применять политики без написания отдельных prefix-list. Провайдеры используют community для управления локальными предпочтениями.
configure terminal
! Помечаем анонсы для ISP-1 как основные
route-map MARK-PRIMARY permit 10
set community 65000:100
! Помечаем анонсы для ISP-2 как резервные
route-map MARK-BACKUP permit 10
set community 65001:200
router bgp 65100
neighbor 198.51.100.1 route-map MARK-PRIMARY out
neighbor 203.0.113.254 route-map MARK-BACKUP out
! Разрешаем передавать community атрибут
neighbor 198.51.100.1 send-community
end
BGP на MikroTik RouterOS 7
# Создаём BGP instance
/routing bgp instance
add name=bgp-main as=65100 router-id=1.1.1.1
# Добавляем соседей (peers)
/routing bgp peer
add name=ISP-1 instance=bgp-main remote-address=198.51.100.1 \
remote-as=65000 out-filter=OUR-BLOCK-OUT in-filter=ONLY-DEFAULT-IN
add name=ISP-2 instance=bgp-main remote-address=203.0.113.254 \
remote-as=65001 out-filter=OUR-BLOCK-OUT in-filter=ONLY-DEFAULT-IN
# Routing filters (MikroTik RouterOS 7)
/routing filter rule
add chain=OUR-BLOCK-OUT rule="if (dst == 203.0.113.0/24) { accept } else { reject }"
add chain=ONLY-DEFAULT-IN rule="if (dst == 0.0.0.0/0) { accept } else { reject }"
# Анонсируем наш блок
/routing bgp network
add network=203.0.113.0/24
# Проверка
/routing bgp peer print
/routing bgp peer print detail
Замена статических маршрутов: план миграции
Не делай migration в одно окно. Делай поэтапно с возможностью отката на каждом шаге.
Этап 0: Подготовка
Сними backup всех конфигов. Запиши текущие статические маршруты на каждом роутере. Запланируй maintenance window — минимум 2 часа. Убедись что у тебя есть out-of-band доступ к роутерам (консоль или управление через отдельный интерфейс).
Этап 1: Запусти OSPF параллельно со статикой
! Включаем OSPF - статика остаётся, имеет приоритет (AD=1 vs AD=110)
configure terminal
router ospf 1
router-id 1.1.1.1
interface GigabitEthernet0/0
ip ospf 1 area 0
end
! Проверяем что OSPF-маршруты появились (они ещё не активны - вытеснены статикой)
show ip route ospf
Этап 2: Проверь что OSPF видит все нужные сети
! Сравни список OSPF-маршрутов со списком статических
show ip route ospf
show ip route static
! Если какой-то сети нет в OSPF - не переходи к следующему этапу
! Найди почему она не анонсируется и исправь
Этап 3: Удаляй статику по одному маршруту
! Удаляем один статический маршрут
no ip route 192.168.10.0 255.255.255.0 10.0.0.2
! Немедленно проверяем что OSPF подхватил
show ip route 192.168.10.0
! Тест доступности
ping 192.168.10.1
! Если всё OK - переходим к следующему маршруту
! Если нет - возвращаем статику
ip route 192.168.10.0 255.255.255.0 10.0.0.2
Этап 4: После полного перехода
! Убеждаемся что статики не осталось
show ip route static
! Финальный backup конфига
write memory
copy running-config tftp://192.168.1.100/post-ospf-migration.cfg
Весь процесс миграции для сети из 5 роутеров занимает 2-3 часа при аккуратном подходе. Торопиться некуда — у тебя есть возможность откатиться на каждом шаге.
Альтернативные решения
IP SLA + статика — когда BGP избыточен
Два провайдера, нужен простой фейловер без BGP. IP SLA проверяет доступность через каждый канал и переключает маршрут.
configure terminal
! Трекер - проверяем доступность 8.8.8.8 через ISP-1
ip sla 1
icmp-echo 8.8.8.8 source-interface GigabitEthernet0/2
frequency 5
ip sla schedule 1 life forever start-time now
track 1 ip sla 1 reachability
! Основной маршрут через ISP-1 - активен пока track 1 UP
ip route 0.0.0.0 0.0.0.0 198.51.100.1 10 track 1
! Резервный маршрут через ISP-2 - большая метрика, включается при падении трека
ip route 0.0.0.0 0.0.0.0 203.0.113.1 20
end
FRRouting на Linux — полноценный OSPF/BGP без Cisco
Если нет бюджета на Cisco — FRRouting даёт тот же функционал на обычном Linux-сервере. Синтаксис почти идентичен Cisco.
# Установка FRRouting на Ubuntu
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo apt-key add -
echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | sudo tee -a /etc/apt/sources.list.d/frr.list
sudo apt update && sudo apt install frr frr-pythontools
# Включаем OSPF и BGP демоны
sudo nano /etc/frr/daemons
# ospfd=yes
# bgpd=yes
sudo systemctl restart frr
# Настройка через vtysh
sudo vtysh
configure terminal
router ospf
router-id 1.1.1.1
network 10.0.0.0/30 area 0
end
FAQ
Почему OSPF не видит соседей хотя пинг работает?
Самые частые причины: firewall блокирует IP-протокол 89 (не TCP/UDP, а именно 89), интерфейс в passive mode, несовпадение Area ID или таймеров Hello/Dead. Проверь по порядку: show ip ospf interface — убедись что интерфейс в нужной Area и не passive. Если всё верно — debug ip ospf adj и смотри что происходит при попытке установить соседство. Не забудь undebug all после диагностики.
Как проверить что OSPF пересчитал маршруты после падения канала?
Три команды: show ip ospf neighbor покажет что соседство упало, show ip route ospf покажет новые маршруты через резервный путь, show ip ospf покажет счётчик SPF runs — если он вырос, пересчёт произошёл. Для проверки скорости сходимости используй continuous ping: ping 192.168.20.1 repeat 1000, и в процессе физически отключи кабель — посчитай сколько пакетов потерял.
Что если нужен OSPF между Cisco и MikroTik?
OSPF — открытый стандарт, работает между любыми производителями. Главное: одинаковые Area, совпадающие таймеры Hello/Dead, одинаковый тип аутентификации и ключ. На p2p-каналах убедись что оба конца в режиме point-to-point — это убирает выборы DR/BDR и устраняет половину проблем совместимости.
Можно ли запустить OSPF параллельно со статикой при миграции?
Да, и это правильный подход. Запусти OSPF, проверь что маршруты появились. Статика с Administrative Distance 1 будет иметь приоритет над OSPF (AD 110). Когда убедишься что OSPF работает корректно — удаляй статику по одному маршруту. Откатиться всегда просто: ip route обратно.
Нужен ли BGP если есть только один провайдер?
Нет. Один провайдер — статический дефолтный маршрут плюс OSPF для анонса внутри сети. BGP оправдан от двух провайдеров и выше, или если у тебя есть собственный AS и публичный IP-блок. В остальных случаях это избыточная сложность.
Почему AD у OSPF равна 110, а не меньше?
Administrative Distance — условный приоритет источника маршрута. Connected: AD=0, Static: AD=1, eBGP: AD=20, OSPF: AD=110, RIP: AD=120. Статика с AD=1 имеет приоритет над OSPF с AD=110 намеренно: явно прописанный маршрут — это сознательное решение администратора, OSPF не должен его перекрывать. Это же позволяет при миграции запускать OSPF параллельно — статика активна пока ты сам её не уберёшь.
Как быстро OSPF переключается при падении канала?
По умолчанию: Dead-интервал 40 секунд + SPF-пересчёт 1-5 секунд = 41-45 секунд простоя. С таймерами 2/8 (Hello/Dead): 8-10 секунд. С BFD 300 мс / multiplier 3: менее 1 секунды. Для офисных приложений хватает 8-10 секунд. BFD нужен если возишь VoIP или real-time трафик.
Что такое ECMP и как включить?
Equal Cost Multi-Path — балансировка трафика между несколькими маршрутами одинаковой метрики. Если два WAN-канала одинаковой полосы — OSPF будет использовать оба. По умолчанию до 4 путей, настраивается до 16.
configure terminal
router ospf 1
maximum-paths 8
end
! Проверка ECMP в таблице маршрутизации
show ip route 192.168.30.0
! O 192.168.30.0/24 [110/2] via 10.0.0.2, GigabitEthernet0/0
! [110/2] via 10.0.0.6, GigabitEthernet0/1
! Оба маршрута активны одновременно
Результат: что теперь работает
Ты перешёл со статики на OSPF. Роутеры сами обмениваются маршрутами, сами пересчитывают пути при падении канала, сами уведомляют соседей об изменениях. Добавить новый роутер — это настройка одного устройства, не правка конфигов на всех остальных. Это ценно не в день запуска, а через полгода когда ты добавишь четвёртый филиал.
Если настроил BGP с двумя провайдерами — у тебя автоматическое резервирование на уровне интернет-подключения. ISP-1 упал — трафик ушёл через ISP-2, и ты узнаешь об этом из мониторинга, а не от пользователей которые не могут зайти в облако.
Если что-то не заработало — пиши в комментариях. Укажи: топологию, оборудование, вывод show ip ospf neighbor и show ip route ospf. Разберём конкретную ситуацию.
Подпишись на IT-Аптеку
Практические разборы по сетям, скрипты для автоматизации, реальные кейсы из продакшна. Без воды и маркетинговой шелухи.