248 lines
8.6 KiB
Markdown
248 lines
8.6 KiB
Markdown
# Исправление 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 сохранится |