Enhance README.md with detailed instructions for configuring OSPF in "receive-only" mode on HOME. Added multiple approaches for achieving this configuration, including disabling route redistribution, using filters, and creating stub areas. Included a comparison table of methods and emphasized the importance of avoiding inter-server routing. Updated sections on OSPF instance isolation and provided comprehensive examples for each method.

This commit is contained in:
2025-07-11 09:49:08 +07:00
parent 84f4398dcb
commit 0b669e7053
+466 -9
View File
@@ -753,16 +753,147 @@ add src-address=192.168.222.0/24 action=lookup table=MSK # Основной т
1. **Прямая связь между серверами**: VPSVILLE ↔ IHOR через GRE туннель 10.200.0.0/30
2. **OSPF анонсирует маршруты**: Каждый сервер анонсирует свои сети через OSPF
3. **HOME получает маршруты**: HOME получает маршруты от обоих серверов через OSPF
3. **HOME получает маршруты**: HOME получает маршруты от обоих серверов через OSPF (только получение)
4. **Автоматический failover**: Если один сервер недоступен, OSPF убирает маршруты через него
5. **Оптимальные маршруты**: OSPF выбирает кратчайший путь между серверами
### Настройка OSPF "только получение" на HOME
**ВАЖНО**: `passive=yes` отключает OSPF полностью, включая получение маршрутов! Это НЕ подходит для вашей задачи.
Для того чтобы HOME gateway только получал маршруты от VPSVILLE и IHOR, но не отправлял свои маршруты, используется несколько подходов:
### ❌ НЕ РАБОТАЕТ: Passive Mode
```shell
# ВНИМАНИЕ: Это НЕ работает!
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone passive=yes # ❌ Маршруты пропадут
```
**Почему не работает**: `passive=yes` отключает OSPF полностью - нет hello пакетов, нет соседства, нет маршрутов.
#### Способ 1: Отключение redistribute (Рекомендуемый)
```shell
# На HOME - нормальные OSPF интерфейсы (получение + отправка hello)
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone
add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone
# Отключить redistribute (не анонсировать маршруты)
/routing ospf instance
set [ find default=yes ] redistribute=none
```
**Как это работает**:
- ✅ OSPF соседство устанавливается (hello пакеты отправляются)
- ✅ Маршруты от VPSVILLE/IHOR получаются
- ❌ HOME не анонсирует свои маршруты (redistribute=none)
#### Способ 2: Использование фильтров
```shell
# На HOME - нормальные OSPF интерфейсы
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
# Создать фильтр который отклоняет все исходящие маршруты
/routing filter
add name=ospf-out-reject-all chain=output protocol=ospf rule="reject"
# Применить фильтр к OSPF instance
/routing ospf instance
set [ find default=yes ] out-filter=ospf-out-reject-all
```
#### Способ 3: Stub Area (для сложных сетей)
```shell
# Создать stub area для HOME
/routing ospf area
add name=home-stub instance=default area-id=0.0.0.1 stub=yes
# Добавить интерфейсы HOME в stub area
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=home-stub
add interfaces=gre-MSK-IHOR-RTK cost=10 area=home-stub
```
#### Способ 4: Passive Mode (НЕ РЕКОМЕНДУЕТСЯ)
```shell
# ВНИМАНИЕ: passive=yes отключает OSPF полностью, включая получение маршрутов!
# Этот способ НЕ работает для вашей задачи
# На HOME - интерфейсы в passive mode (НЕ РАБОТАЕТ!)
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone passive=yes # ❌ Маршруты пропадут
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone passive=yes # ❌ Маршруты пропадут
```
### Сравнение способов настройки OSPF "только получение"
| Способ | Простота | Совместимость | Гибкость | Работает | Рекомендация |
|--------|----------|---------------|----------|----------|--------------|
| **Отключение redistribute** | Высокая | Все версии | Низкая | ✅ Да | **Рекомендуемый** |
| **Фильтры** | Средняя | Все версии | Высокая | ✅ Да | Для точного контроля |
| **Stub Area** | Низкая | Все версии | Низкая | ✅ Да | Для сложных сетей |
| **Passive Mode** | Высокая | RouterOS 7.14+ | Низкая | ❌ Нет | НЕ РЕКОМЕНДУЕТСЯ |
### Рекомендуемая конфигурация для HOME
```shell
# 1. OSPF instance без redistribute (НЕ анонсировать маршруты)
/routing ospf instance
set [ find default=yes ] redistribute=none
# 2. Нормальные OSPF интерфейсы (получение + отправка hello)
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone
add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone
# 3. Проверка что маршруты получаются
/routing ospf route print
/ip route print where protocol=ospf
```
### Проверка работы OSPF "только получение"
```shell
# На HOME проверить что маршруты получаются
/routing ospf route print
# На VPSVILLE/IHOR проверить что маршруты от HOME не анонсируются
/routing ospf route print
# Проверить OSPF соседей
/routing ospf neighbor print
# Проверить что HOME не анонсирует маршруты
/routing ospf route print where originator=10.100.0.1
```
### Роль HOME в архитектуре
- **HOME - конечная точка**: Подключается к серверам по GRE, но не участвует в межсерверной маршрутизации
- **Получение маршрутов**: HOME получает маршруты от серверов через OSPF
- **Policy routing**: HOME использует route tables для выбора нужного сервера/провайдера
- **Отправка трафика**: HOME отправляет трафик по правилам маршрутизации
| Роль | Описание | OSPF настройка |
|------|----------|----------------|
| **Конечная точка** | Подключается к серверам по GRE, но не участвует в межсерверной маршрутизации | passive=yes |
| **Получение маршрутов** | HOME получает маршруты от серверов через OSPF | redistribute=none |
| **Policy routing** | HOME использует route tables для выбора нужного сервера/провайдера | routing rules |
| **Отправка трафика** | HOME отправляет трафик по правилам маршрутизации | route tables |
### Преимущества OSPF "только получение" на HOME
| Преимущество | Описание | Практическое применение |
|--------------|----------|-------------------------|
| **Безопасность** | HOME не раскрывает свои внутренние сети | Защита от несанкционированного доступа |
| **Производительность** | Меньше OSPF трафика | Снижение нагрузки на сеть |
| **Простота** | Меньше конфигурации | Легче поддерживать |
| **Контроль** | Точный контроль над маршрутизацией | Предсказуемое поведение сети |
### Пример маршрутизации
@@ -1309,9 +1440,9 @@ Area 0.0.0.0 (Backbone) - HOME
```shell
# На всех устройствах (HOME, MSK-VPSVILLE, MSK-IHOR, SWE-HIPHOST):
# 1. Создать backbone area
# 1. Создать backbone area (ВАЖНО: используйте area-id=0.0.0.1 вместо 0.0.0.0)
/routing ospf area
add name=backbone instance=default area-id=0.0.0.0
add name=backbone instance=default area-id=0.0.0.1
# 2. Добавить все GRE интерфейсы в backbone area
/routing ospf interface-template
@@ -1326,6 +1457,328 @@ add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone
add interfaces=gre-SWE-HIPHOST-MTS cost=100 area=backbone
```
**ВАЖНО**: В некоторых случаях area-id=0.0.0.0 может вызывать проблемы. Если OSPF не работает с area-id=0.0.0.0, используйте area-id=0.0.0.1.
### Решение: Изоляция серверов через отдельные OSPF Instances
Проблема: Когда все серверы в одной OSPF area, создаются нежелательные маршруты типа VPSVILLE → HOME → IHOR.
**Решение: Использовать отдельные OSPF instances для каждого сервера**
#### Конфигурация с отдельными OSPF Instances:
```shell
# На HOME (home.rt.shx.su):
# Создаем отдельные OSPF instances для каждого сервера с разным distance
/routing ospf instance
add name=vpsville-instance router-id=10.100.0.1 distance=110 # Основной (Ростелеком)
add name=ihor-instance router-id=10.100.0.1 distance=120 # Резервный (МТС)
# Создаем areas для каждого instance
/routing ospf area
add name=vpsville-area instance=vpsville-instance area-id=0.0.0.0
add name=ihor-area instance=ihor-instance area-id=0.0.0.0
# VPSVILLE интерфейсы в свой instance
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=vpsville-area instance=vpsville-instance
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=vpsville-area instance=vpsville-instance
# IHOR интерфейсы в свой instance
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-area instance=ihor-instance
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-area instance=ihor-instance
# На MSK-VPSVILLE (msk.vpsville.rt.shx.su):
# Только один OSPF instance для связи с HOME
/routing ospf instance
set [ find default=yes ] name=vpsville-instance router-id=10.100.0.2
/routing ospf area
add name=vpsville-area instance=vpsville-instance area-id=0.0.0.0
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=vpsville-area instance=vpsville-instance
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=vpsville-area instance=vpsville-instance
# На MSK-IHOR (msk.ihor.rt.shx.su):
# Только один OSPF instance для связи с HOME
/routing ospf instance
set [ find default=yes ] name=ihor-instance router-id=10.100.0.3
/routing ospf area
add name=ihor-area instance=ihor-instance area-id=0.0.0.0
/routing ospf interface-template
add interfaces=gre-MSK-IHOR-RTK cost=10 area=ihor-area instance=ihor-instance
add interfaces=gre-MSK-IHOR-MTS cost=100 area=ihor-area instance=ihor-instance
```
#### Альтернатива: Route Tables для полного контроля
```shell
# На HOME создать отдельные таблицы маршрутизации
/routing table
add name=vpsville-table fib
add name=ihor-table fib
# Настроить routing rules для выбора таблицы
/routing rule
add src-address=192.168.111.0/24 action=lookup table=vpsville-table # HomeLab → VPSVILLE
add src-address=192.168.222.0/24 action=lookup table=ihor-table # Основной трафик → IHOR
# OSPF автоматически добавит маршруты в соответствующие таблицы
# В vpsville-table будет маршрут от VPSVILLE
# В ihor-table будет маршрут от IHOR
```
#### Почему отдельные OSPF Instances работают:
1. **Полная изоляция**: Каждый сервер работает в своем OSPF instance
2. **Нет межсерверных маршрутов**: VPSVILLE и IHOR не могут создать маршруты друг к другу через HOME
3. **Прямая связь**: Каждый сервер анонсирует маршруты только напрямую HOME
4. **Простота**: Каждый instance работает независимо, без сложных area настроек
#### Важные особенности отдельных OSPF Instances:
**Дублирование маршрутов:**
-**Нормально**: HOME получает маршрут 0.0.0.0/0 от каждого сервера
-**Автоматический выбор**: RouterOS выбирает маршрут с лучшим distance
-**Failover**: Если один сервер недоступен, используется маршрут от другого
**Cost работает только внутри instance:**
-**Между instances**: Cost не сравнивается
-**Внутри instance**: Cost работает нормально (Ростелеком vs МТС)
-**Distance**: Используется для приоритизации между instances
**Пример маршрутов на HOME:**
```shell
/ip route print where dst-address=0.0.0.0/0
# Результат:
# dst-address=0.0.0.0/0 gateway=10.100.2.2 distance=110 # От VPSVILLE (основной)
# dst-address=0.0.0.0/0 gateway=10.100.4.2 distance=120 # От IHOR (резервный)
```
#### Детальное объяснение проблемы и решения:
**Проблема с одним OSPF instance:**
- Все серверы в одном OSPF instance обмениваются всеми маршрутами
- VPSVILLE может создать маршрут VPSVILLE → HOME → IHOR
- IHOR может создать маршрут IHOR → HOME → VPSVILLE
- Это создает нежелательные межсерверные маршруты через HOME
- HOME становится транзитным узлом между серверами
**Решение с отдельными OSPF instances:**
- **VPSVILLE-HOME**: Работает в отдельном instance (vpsville-instance)
- **IHOR-HOME**: Работает в отдельном instance (ihor-instance)
- **Полная изоляция**: Серверы не могут создать маршруты друг к другу
- **Прямая связь**: Каждый сервер анонсирует маршруты только напрямую HOME
#### Схема работы отдельных OSPF Instances:
```mermaid
graph TB
subgraph "OSPF Instance: vpsville-instance"
HOME_VPS[HOME<br/>home.rt.shx.su]
VPSVILLE[MSK-VPSVILLE<br/>msk.vpsville.rt.shx.su]
GRE_VPS[GRE туннели<br/>VPSVILLE-HOME]
end
subgraph "OSPF Instance: ihor-instance"
HOME_IHR[HOME<br/>home.rt.shx.su]
IHOR[MSK-IHOR<br/>msk.ihor.rt.shx.su]
GRE_IHR[GRE туннели<br/>IHOR-HOME]
end
HOME_VPS -. "OSPF" .- GRE_VPS
GRE_VPS --> VPSVILLE
HOME_IHR -. "OSPF" .- GRE_IHR
GRE_IHR --> IHOR
%% НЕТ связи между instances!
VPSVILLE -. "НЕТ OSPF" .- IHOR
style HOME_VPS fill:#e1f5fe
style HOME_IHR fill:#e1f5fe
style VPSVILLE fill:#ff9800
style IHOR fill:#ff9800
```
#### Преимущества отдельных OSPF Instances:
| Преимущество | Описание | Практическое применение |
|--------------|----------|-------------------------|
| **Полная изоляция** | Каждый сервер в своем instance | Нет межсерверных маршрутов |
| **Простота** | Простая настройка без сложных areas | Легко понять и поддерживать |
| **Контроль** | Точный контроль над маршрутизацией | HOME получает маршруты только напрямую |
| **Масштабируемость** | Легко добавлять новые серверы | Каждый новый сервер получает свой instance |
| **Отладка** | Простая диагностика проблем | Проблемы локализованы в конкретном instance |
| **Производительность** | Меньше OSPF трафика | Каждый instance работает независимо |
#### Сравнение подходов для решения проблемы межсерверных маршрутов:
| Подход | Дублирование маршрутов | Cost между серверами | Сложность настройки | Рекомендация |
|--------|------------------------|---------------------|-------------------|--------------|
| **Один OSPF instance** | ❌ Нет дублирования | ✅ Cost работает | 🟢 Простая | ❌ Создает межсерверные маршруты |
| **Один instance + фильтры** | ❌ Нет дублирования | ✅ Cost работает | 🟡 Средняя | ✅ **Рекомендуемый** |
| **Отдельные instances** | ✅ Есть дублирование | ❌ Cost не работает | 🟢 Простая | ✅ Альтернатива |
| **Route Tables** | ✅ Нет дублирования | ✅ Полный контроль | 🟡 Средняя | ✅ Для сложных случаев |
| **NSSA Areas** | ✅ Нет дублирования | ✅ Cost работает | 🔴 Сложная | ❌ Избыточно для вашей задачи |
#### Решение 3: Один OSPF Instance с фильтрами (рекомендуемое)
**Лучшее решение**: Использовать один OSPF instance с фильтрами для запрета межсерверных маршрутов.
#### Конфигурация с одним OSPF Instance и фильтрами:
```shell
# На HOME (home.rt.shx.su):
# Один OSPF instance
/routing ospf instance
set [ find default=yes ] router-id=10.100.0.1
# Одна area
/routing ospf area
add name=backbone instance=default area-id=0.0.0.0
# Все интерфейсы в один instance с разным cost
/routing ospf interface-template
# Ростелеком (основной провайдер) - низкий cost
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone
add interfaces=gre-MSK-IHOR-RTK cost=10 area=backbone
# МТС (резервный провайдер) - высокий cost
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone
add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone
# Создать фильтр для запрета межсерверных маршрутов (простой вариант)
/routing filter
add name=ospf-no-inter-server chain=input protocol=ospf rule="if (dst-address=10.100.0.0/16) { reject } else { accept }"
# Применить фильтр к OSPF instance
/routing ospf instance
set [ find default=yes ] in-filter=ospf-no-inter-server
```
#### Альтернативный фильтр (более точный):
```shell
# Создать фильтр который отклоняет маршруты между серверами
/routing filter
add name=ospf-block-inter-server chain=input protocol=ospf rule="if (dst-address=10.100.2.0/30 && src-address=10.100.4.0/30) { reject } else { accept }"
add name=ospf-block-inter-server chain=input protocol=ospf rule="if (dst-address=10.100.4.0/30 && src-address=10.100.2.0/30) { reject } else { accept }"
add name=ospf-block-inter-server chain=input protocol=ospf rule="if (dst-address=10.100.1.0/30 && src-address=10.100.3.0/30) { reject } else { accept }"
add name=ospf-block-inter-server chain=input protocol=ospf rule="if (dst-address=10.100.3.0/30 && src-address=10.100.1.0/30) { reject } else { accept }"
# Применить фильтр
/routing ospf instance
set [ find default=yes ] in-filter=ospf-block-inter-server
```
#### На серверах (VPSVILLE, IHOR):
```shell
# Обычная OSPF конфигурация без изменений
/routing ospf instance
set [ find default=yes ] router-id=10.100.0.2 # или 10.100.0.3 для IHOR
/routing ospf area
add name=backbone instance=default area-id=0.0.0.0
/routing ospf interface-template
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone # или gre-MSK-IHOR-RTK
add interfaces=gre-MSK-VPSVILLE-MTS cost=100 area=backbone # или gre-MSK-IHOR-MTS
```
#### Почему это решение лучше:
1.**Cost работает**: Все в одном instance, cost сравнивается
2.**Нет межсерверных маршрутов**: Фильтры блокируют нежелательные маршруты
3.**Простота**: Один instance, простая настройка
4.**Гибкость**: Можно точно настроить что блокировать
5.**Производительность**: Меньше OSPF трафика чем с отдельными instances
#### Как работают фильтры:
**Простой фильтр** (рекомендуемый):
```shell
# Блокирует ВСЕ маршруты к 10.100.0.0/16
if (dst-address=10.100.0.0/16) { reject } else { accept }
```
**Что это означает:**
- ✅ HOME получает маршруты 0.0.0.0/0 от серверов
- ❌ HOME НЕ получает маршруты к GRE туннелям (10.100.x.x)
- ✅ Серверы не могут создать маршруты друг к другу через HOME
- ✅ Cost работает для выбора оптимального пути к интернету
**Результат:**
- VPSVILLE анонсирует: 0.0.0.0/0 (cost=10 через Ростелеком, cost=100 через МТС)
- IHOR анонсирует: 0.0.0.0/0 (cost=10 через Ростелеком, cost=100 через МТС)
- HOME выбирает лучший маршрут на основе cost
- НЕТ маршрутов типа VPSVILLE → HOME → IHOR
#### Проверка работы одного OSPF Instance с фильтрами:
```shell
# Проверить OSPF instance
/routing ospf instance print
# Проверить OSPF соседей
/routing ospf neighbor print
# Проверить маршруты
/routing ospf route print
# Проверить интерфейсы
/routing ospf interface-template print
# Проверить фильтры
/routing filter print
# Проверить что нет межсерверных маршрутов
/routing ospf route print where dst-address~"10.100"
```
#### Мониторинг отдельных OSPF Instances:
```shell
# На HOME проверить маршруты от VPSVILLE (vpsville-instance)
/routing ospf route print where instance=vpsville-instance
# На HOME проверить маршруты от IHOR (ihor-instance)
/routing ospf route print where instance=ihor-instance
# Проверить OSPF соседей в каждом instance
/routing ospf neighbor print where instance=vpsville-instance
/routing ospf neighbor print where instance=ihor-instance
# Убедиться что нет межсерверных маршрутов
/routing ospf route print where dst-address~"10.100"
```
#### Диагностика проблем с отдельными Instances:
```shell
# Если маршруты не получаются, проверить:
# 1. OSPF instances
/routing ospf instance print
# 2. OSPF соседей
/routing ospf neighbor print
# 3. GRE туннели
/interface gre print
# 4. Interface template
/routing ospf interface-template print
# 5. Логи OSPF
/log print where topics~"ospf"
# 6. Проверить что нет межсерверных маршрутов
/ip route print where protocol=ospf
```
### Преимущества простой схемы (Area 0.0.0.0):
1. **Простота настройки**: Все устройства в одной area
@@ -1577,11 +2030,11 @@ set [ find default=yes ] router-id=10.100.0.5 redistribute=connected
### Конфигурация на HOME (home.rt.shx.su):
```shell
# 1. OSPF конфигурация
# 1. OSPF конфигурация - только получение маршрутов
/routing ospf area
add name=backbone instance=default area-id=0.0.0.0
# 2. Добавить интерфейсы к московским серверам в OSPF
# 2. Добавить интерфейсы к московским серверам в OSPF (нормальные)
/routing ospf interface-template
# Ростелеком (основной провайдер) - низкий cost
add interfaces=gre-MSK-VPSVILLE-RTK cost=10 area=backbone
@@ -1595,6 +2048,10 @@ add interfaces=gre-MSK-IHOR-MTS cost=100 area=backbone
/routing rule
add src-address=192.168.111.0/24 action=lookup table=MTS # HomeLab → МТС
add src-address=192.168.222.0/24 action=lookup table=MSK # Основной трафик → Ростелеком
# 4. Отключить redistribute на HOME (не анонсировать маршруты)
/routing ospf instance
set [ find default=yes ] redistribute=none
```
### Межсерверные туннели (OSPF кластер)