diff --git a/README.md b/README.md index 27ba834..cec804b 100644 --- a/README.md +++ b/README.md @@ -856,4 +856,1036 @@ add src-address=192.168.222.0/24 action=lookup table=MSK # Основной т /ip route print where active=yes ``` +--- + +## Настройка OSPF для анонса только 0.0.0.0/0 (RouterOS 7.14+) + +Для того чтобы удаленные серверы анонсировали только маршрут по умолчанию (0.0.0.0/0) через OSPF, нужно настроить Redistribute с Out filter. В RouterOS 7.14+ команда `/routing ospf network` больше не используется. + +### Конфигурация на удаленных серверах (VPSVILLE, IHOR, HIPHOST) + +#### 1. Создание Out filter для OSPF + +```shell +# Создание фильтра, который пропускает только 0.0.0.0/0 +/routing filter +add name=ospf-out-default-only chain=output protocol=ospf rule="if (dst-address=0.0.0.0/0) { accept } else { reject }" +``` + +#### 2. Настройка OSPF Redistribute с фильтром (основной способ для RouterOS 7.14+) + +```shell +# Настройка OSPF instance для redistribute +/routing ospf instance +set [ find default=yes ] redistribute=connected,static + +# Применение фильтра к OSPF +/routing ospf instance +set [ find default=yes ] out-filter=ospf-out-default-only +``` + +#### 2a. Альтернативный способ без routing filters + +```shell +# Настройка OSPF instance только для redistribute connected +/routing ospf instance +set [ find default=yes ] redistribute=connected + +# Или только для redistribute static (если 0.0.0.0/0 - статический маршрут) +/routing ospf instance +set [ find default=yes ] redistribute=static +``` + +#### 3. Альтернативный способ через OSPF networks (RouterOS 6.x) + +```shell +# В RouterOS 6.x можно было использовать networks +/routing ospf network +add network=0.0.0.0/0 area=backbone + +# В RouterOS 7.14+ эта команда больше не используется +# Вместо неё используется redistribute с фильтрами +``` + +### Конфигурация на HOME + +#### 1. Создание In filter для OSPF (опционально) + +```shell +# Фильтр для входящих OSPF маршрутов (если нужна дополнительная фильтрация) +/routing filter +add name=ospf-in-default-only chain=input protocol=ospf rule="if (dst-address=0.0.0.0/0) { accept } else { reject }" + +# Применение фильтра к OSPF instance +/routing ospf instance +set [ find default=yes ] in-filter=ospf-in-default-only +``` + +### Проверка конфигурации + +```shell +# Проверка OSPF маршрутов на удаленном сервере +/routing ospf route print + +# Проверка OSPF маршрутов на HOME +/routing ospf route print + +# Проверка таблицы маршрутизации на HOME +/ip route print where protocol=ospf +``` + +### Пример полной конфигурации на удаленном сервере (RouterOS 7.14+) + +#### Способ 1: С фильтром (если работает) + +```shell +# 1. Создание фильтра для анонса только 0.0.0.0/0 +/routing filter +add name=ospf-out-default-only chain=output protocol=ospf rule="if (dst-address=0.0.0.0/0) { accept } else { reject }" + +# 2. Настройка OSPF instance с redistribute и фильтром +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.2 redistribute=connected,static out-filter=ospf-out-default-only + +# 3. Добавление GRE интерфейсов в OSPF +/routing ospf interface-template +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone + +# 4. Проверка что только 0.0.0.0/0 анонсируется +/routing ospf route print +``` + +#### Способ 2: Без фильтров (простой) + +```shell +# 1. Настройка OSPF instance только для redistribute connected +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.2 redistribute=connected + +# 2. Добавление GRE интерфейсов в OSPF +/routing ospf interface-template +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone + +# 3. Проверка анонсируемых маршрутов +/routing ospf route print +``` + +#### Способ 3: Только статические маршруты + +```shell +# 1. Настройка OSPF instance только для redistribute static +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.2 redistribute=static + +# 2. Добавление GRE интерфейсов в OSPF +/routing ospf interface-template +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone + +# 3. Проверка анонсируемых маршрутов +/routing ospf route print +``` + +#### Способ 4: Простой статический маршрут (гарантированно работает) + +```shell +# 1. Добавление статического маршрута 0.0.0.0/0 через SWE-HIPHOST-MTS +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.5.2 distance=1 + +# 2. Настройка OSPF instance для redistribute static +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.2 redistribute=static + +# 3. Добавление GRE интерфейсов в OSPF +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone + +# 4. Проверка что маршрут анонсируется +/routing ospf route print +``` + +#### Способ 5: Самый простой - без OSPF + +```shell +# Просто добавить статический маршрут на HOME +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.5.2 distance=1 routing-table=EU + +# Или для основной таблицы +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.5.2 distance=1 +``` + +### Логика работы + +1. **Удаленный сервер** имеет маршрут по умолчанию (0.0.0.0/0) в своей таблице +2. **Redistribute** анонсирует маршруты через OSPF (с фильтром или без) +3. **HOME** получает маршруты от удаленного сервера +4. **OSPF** выбирает оптимальный путь на основе cost + +### Выбор способа + +#### Способ 1 (с фильтром) - если фильтры работают: +- **Преимущества**: Точный контроль, только нужные маршруты +- **Недостатки**: Сложнее настройка, может не работать в некоторых версиях + +#### Способ 2 (redistribute=connected) - рекомендуемый: +- **Преимущества**: Простая настройка, работает стабильно +- **Недостатки**: Анонсирует все connected маршруты + +#### Способ 3 (redistribute=static) - если 0.0.0.0/0 статический: +- **Преимущества**: Простая настройка, только статические маршруты +- **Недостатки**: Анонсирует все статические маршруты + +#### Способ 4 (простой статический маршрут) - самый надежный: +- **Преимущества**: Гарантированно работает, простой +- **Недостатки**: Нужно вручную добавить маршрут + +### Преимущества такого подхода + +- **Чистая таблица маршрутизации**: Только нужные маршруты (при использовании фильтров) +- **Контроль трафика**: Можно точно указать, какие маршруты анонсировать +- **Безопасность**: Не раскрываются внутренние сети удаленных серверов +- **Производительность**: Меньше маршрутов = быстрее обработка +- **Простота**: Можно обойтись без сложных фильтров + +--- + +## Конкретное решение: Маршрут 0.0.0.0/0 через SWE-HIPHOST-MTS + +### На SWE-HIPHOST (удаленный сервер): + +#### Способ 1: С фильтрацией AWS metadata (рекомендуемый) + +```shell +# 1. Маршрут 0.0.0.0/0 уже есть (получен через DHCP) +# Проверить текущие маршруты: +/ip route print + +# 2. Создать фильтр для исключения AWS metadata +/routing filter +add name=ospf-out-no-aws chain=output protocol=ospf rule="if (dst-address=169.254.169.254/32) { reject } else { accept }" + +# 3. Настроить OSPF с фильтром +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.5 redistribute=connected out-filter=ospf-out-no-aws + +# 4. Добавить GRE интерфейс в OSPF +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone + +# 5. Проверить что маршрут анонсируется +/routing ospf route print +``` + +#### Способ 2: Без фильтрации (если фильтры не работают) + +```shell +# 1. Проверить текущие маршруты: +/ip route print + +# 2. Настроить OSPF для redistribute connected +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.5 redistribute=connected + +# 3. Добавить GRE интерфейс в OSPF +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone + +# 4. Проверить что маршрут анонсируется +/routing ospf route print +``` + +### На HOME: + +```shell +# 1. Добавить GRE интерфейс в OSPF +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone + +# 2. Проверить получение маршрута +/routing ospf route print + +# 3. Проверить таблицу маршрутизации +/ip route print where protocol=ospf +``` + +### Альтернатива - статический маршрут на HOME: + +```shell +# Если OSPF не работает, просто добавить статический маршрут +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.5.2 distance=1 + +# Или для отдельной таблицы маршрутизации +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.5.2 distance=1 routing-table=EU +``` + +--- + +## Настройка OSPF cost для failover между серверами + +Для того чтобы OSPF cost работал и один маршрут заменялся другим в зависимости от cost, нужно настроить OSPF на всех серверах, которые анонсируют маршруты. + +### Конфигурация на SWE-HIPHOST (анонсирует маршрут 0.0.0.0/0): + +```shell +# 1. Создать фильтр для исключения AWS metadata +/routing filter +add name=ospf-out-no-aws chain=output protocol=ospf rule="if (dst-address=169.254.169.254/32) { reject } else { accept }" + +# 2. Настроить OSPF с фильтром и redistribute +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.5 redistribute=connected out-filter=ospf-out-no-aws + +# 3. Создать area (если не существует) +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 + +# 4. Добавить GRE интерфейсы в OSPF с разным cost +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-RTK cost=10 area=backbone # Основной канал +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone # Резервный канал + +# 5. Проверить что маршрут анонсируется +/routing ospf route print +``` + +### Конфигурация на MSK-VPSVILLE (анонсирует маршрут 0.0.0.0/0): + +```shell +# 1. Создать фильтр для исключения AWS metadata (если есть) +/routing filter +add name=ospf-out-no-aws chain=output protocol=ospf rule="if (dst-address=169.254.169.254/32) { reject } else { accept }" + +# 2. Настроить OSPF с фильтром и redistribute +/routing ospf instance +set [ find default=yes ] router-id=10.100.0.2 redistribute=connected out-filter=ospf-out-no-aws + +# 3. Создать area (если не существует) +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 + +# 4. Добавить GRE интерфейсы в OSPF с разным cost +/routing ospf interface-template +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone # Основной канал +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone # Резервный канал + +# 5. Проверить что маршрут анонсируется +/routing ospf route print +``` + +### Конфигурация на HOME (получает маршруты): + +```shell +# 1. Создать area (если не существует) +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 + +# 2. Добавить все GRE интерфейсы в OSPF с соответствующим cost +/routing ospf interface-template +# Ростелеком (основной провайдер) - низкий cost +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone +add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone +add interfaces=gre-SWE-HIPHOST-RTK cost=10 area=backbone + +# МТС (резервный провайдер) - высокий cost +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone +add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone + +# 3. Проверить полученные маршруты +/routing ospf route print + +# 4. Проверить таблицу маршрутизации +/ip route print where protocol=ospf +``` + +### Логика работы OSPF cost: + +1. **SWE-HIPHOST** анонсирует маршрут 0.0.0.0/0 через оба канала: + - gre-SWE-HIPHOST-RTK (cost=10) - основной + - gre-SWE-HIPHOST-MTS (cost=100) - резервный + +2. **MSK-VPSVILLE** анонсирует маршрут 0.0.0.0/0 через оба канала: + - gre-MSK-VPSVILLE-RTK (cost=10) - основной + - gre-MSK-VPSVILLE-MTS (cost=100) - резервный + +3. **HOME** получает маршруты от обоих серверов и выбирает оптимальный путь на основе cost + +4. **Автоматический failover**: Если основной канал падает, OSPF автоматически переключается на резервный + +### Настройка OSPF Area + +**Важно**: Все устройства должны использовать одинаковую area для корректной работы OSPF. + +#### Вариант 1: Одна area (рекомендуемый для простых сетей) + +```shell +# На всех устройствах (HOME, SWE-HIPHOST, MSK-VPSVILLE, MSK-IHOR): +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 + +# Или использовать существующую area: +/routing ospf area print +# Если area уже создана, используйте её имя +``` + +#### Вариант 2: Создание новой area + +```shell +# На всех устройствах создать одинаковую area: +/routing ospf area +add name=main-area instance=default area-id=0.0.0.1 + +# Затем использовать её в interface-template: +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-RTK cost=10 area=main-area +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=main-area +``` + +#### Проверка area настройки: + +```shell +# Проверить существующие area: +/routing ospf area print + +# Проверить OSPF соседей: +/routing ospf neighbor print + +# Проверить что соседи в одной area: +/routing ospf neighbor print detail +``` + +--- + +## Оптимальная схема OSPF Areas для вашей сети + +### Рекомендуемая архитектура Areas + +Для вашей сети с несколькими локациями и провайдерами рекомендуется использовать **многоуровневую схему areas**: + +#### Схема 1: Простая (рекомендуемая для начала) + +``` +Area 0.0.0.0 (Backbone) - все устройства +├── HOME (home.rt.shx.su) +├── MSK-VPSVILLE (msk.vpsville.rt.shx.su) +├── MSK-IHOR (msk.ihor.rt.shx.su) +└── SWE-HIPHOST (swe.hiphost.rt.shx.su) +``` + +#### Схема 2: По локациям (для масштабирования) + +``` +Area 0.0.0.0 (Backbone) - HOME +├── Area 0.0.0.1 (MSK) - московские серверы +│ ├── MSK-VPSVILLE +│ └── MSK-IHOR +└── Area 0.0.0.2 (SWE) - шведский сервер + └── SWE-HIPHOST +``` + +#### Схема 3: По провайдерам (для изоляции) + +``` +Area 0.0.0.0 (Backbone) - HOME +├── Area 0.0.0.10 (RTK) - Ростелеком туннели +│ ├── MSK-VPSVILLE-RTK +│ ├── MSK-IHOR-RTK +│ └── SWE-HIPHOST-RTK +└── Area 0.0.0.20 (MTS) - МТС туннели + ├── MSK-VPSVILLE-MTS + ├── MSK-IHOR-MTS + └── SWE-HIPHOST-MTS +``` + +### Рекомендация: Начните с простой схемы + +Для вашей текущей сети **рекомендую начать с Схемы 1** (одна area): + +#### Конфигурация для Схемы 1: + +```shell +# На всех устройствах (HOME, MSK-VPSVILLE, MSK-IHOR, SWE-HIPHOST): + +# 1. Создать backbone area +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 + +# 2. Добавить все GRE интерфейсы в backbone area +/routing ospf interface-template +# Ростелеком (основной провайдер) - низкий cost +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone +add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone +add interfaces=gre-SWE-HIPHOST-RTK cost=10 area=backbone + +# МТС (резервный провайдер) - высокий cost +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone +add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone +``` + +### Преимущества простой схемы (Area 0.0.0.0): + +1. **Простота настройки**: Все устройства в одной area +2. **Быстрая конвергенция**: Нет меж-area маршрутизации +3. **Простота отладки**: Легче диагностировать проблемы +4. **Совместимость**: Работает с любыми версиями RouterOS + +### Когда переходить на сложные схемы: + +#### Переход на Схему 2 (по локациям) если: +- У вас будет больше московских серверов (5+) +- Нужна изоляция московского трафика +- Планируется добавление других стран + +#### Переход на Схему 3 (по провайдерам) если: +- Нужна полная изоляция трафика по провайдерам +- Планируется добавление третьего провайдера +- Требуется сложная политика маршрутизации + +### Конфигурация для Схемы 2 (по локациям): + +```shell +# На HOME (Area 0.0.0.0 - Backbone): +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 +add name=msk-area instance=default area-id=0.0.0.1 +add name=swe-area instance=default area-id=0.0.0.2 + +# На MSK-VPSVILLE и MSK-IHOR (Area 0.0.0.1 - MSK): +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 +add name=msk-area instance=default area-id=0.0.0.1 + +# На SWE-HIPHOST (Area 0.0.0.2 - SWE): +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 +add name=swe-area instance=default area-id=0.0.0.2 +``` + +### Конфигурация для Схемы 3 (по провайдерам): + +```shell +# На всех устройствах: +/routing ospf area +add name=backbone instance=default area-id=0.0.0.0 +add name=rtk-area instance=default area-id=0.0.0.10 +add name=mts-area instance=default area-id=0.0.0.20 + +# Ростелеком туннели в rtk-area: +/routing ospf interface-template +add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=rtk-area +add interfaces=gre-MSK-IHOR-RTK cost=10 area=rtk-area +add interfaces=gre-SWE-HIPHOST-RTK cost=10 area=rtk-area + +# МТС туннели в mts-area: +add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=mts-area +add interfaces=gre-MSK-IHOR-MTS cost=100 area=mts-area +add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=mts-area +``` + +### Проверка конфигурации Areas: + +```shell +# Проверить все areas +/routing ospf area print + +# Проверить интерфейсы в каждой area +/routing ospf interface-template print + +# Проверить соседей и их areas +/routing ospf neighbor print detail + +# Проверить маршруты по areas +/routing ospf route print +``` + +### Рекомендации по выбору Area ID: + +```shell +# Стандартные Area ID: +0.0.0.0 # Backbone area (обязательно) +0.0.0.1 # Первая обычная area +0.0.0.2 # Вторая обычная area +0.0.0.10 # Area для Ростелеком +0.0.0.20 # Area для МТС +0.0.0.100 # Area для Москвы +0.0.0.200 # Area для Швеции +``` + +### Миграция с простой схемы на сложную: + +```shell +# Шаг 1: Добавить новые areas +/routing ospf area +add name=msk-area instance=default area-id=0.0.0.1 + +# Шаг 2: Изменить area для московских интерфейсов +/routing ospf interface-template +set [ find where interfaces=gre-MSK-VPSVILLE-RTK ] area=msk-area +set [ find where interfaces=gre-MSK-VPSVILLE-MTS ] area=msk-area + +# Шаг 3: Проверить что OSPF работает +/routing ospf neighbor print +``` + +### Проверка работы cost: + +```shell +# На HOME проверить OSPF маршруты с cost +/routing ospf route print + +# Должно показать что-то вроде: +# dst-address=0.0.0.0/0 gateway=10.100.2.2 cost=10 # Основной +# dst-address=0.0.0.0/0 gateway=10.100.5.2 cost=10 # Основной +# dst-address=0.0.0.0/0 gateway=10.100.1.2 cost=100 # Резервный +# dst-address=0.0.0.0/0 gateway=10.100.5.2 cost=100 # Резервный +``` + +--- + +## Настройка BFD для OSPF + +BFD (Bidirectional Forwarding Detection) обеспечивает быстрое обнаружение недоступности каналов и ускоряет failover OSPF. + +### Конфигурация BFD на HOME (RouterOS 7.14+): + +```shell +# 1. Настроить BFD параметры для GRE интерфейсов +/routing bfd +add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3 +add interface=gre-MSK-VPSVILLE-MTS interval=100ms multiplier=3 +add interface=gre-MSK-IHOR-MTS interval=100ms multiplier=3 + +# 2. Включить BFD для OSPF +/routing ospf interface-template +set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes +set [ find where interfaces=gre-MSK-VPSVILLE-MTS ] bfd=yes +set [ find where interfaces=gre-MSK-IHOR-MTS ] bfd=yes +``` + +### Конфигурация BFD на SWE-HIPHOST (RouterOS 7.14+): + +```shell +# 1. Настроить BFD параметры для GRE интерфейса +/routing bfd +add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3 + +# 2. Включить BFD для OSPF +/routing ospf interface-template +set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes +``` + +### Конфигурация BFD на MSK-VPSVILLE (RouterOS 7.14+): + +```shell +# 1. Настроить BFD параметры для GRE интерфейса +/routing bfd +add interface=gre-MSK-VPSVILLE-MTS interval=100ms multiplier=3 + +# 2. Включить BFD для OSPF +/routing ospf interface-template +set [ find where interfaces=gre-MSK-VPSVILLE-MTS ] bfd=yes +``` + +### Параметры BFD: + +- **interval=100ms** - интервал отправки BFD пакетов (100ms = быстрое обнаружение) +- **multiplier=3** - количество пропущенных пакетов для объявления недоступности +- **Время обнаружения** = interval × multiplier = 100ms × 3 = 300ms + +### Альтернативные настройки BFD: + +```shell +# Быстрое обнаружение (для критичных каналов) +/routing bfd +add interface=gre-SWE-HIPHOST-MTS interval=50ms multiplier=3 # 150ms + +# Стандартное обнаружение +/routing bfd +add interface=gre-SWE-HIPHOST-MTS interval=200ms multiplier=3 # 600ms + +# Медленное обнаружение (для экономии ресурсов) +/routing bfd +add interface=gre-SWE-HIPHOST-MTS interval=500ms multiplier=3 # 1.5s +``` + +### Проверка BFD (RouterOS 7.14+): + +```shell +# Проверить статус BFD сессий +/routing bfd print + +# Проверить BFD на интерфейсах +/interface gre print + +# Проверить OSPF с BFD +/routing ospf interface-template print where bfd=yes + +# Проверить детали BFD сессий +/routing bfd print detail +``` + +### Преимущества BFD: + +1. **Быстрое обнаружение**: 300ms вместо нескольких секунд OSPF +2. **Надежность**: Независимое от OSPF обнаружение недоступности +3. **Гибкость**: Настраиваемые параметры для разных каналов +4. **Совместимость**: Работает с любыми протоколами маршрутизации + +--- + +## Диагностика проблем с BFD + +### Проблема: BFD session в статусе "init" и "down" + +Если BFD сессия не устанавливается, это может быть связано с несколькими причинами: + +#### 1. Проверка базовой связности + +```shell +# Проверить что GRE туннель работает +/interface gre print + +# Проверить ping через GRE туннель +ping 10.100.5.2 count=5 + +# Проверить что OSPF соседи установлены +/routing ospf neighbor print +``` + +#### 2. Проверка BFD конфигурации + +```shell +# Проверить BFD сессии +/routing bfd print + +# Проверить детали BFD +/routing bfd print detail + +# Проверить что BFD включен в OSPF +/routing ospf interface-template print where bfd=yes +``` + +#### 3. Возможные решения + +##### Решение 1: Проверить параметры BFD + +```shell +# Убедиться что параметры одинаковые на обеих сторонах +/routing bfd print + +# Если параметры разные, исправить: +/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=100ms multiplier=3 +``` + +##### Решение 2: Перезапустить BFD сессию + +```shell +# Удалить и пересоздать BFD сессию +/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ] +/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3 +``` + +##### Решение 3: Проверить firewall + +```shell +# Проверить что BFD пакеты не блокируются +/ip firewall filter print where protocol=udp + +# BFD использует UDP порт 3784, убедиться что он не заблокирован +``` + +##### Решение 4: Использовать более медленные параметры + +```shell +# Попробовать более медленные параметры для стабильности +/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3 +``` + +#### 4. Пошаговая диагностика + +```shell +# Шаг 1: Проверить GRE туннель +/interface gre print + +# Шаг 2: Проверить OSPF соседей +/routing ospf neighbor print + +# Шаг 3: Проверить BFD сессии +/routing bfd print + +# Шаг 4: Проверить BFD детали +/routing bfd print detail + +# Шаг 5: Проверить логи +/log print where topics~"bfd" +``` + +#### 5. Альтернатива: Отключить BFD временно + +```shell +# Если BFD не работает, можно временно отключить +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no + +# OSPF будет работать без BFD, но медленнее +``` + +#### 6. Специфичные проблемы и решения + +##### Проблема: BFD не работает на GRE туннелях + +Некоторые версии RouterOS могут иметь проблемы с BFD на GRE туннелях. В этом случае: + +```shell +# Проверить версию RouterOS +/system resource print + +# Если версия < 7.14, BFD может не работать на GRE +# В этом случае лучше отключить BFD +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no +``` + +##### Проблема: BFD конфликтует с OSPF + +```shell +# Проверить OSPF соседей +/routing ospf neighbor print + +# Если OSPF работает, но BFD нет - отключить BFD +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no +``` + +##### Проблема: Неправильные параметры BFD + +```shell +# Проверить текущие параметры +/routing bfd print detail + +# Установить стандартные параметры +/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3 +``` + +#### 7. Рекомендуемая последовательность настройки BFD + +```shell +# Шаг 1: Убедиться что OSPF работает +/routing ospf neighbor print + +# Шаг 2: Настроить BFD с медленными параметрами +/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=200ms multiplier=3 + +# Шаг 3: Включить BFD в OSPF +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes + +# Шаг 4: Проверить статус +/routing bfd print + +# Шаг 5: Если работает, ускорить параметры +/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=100ms multiplier=3 +``` + +#### 8. Мониторинг BFD + +```shell +# Добавить логирование BFD +/system logging +add topics=bfd + +# Проверить логи BFD +/log print where topics~"bfd" + +# Мониторинг BFD сессий +:put "BFD Status:" +/routing bfd print +``` + +#### 9. Быстрая диагностика для вашего случая + +Выполните эти команды на обеих сторонах (gateway и сервер): + +```shell +# На gateway (HOME): +# 1. Проверить GRE туннель +/interface gre print where name~"SWE-HIPHOST" + +# 2. Проверить ping до сервера +ping 10.100.5.2 count=5 + +# 3. Проверить OSPF соседей +/routing ospf neighbor print + +# 4. Проверить BFD сессии +/routing bfd print + +# 5. Проверить детали BFD +/routing bfd print detail + +# На сервере (SWE-HIPHOST): +# 1. Проверить GRE туннель +/interface gre print where name~"SWE-HIPHOST" + +# 2. Проверить ping до gateway +ping 10.100.5.1 count=5 + +# 3. Проверить OSPF соседей +/routing ospf neighbor print + +# 4. Проверить BFD сессии +/routing bfd print + +# 5. Проверить детали BFD +/routing bfd print detail +``` + +#### 10. Быстрое решение + +Если диагностика показывает проблемы с BFD: + +```shell +# Временно отключить BFD на обеих сторонах +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no + +# Удалить BFD сессии +/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ] + +# Проверить что OSPF работает +/routing ospf neighbor print +``` + +#### 11. Проблема: BFD packets Rx = 0 + +Если на gateway BFD session показывает `packets Rx = 0`, это означает что BFD пакеты не доходят от сервера до gateway. + +##### Диагностика проблемы с BFD пакетами + +```shell +# На gateway проверить детали BFD сессии +/routing bfd print detail + +# Должно показать что-то вроде: +# packets-tx: 1234 +# packets-rx: 0 # ← Проблема здесь +# state: down +``` + +##### Возможные причины и решения: + +###### Причина 1: BFD не настроен на сервере + +```shell +# На сервере проверить BFD конфигурацию +/routing bfd print + +# Если BFD не настроен, добавить: +/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=200ms multiplier=3 + +# И включить в OSPF: +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes +``` + +###### Причина 2: Firewall блокирует BFD пакеты + +```shell +# На сервере проверить firewall правила +/ip firewall filter print where protocol=udp + +# BFD использует UDP порт 3784, проверить что он не заблокирован +# Добавить правило для разрешения BFD (если нужно): +/ip firewall filter add chain=forward protocol=udp dst-port=3784 action=accept comment="BFD" +``` + +###### Причина 3: Разные параметры BFD + +```shell +# На обеих сторонах проверить параметры BFD +/routing bfd print detail + +# Убедиться что interval и multiplier одинаковые +# Если разные - исправить на сервере: +/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3 +``` + +###### Причина 4: GRE туннель нестабилен + +```shell +# Проверить стабильность GRE туннеля +/interface gre print + +# Проверить ping через туннель +ping 10.100.5.2 count=10 interval=100ms + +# Если есть потери пакетов, BFD может не работать +``` + +##### Быстрое решение для диагностики: + +```shell +# На сервере временно отключить BFD +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no +/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ] + +# На gateway тоже отключить +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no +/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ] + +# Проверить что OSPF работает без BFD +/routing ospf neighbor print +``` + +##### Пошаговая настройка BFD заново: + +```shell +# Шаг 1: Убедиться что OSPF работает +/routing ospf neighbor print + +# Шаг 2: Настроить BFD на сервере с медленными параметрами +/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=500ms multiplier=3 + +# Шаг 3: Включить BFD в OSPF на сервере +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes + +# Шаг 4: Настроить BFD на gateway с теми же параметрами +/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=500ms multiplier=3 + +# Шаг 5: Включить BFD в OSPF на gateway +/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes + +# Шаг 6: Проверить статус +/routing bfd print +``` + +### Пояснение: DHCP маршруты в OSPF + +- **DHCP маршруты** считаются как `connected` в RouterOS +- **redistribute=connected** анонсирует все connected маршруты, включая DHCP +- **redistribute=static** анонсирует только статические маршруты +- **DHCP маршрут 0.0.0.0/0** автоматически попадет в OSPF при `redistribute=connected` +- **AWS metadata service (169.254.169.254)** тоже может анонсироваться и мешать + +### Проблема с AWS metadata service + +AWS автоматически добавляет маршрут к 169.254.169.254 (metadata service), который тоже будет анонсироваться через OSPF при `redistribute=connected`. Это может создавать нежелательные маршруты. + +### Проверка DHCP маршрута и AWS metadata: + +```shell +# Проверить тип маршрута 0.0.0.0/0 +/ip route print where dst-address=0.0.0.0/0 + +# Проверить AWS metadata маршрут +/ip route print where dst-address=169.254.169.254/32 + +# Должно показать что-то вроде: +# Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, s - STATIC +# Маршрут от DHCP будет помечен как DYNAMIC +# AWS metadata маршрут тоже будет DYNAMIC +``` + --- \ No newline at end of file