Files
shx-network/ospf_route_fix.md
T

8.6 KiB
Raw Blame History

Исправление OSPF маршрутизации: 10.200.2.2 вместо 10.100.5.2

Проблема

На HOME создается маршрут:

  • 10.100.5.2%SWE-HIPHOST-MTS (прямой туннель HOME→SWE)
  • Нужно: 10.200.2.2%SWE-HIPHOST-MTS (через IHOR→SWE)

Причина проблемы

OSPF анонсирует маршруты напрямую от SWE-HIPHOST через туннель HOME→SWE, а не через IHOR→SWE.

Решение 1: Отключить прямой OSPF от SWE-HIPHOST

На HOME (home.rt.shx.su):

# Отключить GRE туннели к SWE из OSPF
/routing ospf interface-template
remove [ find where interfaces=gre-SWE-HIPHOST-RTK ]
remove [ find where interfaces=gre-SWE-HIPHOST-MTS ]

# Проверить что остались только туннели к IHOR
/routing ospf interface-template print

На SWE-HIPHOST (swe.hiphost.rt.shx.su):

# Отключить GRE туннели к HOME из OSPF
/routing ospf interface-template
remove [ find where interfaces=gre-SWE-HIPHOST-RTK ]
remove [ find where interfaces=gre-SWE-HIPHOST-MTS ]

# Оставить только туннель к IHOR
/routing ospf interface-template print

Решение 2: Использовать разные OSPF areas

На HOME (home.rt.shx.su):

# Создать отдельную area для IHOR
/routing ospf area
add name=ihor-area instance=default area-id=0.0.0.4

# Создать отдельную area для SWE (если нужен прямой доступ)
add name=swe-area instance=default area-id=0.0.0.5

# Добавить туннели к IHOR в area 0.0.0.4
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-area

# Добавить туннели к SWE в area 0.0.0.5 (с высоким cost)
add interfaces=gre-SWE-HIPHOST-RTK cost=200 area=swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=300 area=swe-area

На MSK-IHOR (msk.ihor.rt.shx.su):

# Добавить в area 0.0.0.4
/routing ospf area
add name=ihor-area instance=default area-id=0.0.0.4

# Туннели к HOME в area 0.0.0.4
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-area

# Туннель к SWE в area 0.0.0.4
add interfaces=gre-SWE-HIPHOST cost=10 area=ihor-area

На SWE-HIPHOST (swe.hiphost.rt.shx.su):

# Добавить в area 0.0.0.4 (для IHOR) и 0.0.0.5 (для HOME)
/routing ospf area
add name=ihor-area instance=default area-id=0.0.0.4
add name=swe-area instance=default area-id=0.0.0.5

# Туннель к IHOR в area 0.0.0.4
/routing ospf interface-template
add interfaces=gre-IHOR-SWE cost=10 area=ihor-area

# Туннели к HOME в area 0.0.0.5 (с высоким cost)
add interfaces=gre-SWE-HIPHOST-RTK cost=200 area=swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=300 area=swe-area

Решение 3: Использовать OSPF cost для приоритизации

На HOME (home.rt.shx.su):

# Настроить cost так чтобы IHOR был приоритетным
/routing ospf interface-template
# IHOR (приоритетный) - низкий cost
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone

# SWE (резервный) - очень высокий cost
add interfaces=gre-SWE-HIPHOST-RTK cost=1000 area=backbone
add interfaces=gre-SWE-HIPHOST-MTS cost=2000 area=backbone

Решение 4: Использовать OSPF filters (рекомендуемое)

На HOME (home.rt.shx.su):

# Создать фильтр который отклоняет маршруты от SWE напрямую
/routing filter
add name=ospf-block-direct-swe chain=input protocol=ospf rule="if (originator=10.100.0.5 && dst-address=0.0.0.0/0) { reject } else { accept }"

# Применить фильтр к OSPF instance
/routing ospf instance
set [ find default=yes ] in-filter=ospf-block-direct-swe

Альтернативный фильтр (более точный):

# Блокировать маршруты где gateway = прямой туннель к SWE
/routing filter
add name=ospf-block-swe-gateway chain=input protocol=ospf rule="if (gateway=10.100.5.2) { reject } else { accept }"
add name=ospf-block-swe-gateway chain=input protocol=ospf rule="if (gateway=10.100.6.2) { reject } else { accept }"

# Применить фильтр
/routing ospf instance
set [ find default=yes ] in-filter=ospf-block-swe-gateway

Решение 5: Использовать route tables для изоляции

На HOME (home.rt.shx.su):

# Создать отдельные routing tables
/routing table
add name=IHOR-ROUTES fib
add name=SWE-ROUTES fib

# Routing rules для выбора таблицы
/routing rule
add dst-address=0.0.0.0/0 action=lookup table=IHOR-ROUTES

# OSPF будет добавлять маршруты в соответствующие таблицы
# В IHOR-ROUTES будет маршрут через IHOR
# В SWE-ROUTES будет маршрут через SWE (если нужен)

Проверка решения

На HOME:

# Проверить OSPF маршруты
/routing ospf route print

# Проверить таблицу маршрутизации
/ip route print where protocol=ospf

# Проверить что нет маршрутов через 10.100.5.2
/ip route print where gateway=10.100.5.2

# Проверить что есть маршруты через 10.200.2.2
/ip route print where gateway=10.200.2.2

На MSK-IHOR:

# Проверить что IHOR анонсирует маршрут
/routing ospf route print

# Проверить статический маршрут
/ip route print where dst-address=0.0.0.0/0

Рекомендуемое решение

Рекомендую использовать Решение 1 + Решение 4:

  1. Отключить прямые OSPF туннели HOME→SWE
  2. Использовать фильтр для блокировки прямых маршрутов от SWE
  3. Получать маршруты только через IHOR

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

На HOME (home.rt.shx.su):

# 1. Отключить прямые туннели к SWE из OSPF
/routing ospf interface-template
remove [ find where interfaces=gre-SWE-HIPHOST-RTK ]
remove [ find where interfaces=gre-SWE-HIPHOST-MTS ]

# 2. Создать фильтр для блокировки прямых маршрутов от SWE
/routing filter
add name=ospf-block-direct-swe chain=input protocol=ospf rule="if (originator=10.100.0.5 && dst-address=0.0.0.0/0) { reject } else { accept }"

# 3. Применить фильтр
/routing ospf instance
set [ find default=yes ] in-filter=ospf-block-direct-swe

# 4. Убедиться что туннели к IHOR в OSPF
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone

На SWE-HIPHOST (swe.hiphost.rt.shx.su):

# Отключить прямые туннели к HOME из OSPF
/routing ospf interface-template
remove [ find where interfaces=gre-SWE-HIPHOST-RTK ]
remove [ find where interfaces=gre-SWE-HIPHOST-MTS ]

# Оставить только туннель к IHOR
/routing ospf interface-template
add interfaces=gre-IHOR-SWE cost=10 area=backbone

Тестирование

Тест 1: Проверка маршрутов

# На HOME проверить маршруты
/ip route print where protocol=ospf

# Должен показать маршрут через IHOR, НЕ через SWE

Тест 2: Проверка traceroute

# Проверить маршрут к YouTube
traceroute 173.194.0.1

# Должен показать: HOME → IHOR → SWE → YouTube

Тест 3: Проверка OSPF соседей

# Проверить OSPF соседей
/routing ospf neighbor print

# Должен показать только IHOR, НЕ SWE

Заключение

После применения этих настроек:

  • Маршрут 0.0.0.0/0 будет идти через 10.200.2.2%SWE-HIPHOST-MTS
  • Маршрут через 10.100.5.2%SWE-HIPHOST-MTS будет заблокирован
  • YouTube трафик будет идти через IHOR → SWE
  • Автоматический failover через OSPF сохранится