From 13b2a629327e75dfcdfca81367d28b3a72c6c9ec Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Wed, 16 Jul 2025 11:15:49 +0700 Subject: [PATCH] Add detailed configuration guide for OSPF route acquisition through IHOR to SWE-HIPHOST. Included step-by-step instructions for setting up GRE tunnels, OSPF areas, and policy-based routing for YouTube traffic. Enhanced architecture overview and troubleshooting tips for OSPF neighbor establishment and route announcements. --- ospf_cost_priority.md | 361 ++++++++++++++++++++++++++++++++++++++++++ ospf_route_fix.md | 248 +++++++++++++++++++++++++++++ 2 files changed, 609 insertions(+) create mode 100644 ospf_cost_priority.md create mode 100644 ospf_route_fix.md diff --git a/ospf_cost_priority.md b/ospf_cost_priority.md new file mode 100644 index 0000000..601b79a --- /dev/null +++ b/ospf_cost_priority.md @@ -0,0 +1,361 @@ +# Настройка OSPF Cost для управления приоритетом маршрутов + +## Цель + +Иметь оба маршрута с возможностью управления приоритетом через OSPF cost: +- `10.100.5.2%SWE-HIPHOST-MTS` (прямой туннель HOME→SWE) +- `10.200.2.2%SWE-HIPHOST-MTS` (через IHOR→SWE) + +## Архитектура решения + +```mermaid +graph TB + subgraph "HOME" + HOME[HOME
home.rt.shx.su] + end + + subgraph "Москва" + IHOR[MSK-IHOR
msk.ihor.rt.shx.su] + end + + subgraph "Швеция" + SWE[SWE-HIPHOST
swe.hiphost.rt.shx.su] + end + + %% GRE туннели + HOME -- "GRE RTK→IHOR
cost=10" --> IHOR + HOME -- "GRE RTK→SWE
cost=1000" --> SWE + + %% Межсерверный туннель + IHOR -- "GRE IHOR→SWE
cost=10" --> SWE + + %% OSPF маршруты + SWE -. "OSPF 0.0.0.0/0
cost=1000" .- HOME + SWE -. "OSPF 0.0.0.0/0
cost=20" .- IHOR + IHOR -. "OSPF 0.0.0.0/0
cost=20" .- HOME + + style HOME fill:#e1f5fe + style IHOR fill:#ff9800 + style SWE fill:#4caf50 +``` + +## Настройка OSPF Cost + +### На HOME (home.rt.shx.su): + +```shell +# Настроить cost для приоритизации маршрутов +/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 +``` + +### На MSK-IHOR (msk.ihor.rt.shx.su): + +```shell +# Настроить cost для туннелей к HOME +/routing ospf interface-template +add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone +add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone + +# Настроить cost для туннеля к SWE +add interfaces=gre-SWE-HIPHOST cost=10 area=backbone + +# Статический маршрут через SWE +/ip route +add dst-address=0.0.0.0/0 gateway=10.200.2.2 distance=1 + +# OSPF redistribute +/routing ospf instance +set [ find default=yes ] redistribute=connected,static +``` + +### На SWE-HIPHOST (swe.hiphost.rt.shx.su): + +```shell +# Настроить cost для туннелей к HOME (высокий cost) +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-RTK cost=1000 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=2000 area=backbone + +# Настроить cost для туннеля к IHOR (низкий cost) +add interfaces=gre-IHOR-SWE cost=10 area=backbone + +# OSPF redistribute +/routing ospf instance +set [ find default=yes ] redistribute=connected,static +``` + +## Логика работы OSPF Cost + +### Расчет cost для маршрутов: + +1. **Маршрут через IHOR (приоритетный):** + - HOME → IHOR: cost=10 + - IHOR → SWE: cost=10 + - **Общий cost = 20** + +2. **Прямой маршрут HOME → SWE (резервный):** + - HOME → SWE: cost=1000 + - **Общий cost = 1000** + +### Результат: +- ✅ Маршрут через IHOR будет выбран как основной (cost=20) +- ✅ Прямой маршрут будет резервным (cost=1000) +- ✅ При отказе IHOR автоматически переключится на прямой маршрут + +## Альтернативные настройки Cost + +### Вариант 1: Более агрессивная разница +```shell +# На HOME +/routing ospf interface-template +# IHOR (приоритетный) +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=5000 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=10000 area=backbone +``` + +### Вариант 2: Минимальная разница +```shell +# На HOME +/routing ospf interface-template +# IHOR (приоритетный) +add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone +add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone + +# SWE (резервный) - небольшая разница +add interfaces=gre-SWE-HIPHOST-RTK cost=100 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=200 area=backbone +``` + +### Вариант 3: По провайдерам +```shell +# На HOME +/routing ospf interface-template +# Ростелеком (основной провайдер) +add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone +add interfaces=gre-SWE-HIPHOST-RTK cost=100 area=backbone + +# МТС (резервный провайдер) +add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=1000 area=backbone +``` + +## Проверка настройки + +### На HOME: +```shell +# Проверить OSPF интерфейсы и их cost +/routing ospf interface-template print + +# Проверить OSPF маршруты с cost +/routing ospf route print + +# Проверить таблицу маршрутизации +/ip route print where protocol=ospf + +# Проверить что маршрут через IHOR активен +/ip route print where gateway=10.100.4.2 +``` + +### На MSK-IHOR: +```shell +# Проверить OSPF интерфейсы +/routing ospf interface-template print + +# Проверить статический маршрут +/ip route print where dst-address=0.0.0.0/0 + +# Проверить OSPF соседей +/routing ospf neighbor print +``` + +### На SWE-HIPHOST: +```shell +# Проверить OSPF интерфейсы +/routing ospf interface-template print + +# Проверить OSPF соседей +/routing ospf neighbor print +``` + +## Тестирование приоритизации + +### Тест 1: Проверка активного маршрута +```shell +# На HOME проверить активный маршрут +/ip route print where dst-address=0.0.0.0/0 + +# Должен показать маршрут через IHOR как активный +``` + +### Тест 2: Проверка traceroute +```shell +# Проверить маршрут к YouTube +traceroute 173.194.0.1 + +# Должен показать: HOME → IHOR → SWE → YouTube +``` + +### Тест 3: Тест failover +```shell +# Отключить GRE туннель IHOR→SWE +/interface gre disable [ find where name=gre-SWE-HIPHOST ] + +# Проверить что маршрут переключился на прямой +/ip route print where dst-address=0.0.0.0/0 + +# Включить туннель обратно +/interface gre enable [ find where name=gre-SWE-HIPHOST ] + +# Проверить что вернулся к IHOR +/ip route print where dst-address=0.0.0.0/0 +``` + +## Мониторинг cost + +### Создать скрипт для мониторинга: +```shell +/system script +add name=check-ospf-cost source={ + :log info "=== OSPF Cost Check ===" + :log info "OSPF Interfaces:" + /routing ospf interface-template print + :log info "OSPF Routes:" + /routing ospf route print + :log info "Active Routes:" + /ip route print where protocol=ospf +} +``` + +### Запуск мониторинга: +```shell +/system script run check-ospf-cost +``` + +## Динамическое изменение cost + +### Для временного переключения на прямой маршрут: +```shell +# Временно увеличить cost для IHOR +/routing ospf interface-template +set [ find where interfaces=gre-MSK-IHOR-RTK ] cost=1000 +set [ find where interfaces=gre-MSK-IHOR-MTS ] cost=2000 + +# Проверить что маршрут переключился +/ip route print where dst-address=0.0.0.0/0 +``` + +### Для возврата к IHOR: +```shell +# Вернуть низкий cost для IHOR +/routing ospf interface-template +set [ find where interfaces=gre-MSK-IHOR-RTK ] cost=10 +set [ find where interfaces=gre-MSK-IHOR-MTS ] cost=100 + +# Проверить что маршрут вернулся +/ip route print where dst-address=0.0.0.0/0 +``` + +## Полная конфигурация для копирования + +### HOME (home.rt.shx.su): +```shell +# OSPF интерфейсы с приоритизацией по cost +/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 + +# Routing table YouTube +/routing table +add name=YouTube fib + +# Address-list YouTube +/ip firewall address-list +add list=YouTube list=173.194.0.0/16 comment="YouTube" +add list=YouTube list=74.125.0.0/16 comment="YouTube" +add list=YouTube list=142.250.0.0/16 comment="YouTube" +add list=YouTube list=172.217.0.0/16 comment="YouTube" +add list=YouTube list=216.58.0.0/16 comment="YouTube" +add list=YouTube list=34.0.0.0/8 comment="YouTube" +add list=YouTube list=35.0.0.0/8 comment="YouTube" +add list=YouTube list=142.0.0.0/8 comment="YouTube" + +# Routing rules +/routing rule +add dst-address=173.194.0.0/16 action=lookup table=YouTube +add dst-address=74.125.0.0/16 action=lookup table=YouTube +add dst-address=142.250.0.0/16 action=lookup table=YouTube +add dst-address=172.217.0.0/16 action=lookup table=YouTube +add dst-address=216.58.0.0/16 action=lookup table=YouTube +add dst-address=34.0.0.0/8 action=lookup table=YouTube +add dst-address=35.0.0.0/8 action=lookup table=YouTube +add dst-address=142.0.0.0/8 action=lookup table=YouTube + +# Маршрут в таблице YouTube через IHOR +/ip route +add dst-address=0.0.0.0/0 gateway=10.100.4.2 routing-table=YouTube distance=1 +``` + +### MSK-IHOR (msk.ihor.rt.shx.su): +```shell +# GRE туннель к SWE +/interface gre add name=gre-SWE-HIPHOST remote-address= local-address= +/ip address add address=10.200.2.1/30 interface=gre-SWE-HIPHOST + +# 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 +add interfaces=gre-SWE-HIPHOST cost=10 area=backbone + +# Статический маршрут через SWE +/ip route +add dst-address=0.0.0.0/0 gateway=10.200.2.2 distance=1 + +# OSPF redistribute +/routing ospf instance +set [ find default=yes ] redistribute=connected,static +``` + +### SWE-HIPHOST (swe.hiphost.rt.shx.su): +```shell +# GRE туннель от IHOR +/interface gre add name=gre-IHOR-SWE remote-address= local-address= +/ip address add address=10.200.2.2/30 interface=gre-IHOR-SWE + +# OSPF интерфейсы +/routing ospf interface-template +add interfaces=gre-SWE-HIPHOST-RTK cost=1000 area=backbone +add interfaces=gre-SWE-HIPHOST-MTS cost=2000 area=backbone +add interfaces=gre-IHOR-SWE cost=10 area=backbone + +# OSPF redistribute +/routing ospf instance +set [ find default=yes ] redistribute=connected,static +``` + +## Заключение + +Данная настройка обеспечивает: +1. **Оба маршрута существуют** (прямой и через IHOR) +2. **Управление приоритетом через OSPF cost** +3. **Автоматический failover** при отказе основного маршрута +4. **Гибкость настройки** - можно легко изменить приоритеты + +Теперь у вас будет полный контроль над маршрутизацией через настройку OSPF cost. \ No newline at end of file diff --git a/ospf_route_fix.md b/ospf_route_fix.md new file mode 100644 index 0000000..26f4441 --- /dev/null +++ b/ospf_route_fix.md @@ -0,0 +1,248 @@ +# Исправление 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 сохранится \ No newline at end of file