# Статическая маршрутизация (Static Routes)

> Настройка статических маршрутов на VyOS: статические маршруты, blackhole routes, floating routes, балансировка нагрузки для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/routing/vyos-static/


Статические маршруты - это маршруты, настроенные вручную администратором, которые не изменяются автоматически при изменении топологии сети.

## Обзор

Статическая маршрутизация используется когда:
- Простая топология сети
- Предсказуемые маршруты
- Минимальные требования к ресурсам
- Полный контроль над маршрутизацией
- Нет необходимости в автоматической адаптации

**Преимущества**:
- Простая конфигурация
- Предсказуемое поведение
- Нет overhead протоколов маршрутизации
- Полный контроль
- Безопасность (нет динамического обмена)

**Недостатки**:
- Ручное управление
- Нет автоматического failover
- Не масштабируется для больших сетей
- Требует ручного обновления при изменениях

## IPv4 статические маршруты

### Базовый маршрут

Маршрут с next-hop адресом:

```
set protocols static route 192.168.2.0/24 next-hop 10.0.0.2
commit
```

Синтаксис:
```
set protocols static route <сеть/префикс> next-hop <IP-адрес>
```

### Маршрут через интерфейс

Когда next-hop находится в directly connected сети:

```
set protocols static route 192.168.3.0/24 interface eth1
commit
```

Полезно для point-to-point каналов.

### Маршрут по умолчанию

Default gateway (0.0.0.0/0):

```
set protocols static route 0.0.0.0/0 next-hop 192.0.2.1
commit
```

Весь трафик, не соответствующий другим маршрутам, пойдет через этот next-hop.

### Множественные next-hop

Балансировка нагрузки через несколько путей:

```
set protocols static route 192.168.10.0/24 next-hop 10.0.0.2
set protocols static route 192.168.10.0/24 next-hop 10.0.0.3
commit
```

Трафик будет распределяться между обоими next-hop (ECMP - Equal-Cost Multi-Path).

## Administrative Distance

Приоритет маршрута при наличии нескольких источников одной сети.

### Установка distance

```
set protocols static route 192.168.5.0/24 next-hop 10.0.0.2 distance 10
commit
```

Значения:
- **1** - по умолчанию для статических маршрутов
- **1-255** - допустимый диапазон
- **255** - маршрут отключен

### Floating Static Route

Резервный маршрут с большим distance:

```
# Основной маршрут (через OSPF, AD=110)
set protocols ospf ...

# Резервный статический маршрут
set protocols static route 192.168.20.0/24 next-hop 10.0.0.10 distance 120
commit
```

Статический маршрут активируется только если OSPF маршрут пропадет.

## Blackhole Routes

Маршруты, которые молча отбрасывают пакеты (без ICMP).

```
set protocols static route 192.168.100.0/24 blackhole
commit
```

Используется для:
- Предотвращения routing loops
- Безопасности (блокировка нежелательного трафика)
- Агрегации маршрутов

### Blackhole с distance

```
set protocols static route 10.0.0.0/8 blackhole distance 200
commit
```

## Reject Routes

Маршруты, которые отклоняют пакеты с отправкой ICMP unreachable.

```
set protocols static route 172.16.0.0/12 reject
commit
```

Отличие от blackhole:
- **blackhole** - молча отбрасывает (no ICMP)
- **reject** - отправляет ICMP destination unreachable

## BFD Support

Bidirectional Forwarding Detection для быстрого обнаружения отказов next-hop.

### Включение BFD

```
set protocols static route 192.168.30.0/24 next-hop 10.0.0.5 bfd
commit
```

BFD сессия мониторит доступность next-hop и автоматически удаляет маршрут при отказе.

### Настройка BFD профиля

```
set protocols bfd profile static-routes interval transmit 300
set protocols bfd profile static-routes interval receive 300
set protocols bfd profile static-routes interval multiplier 3

set protocols static route 192.168.40.0/24 next-hop 10.0.0.6 bfd profile static-routes
commit
```

Параметры BFD:
- **transmit** - интервал отправки (мс)
- **receive** - интервал приема (мс)
- **multiplier** - количество пропущенных пакетов до объявления down

## Disable Route

Временное отключение маршрута без удаления конфигурации:

```
set protocols static route 192.168.50.0/24 next-hop 10.0.0.7 disable
commit
```

## IPv6 статические маршруты

### Базовый IPv6 маршрут

```
set protocols static route6 2001:db8:2::/64 next-hop 2001:db8:1::2
commit
```

### IPv6 маршрут через интерфейс

```
set protocols static route6 2001:db8:3::/64 interface eth1
commit
```

### IPv6 default route

```
set protocols static route6 ::/0 next-hop 2001:db8:1::1
commit
```

### IPv6 blackhole

```
set protocols static route6 2001:db8:100::/48 blackhole
commit
```

## Routing Tables и VRF

Статические маршруты в альтернативных таблицах маршрутизации (VRF).

### Маршрут в VRF

```
set vrf name MGMT table 100
set protocols static route 192.168.99.0/24 interface eth2 vrf MGMT
commit
```

### Проверка маршрутов в VRF

```
show ip route vrf MGMT
```

## Примеры конфигурации

### Простая сеть с двумя локациями

**Топология**:
```
[Site A] ---- 10.0.0.0/30 ---- [Site B]
192.168.1.0/24             192.168.2.0/24
```

**Site A конфигурация**:
```
set protocols static route 192.168.2.0/24 next-hop 10.0.0.2
commit
```

**Site B конфигурация**:
```
set protocols static route 192.168.1.0/24 next-hop 10.0.0.1
commit
```

### Default route к ISP

```
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1
set protocols static route 0.0.0.0/0 description 'Default route to ISP'
commit
```

### Dual ISP с failover

**Топология**:
```
        ISP1 (primary)
         |
      VyOS Router
         |
        ISP2 (backup)
```

**Конфигурация**:
```
# Primary ISP (lower distance)
set protocols static route 0.0.0.0/0 next-hop 198.51.100.1 distance 10

# Backup ISP (higher distance)
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1 distance 20

commit
```

Backup маршрут активируется только при недоступности primary.

### Load balancing через два канала

```
set protocols static route 0.0.0.0/0 next-hop 198.51.100.1
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1
commit
```

Трафик распределяется between both next-hops (ECMP).

### Blackhole для безопасности

Блокировка доступа к внутренней management сети из DMZ:

```
set protocols static route 192.168.99.0/24 blackhole
commit
```

### VPN site-to-site маршруты

После настройки VPN туннеля (например, WireGuard):

```
set protocols static route 192.168.10.0/24 interface wg0
set protocols static route 192.168.20.0/24 interface wg0
commit
```

### Aggregate route с blackhole

Анонсировать агрегированный префикс, используя blackhole для несуществующих подсетей:

```
# Агрегат
set protocols static route 10.0.0.0/16 blackhole distance 200

# Конкретные подсети
set protocols static route 10.0.1.0/24 next-hop 10.1.1.1
set protocols static route 10.0.2.0/24 next-hop 10.1.1.2

commit
```

Blackhole с высоким distance не активируется, пока есть более специфичные маршруты.

### Multi-site hub-and-spoke

**Hub конфигурация**:
```
# Routes to spokes
set protocols static route 192.168.10.0/24 next-hop 10.10.0.10
set protocols static route 192.168.20.0/24 next-hop 10.10.0.20
set protocols static route 192.168.30.0/24 next-hop 10.10.0.30
commit
```

**Spoke конфигурация** (например, Spoke1):
```
# Default to hub
set protocols static route 0.0.0.0/0 next-hop 10.10.0.1

# Specific routes to other spokes (optional)
set protocols static route 192.168.20.0/24 next-hop 10.10.0.1
set protocols static route 192.168.30.0/24 next-hop 10.10.0.1
commit
```

## Операционные команды

### Просмотр таблицы маршрутизации

Все маршруты:
```
show ip route
```

Только статические:
```
show ip route static
```

Конкретная сеть:
```
show ip route 192.168.1.0/24
```

IPv6:
```
show ipv6 route
show ipv6 route static
```

### Детали маршрута

```
show ip route 192.168.1.0/24 detail
```

### Статистика

```
show ip route summary
```

### Проверка связности

```
ping 192.168.2.1
traceroute 192.168.2.1
```

Ping с source-address:
```
ping 192.168.2.1 source-address 192.168.1.1
```

## Устранение неполадок

### Маршрут не появляется в таблице

Проверьте конфигурацию:
```
show configuration commands | grep static
```

Проверьте next-hop доступность:
```
ping <next-hop-IP>
```

Проверьте interface status:
```
show interfaces
```

### Трафик не проходит

Проверьте маршрут:
```
show ip route <destination>
```

Traceroute:
```
traceroute <destination>
```

Проверьте firewall:
```
show firewall
```

Проверьте NAT (если применимо):
```
show nat source rules
```

### ECMP не балансирует

Убедитесь что оба next-hop имеют одинаковый distance:
```
show ip route static
```

Проверьте, что оба пути активны:
```
show ip route <network> detail
```

### Floating route не активируется

Проверьте distance:
```
show ip route <network> detail
```

Убедитесь что distance floating route выше чем у основного.

## Интеграция с динамическими протоколами

### Redistribute static в OSPF

```
set protocols ospf redistribute static
commit
```

### Redistribute static в BGP

```
set protocols bgp system-as 65001
set protocols bgp redistribute static
commit
```

### Route-map для selective redistribution

```
set policy route-map STATIC-TO-OSPF rule 10 action permit
set policy route-map STATIC-TO-OSPF rule 10 match ip address prefix-list ALLOWED-PREFIXES

set protocols ospf redistribute static route-map STATIC-TO-OSPF
commit
```

## Лучшие практики

1. **Документируйте маршруты** - используйте description
2. **Используйте distance** - для failover scenarios
3. **Планируйте IP-адресацию** - суммаризация префиксов
4. **Тестируйте failover** - проверяйте backup маршруты
5. **Мониторинг** - отслеживайте состояние next-hop
6. **BFD** - для быстрого обнаружения отказов
7. **Резервное копирование** - сохраняйте конфигурацию
8. **Избегайте loops** - проверяйте симметрию маршрутов
9. **Route aggregation** - используйте blackhole routes
10. **Логирование** - документируйте изменения

## Когда использовать статические маршруты

**Подходит для**:
- Малые сети (< 5 роутеров)
- Stub сети (только один выход)
- Default routes
- Host routes
- VPN site-to-site
- Lab/test среды

**Не подходит для**:
- Большие сети (> 10 роутеров)
- Частые изменения топологии
- Требование автоматического failover
- Mesh топологии
- Когда нужна быстрая конвергенция

## Миграция на динамическую маршрутизацию

При росте сети может потребоваться переход на динамическую маршрутизацию.

### Постепенная миграция

1. Запустите динамический протокол параллельно
2. Используйте distance для контроля предпочтений
3. Постепенно убирайте статические маршруты
4. Тестируйте на каждом этапе

### Hybrid подход

Комбинация статических и динамических маршрутов:
- **Static** для stub sites
- **Dynamic** (OSPF/BGP) для core
- Redistribute static в dynamic protocol

## Следующие шаги

- [OSPF](/docs/vyos/routing/vyos-ospf/) - для автоматической маршрутизации в enterprise
- [BGP](/docs/vyos/routing/vyos-bgp/) - для подключения к ISP
- [VRF](/docs/vyos/vrf/) - изоляция маршрутных таблиц
- [BFD](/docs/vyos/routing/vyos-bfd/) - быстрое обнаружение отказов

