Files
shx-network/ospf_cost_priority.md
T

12 KiB

Настройка OSPF Cost для управления приоритетом маршрутов

Цель

Иметь оба маршрута с возможностью управления приоритетом через OSPF cost:

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

Архитектура решения

graph TB
    subgraph "HOME"
        HOME[HOME<br/>home.rt.shx.su]
    end
    
    subgraph "Москва"
        IHOR[MSK-IHOR<br/>msk.ihor.rt.shx.su]
    end
    
    subgraph "Швеция"
        SWE[SWE-HIPHOST<br/>swe.hiphost.rt.shx.su]
    end
    
    %% GRE туннели
    HOME -- "GRE RTK→IHOR<br/>cost=10" --> IHOR
    HOME -- "GRE RTK→SWE<br/>cost=1000" --> SWE
    
    %% Межсерверный туннель
    IHOR -- "GRE IHOR→SWE<br/>cost=10" --> SWE
    
    %% OSPF маршруты
    SWE -. "OSPF 0.0.0.0/0<br/>cost=1000" .- HOME
    SWE -. "OSPF 0.0.0.0/0<br/>cost=20" .- IHOR
    IHOR -. "OSPF 0.0.0.0/0<br/>cost=20" .- HOME
    
    style HOME fill:#e1f5fe
    style IHOR fill:#ff9800
    style SWE fill:#4caf50

Настройка OSPF Cost

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

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# Настроить cost для приоритизации маршрутов
/routing ospf interface-template

# IHOR (приоритетный) - низкий cost
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area

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

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

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# Настроить cost для туннелей к HOME
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area

# Настроить cost для туннеля к SWE
add interfaces=gre-SWE-HIPHOST cost=10 area=ihor-swe-area

# Статический маршрут через 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):

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# Настроить cost для туннелей к HOME (высокий cost)
/routing ospf interface-template
add interfaces=gre-SWE-HIPHOST-RTK cost=1000 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=2000 area=ihor-swe-area

# Настроить cost для туннеля к IHOR (низкий cost)
add interfaces=gre-IHOR-SWE cost=10 area=ihor-swe-area

# 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: Более агрессивная разница

# На HOME
/routing ospf interface-template
# IHOR (приоритетный)
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area

# SWE (резервный) - очень высокий cost
add interfaces=gre-SWE-HIPHOST-RTK cost=5000 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=10000 area=ihor-swe-area

Вариант 2: Минимальная разница

# На HOME
/routing ospf interface-template
# IHOR (приоритетный)
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area

# SWE (резервный) - небольшая разница
add interfaces=gre-SWE-HIPHOST-RTK cost=100 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=200 area=ihor-swe-area

Вариант 3: По провайдерам

# На HOME
/routing ospf interface-template
# Ростелеком (основной провайдер)
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-RTK cost=100 area=ihor-swe-area

# МТС (резервный провайдер)
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=1000 area=ihor-swe-area

Проверка настройки

На HOME:

# Проверить 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:

# Проверить OSPF интерфейсы
/routing ospf interface-template print

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

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

На SWE-HIPHOST:

# Проверить OSPF интерфейсы
/routing ospf interface-template print

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

Тестирование приоритизации

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

# На HOME проверить активный маршрут
/ip route print where dst-address=0.0.0.0/0

# Должен показать маршрут через IHOR как активный

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

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

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

Тест 3: Тест failover

# Отключить 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

Создать скрипт для мониторинга:

/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
}

Запуск мониторинга:

/system script run check-ospf-cost

Динамическое изменение cost

Для временного переключения на прямой маршрут:

# Временно увеличить 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:

# Вернуть низкий 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):

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# OSPF интерфейсы с приоритизацией по cost
/routing ospf interface-template
# IHOR (приоритетный) - низкий cost
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area

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

# 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):

# GRE туннель к SWE
/interface gre add name=gre-SWE-HIPHOST remote-address=<SWE_WAN_IP> local-address=<IHOR_WAN_IP>
/ip address add address=10.200.2.1/30 interface=gre-SWE-HIPHOST

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# OSPF интерфейсы
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-swe-area
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST cost=10 area=ihor-swe-area

# Статический маршрут через 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):

# GRE туннель от IHOR
/interface gre add name=gre-IHOR-SWE remote-address=<IHOR_WAN_IP> local-address=<SWE_WAN_IP>
/ip address add address=10.200.2.2/30 interface=gre-IHOR-SWE

# Создать area 0.0.0.4
/routing ospf area
add name=ihor-swe-area instance=default area-id=0.0.0.4

# OSPF интерфейсы
/routing ospf interface-template
add interfaces=gre-SWE-HIPHOST-RTK cost=1000 area=ihor-swe-area
add interfaces=gre-SWE-HIPHOST-MTS cost=2000 area=ihor-swe-area
add interfaces=gre-IHOR-SWE cost=10 area=ihor-swe-area

# OSPF redistribute
/routing ospf instance
set [ find default=yes ] redistribute=connected,static

Заключение

Данная настройка обеспечивает:

  1. Оба маршрута существуют (прямой и через IHOR)
  2. Управление приоритетом через OSPF cost
  3. Автоматический failover при отказе основного маршрута
  4. Гибкость настройки - можно легко изменить приоритеты

Теперь у вас будет полный контроль над маршрутизацией через настройку OSPF cost.