Files
shx-network/ospf_route_fix.md

248 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Исправление 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):
```shell
# Отключить 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):
```shell
# Отключить 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):
```shell
# Создать отдельную 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):
```shell
# Добавить в 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):
```shell
# Добавить в 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):
```shell
# Настроить 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):
```shell
# Создать фильтр который отклоняет маршруты от 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
```
### Альтернативный фильтр (более точный):
```shell
# Блокировать маршруты где 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):
```shell
# Создать отдельные 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:
```shell
# Проверить 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:
```shell
# Проверить что 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):
```shell
# 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):
```shell
# Отключить прямые туннели к 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: Проверка маршрутов
```shell
# На HOME проверить маршруты
/ip route print where protocol=ospf
# Должен показать маршрут через IHOR, НЕ через SWE
```
### Тест 2: Проверка traceroute
```shell
# Проверить маршрут к YouTube
traceroute 173.194.0.1
# Должен показать: HOME → IHOR → SWE → YouTube
```
### Тест 3: Проверка OSPF соседей
```shell
# Проверить 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 сохранится