Настройка динамической маршрутизации: переход со статики на OSPF и BGP

Коротко о главном
Статические маршруты не масштабируются. При трёх и более роутерах и нескольких каналах переходи на 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-Аптеку
Практические разборы по сетям, скрипты для автоматизации, реальные кейсы из продакшна. Без воды и маркетинговой шелухи.
Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх