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

> Настройка маршрута по умолчанию (default gateway) в VyOS: IPv4, IPv6, метрики, ECMP, failover для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/system/vyos-default-route/



Маршрут по умолчанию (default route, default gateway) - это маршрутизационная запись, определяющая, куда должны направляться пакеты, для которых не найден более специфичный маршрут в таблице маршрутизации. В VyOS маршрут по умолчанию настраивается через статические маршруты и является критически важным элементом сетевой конфигурации.

## Основные концепции

### Что такое маршрут по умолчанию

**Default route** - это маршрут к сети с префиксом `0.0.0.0/0` для IPv4 или `::/0` для IPv6. Эти префиксы охватывают все возможные IP-адреса, но имеют наименьшую специфичность (самую длинную маску сети).

**Принцип работы**:
- Маршрутизатор ищет наиболее специфичный (longest prefix match) маршрут для пакета
- Если конкретный маршрут не найден, используется маршрут по умолчанию
- Default gateway - это next-hop адрес в маршруте по умолчанию

**Применение**:
- Направление всего трафика во внешние сети (интернет)
- Соединение удаленных сетей через центральный маршрутизатор
- Облачные окружения (Yandex Cloud, VK Cloud, AWS, Azure)

### Эволюция конфигурации в VyOS

**Старый способ (VyOS 1.1.x и ранее)**:
```bash
# Не используется в современных версиях
set system gateway-address 192.168.1.254
```

**Современный способ (VyOS 1.2+)**:
```bash
# Правильный метод через static route
set protocols static route 0.0.0.0/0 next-hop 192.168.1.254
```

**Важно**: Команда `set system gateway-address` больше не поддерживается. Используйте только `protocols static route`.

### Метрика и административная дистанция

**Distance (административная дистанция)**:
- Определяет приоритет между маршрутами от разных источников
- По умолчанию для static routes: **1**
- Меньшее значение = выше приоритет

**Примеры distance**:
- Connected routes: 0
- Static routes: 1
- OSPF: 110
- BGP: 200

**Metric (метрика маршрута)**:
- Используется для выбора между несколькими маршрутами к одной сети от одного протокола
- Меньшее значение = предпочтительнее
- По умолчанию для static routes: **0**

## Конфигурация IPv4 Default Route

### Базовая конфигурация

```bash
# Простейший вариант - маршрут по умолчанию через next-hop
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1

commit
save
```

**Проверка**:
```bash
show ip route 0.0.0.0

# Вывод:
# Routing entry for 0.0.0.0/0
#   Known via "static", distance 1, metric 0, best
#   Last update 00:05:23 ago
#   * 192.168.1.1, via eth0
```

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

Для point-to-point соединений можно указывать только интерфейс без next-hop:

```bash
# Маршрут через интерфейс (для PPPoE, туннелей)
set protocols static route 0.0.0.0/0 interface pppoe0

commit
save
```

**Применение**:
- PPPoE подключения
- GRE, IPsec туннели
- VPN соединения

### Настройка distance

```bash
# Маршрут с измененной административной дистанцией
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 10

commit
save
```

**Применение**: Резервный маршрут с более высоким distance будет использоваться только при недоступности основного.

### DHCP-learned default route

При получении IP-адреса по DHCP VyOS автоматически получает и default gateway:

```bash
# DHCP на интерфейсе
set interfaces ethernet eth0 address dhcp

commit
save
```

**Проверка DHCP-полученного маршрута**:
```bash
show ip route 0.0.0.0

# Вывод покажет:
# Known via "dhcp"
```

**Приоритет**: DHCP-маршруты обычно имеют distance выше, чем статические, и будут заменены статическим маршрутом.

### Удаление default route

```bash
# Удалить маршрут по умолчанию
delete protocols static route 0.0.0.0/0

commit
save
```

## Конфигурация IPv6 Default Route

### Базовая конфигурация IPv6

```bash
# IPv6 default route
set protocols static route6 ::/0 next-hop 2001:db8::1

commit
save
```

**Проверка**:
```bash
show ipv6 route ::/0

# Вывод:
# Routing entry for ::/0
#   Known via "static", distance 1, metric 0, best
#   Last update 00:02:15 ago
#   * 2001:db8::1, via eth0
```

### IPv6 через Router Advertisement

В IPv6 default route часто получается автоматически через Router Advertisement (RA):

```bash
# Включить прием RA на интерфейсе
set interfaces ethernet eth0 ipv6 address autoconf

commit
save
```

**Проверка RA-полученного маршрута**:
```bash
show ipv6 route ::/0

# Вывод покажет:
# Known via "ra" (Router Advertisement)
```

### DHCPv6 и default route

DHCPv6 не передает default gateway (по дизайну протокола). Для IPv6 default route используются:
- Router Advertisement (RA)
- Статический маршрут
- Динамический протокол маршрутизации (OSPFv3, BGP)

```bash
# Получение адреса через DHCPv6
set interfaces ethernet eth0 address dhcpv6

# Default route все равно нужен отдельно
set protocols static route6 ::/0 next-hop 2001:db8::1

commit
save
```

### IPv6 через интерфейс

```bash
# IPv6 default route через интерфейс
set protocols static route6 ::/0 interface sit0

commit
save
```

**Применение**: Туннели IPv6-in-IPv4, 6to4, 6rd.

## Множественные маршруты по умолчанию

### ECMP (Equal-Cost Multi-Path)

VyOS поддерживает балансировку трафика между несколькими равноценными маршрутами:

```bash
# Два маршрута с одинаковой метрикой
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 next-hop 192.168.1.2

# Включить layer4 hashing для балансировки по сессиям
set system ip multipath layer4-hashing

commit
save
```

**Механизм балансировки**:
- `layer4-hashing`: Использует source IP, destination IP, protocol, source port, destination port
- Обеспечивает сохранение порядка пакетов для одной TCP-сессии
- Распределение по принципу "per-flow", а не "per-packet"

**Проверка**:
```bash
show ip route 0.0.0.0

# Вывод покажет оба next-hop:
# Routing entry for 0.0.0.0/0
#   Known via "static", distance 1, metric 0, best
#   * 192.168.1.1, via eth0
#   * 192.168.1.2, via eth0
```

### Failover через distance

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

```bash
# Основной маршрут (distance 1)
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1

# Резервный маршрут (distance 10)
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

commit
save
```

**Поведение**:
- Используется маршрут с наименьшим distance (192.168.1.1)
- При недоступности основного next-hop активируется резервный (192.168.2.1)
- Требуется отслеживание доступности next-hop (BFD, track)

### Комбинация ECMP + Failover

```bash
# Два основных маршрута с ECMP (distance 1)
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1
set protocols static route 0.0.0.0/0 next-hop 192.168.1.2 distance 1

# Резервный маршрут (distance 10)
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

# Балансировка для основных маршрутов
set system ip multipath layer4-hashing

commit
save
```

**Результат**:
- Балансировка между 192.168.1.1 и 192.168.1.2
- Автоматическое переключение на 192.168.2.1 при недоступности обоих основных

## Маршрутизация по таблицам (VRF)

### Default route в VRF

VyOS поддерживает VRF (Virtual Routing and Forwarding) для изоляции маршрутных таблиц:

```bash
# Создать VRF
set vrf name CUSTOMER1 table 100

# Назначить интерфейс в VRF
set interfaces ethernet eth2 vrf CUSTOMER1

# Default route в VRF CUSTOMER1
set vrf name CUSTOMER1 protocols static route 0.0.0.0/0 next-hop 10.0.1.1

commit
save
```

**Проверка**:
```bash
# Показать маршруты в VRF
show ip route vrf CUSTOMER1

# Показать все VRF
show vrf
```

### Policy-Based Routing (PBR) с default route

PBR позволяет направлять трафик в определенные маршруты на основе правил:

```bash
# Создать policy route
set policy route PBR rule 10 source address 192.168.10.0/24
set policy route PBR rule 10 set table 100

# Таблица маршрутизации 100
set protocols static table 100 route 0.0.0.0/0 next-hop 203.0.113.1

# Применить на интерфейсе
set interfaces ethernet eth1 policy route PBR

commit
save
```

**Применение**: Направление трафика от определенных подсетей через конкретный ISP.

## Примеры для облачных провайдеров

### Yandex Cloud - Default Route

**Сценарий**: VyOS в Yandex Cloud с маршрутом по умолчанию к виртуальному роутеру облака.

**Получение gateway Yandex Cloud**:
- Gateway всегда первый IP в подсети
- Для подсети `10.128.0.0/24` gateway будет `10.128.0.1`

**Конфигурация**:
```bash
# Интерфейс в Yandex Cloud подсети
set interfaces ethernet eth0 address 10.128.0.10/24
set interfaces ethernet eth0 description 'Yandex Cloud Subnet'

# Default route к Yandex Cloud gateway
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1
set protocols static route 0.0.0.0/0 description 'Yandex Cloud default gateway'

commit
save
```

**Проверка**:
```bash
# Проверить маршрут
show ip route 0.0.0.0

# Проверить connectivity
ping 8.8.8.8

# Trace маршрута
traceroute 8.8.8.8
```

**Yandex Cloud специфика**:
- Виртуальный роутер доступен по первому IP подсети
- Поддержка только статического маршрута (нет DHCP option 3 по умолчанию)
- Необходима статическая конфигурация

### Yandex Cloud - Dual-Homed с failover

**Сценарий**: VyOS с двумя интерфейсами в разных подсетях для отказоустойчивости.

```bash
# Первый интерфейс (primary)
set interfaces ethernet eth0 address 10.128.0.10/24
set interfaces ethernet eth0 description 'Yandex Cloud Primary'

# Второй интерфейс (backup)
set interfaces ethernet eth1 address 10.129.0.10/24
set interfaces ethernet eth1 description 'Yandex Cloud Backup'

# Основной маршрут через eth0 (distance 1)
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1 distance 1
set protocols static route 0.0.0.0/0 description 'Primary default route'

# Резервный маршрут через eth1 (distance 10)
set protocols static route 0.0.0.0/0 next-hop 10.129.0.1 distance 10
set protocols static route 0.0.0.0/0 description 'Backup default route'

commit
save
```

**Мониторинг failover**:
```bash
# Постоянный мониторинг маршрута
watch -n 1 'show ip route 0.0.0.0'

# Проверка в логах
monitor log
```

### VK Cloud - Dual Default Routes с метриками

**Сценарий**: VK Cloud setup с двумя ISP для балансировки и резервирования.

```bash
# Интерфейс к VK Cloud router
set interfaces ethernet eth0 address 10.0.0.10/24
set interfaces ethernet eth0 description 'VK Cloud Primary'

# Второй интерфейс (backup ISP)
set interfaces ethernet eth1 address 10.0.1.10/24
set interfaces ethernet eth1 description 'VK Cloud Secondary'

# Primary default route с distance 1
set protocols static route 0.0.0.0/0 next-hop 10.0.0.1 distance 1
set protocols static route 0.0.0.0/0 description 'VK Cloud Primary ISP'

# Secondary default route с distance 20
set protocols static route 0.0.0.0/0 next-hop 10.0.1.1 distance 20
set protocols static route 0.0.0.0/0 description 'VK Cloud Backup ISP'

# NAT для обоих интерфейсов
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 110 outbound-interface eth1
set nat source rule 110 source address 192.168.1.0/24
set nat source rule 110 translation address masquerade

commit
save
```

**ECMP вариант для VK Cloud**:
```bash
# Два маршрута с одинаковым distance для балансировки
set protocols static route 0.0.0.0/0 next-hop 10.0.0.1 distance 1
set protocols static route 0.0.0.0/0 next-hop 10.0.1.1 distance 1

# Включить layer4 hashing
set system ip multipath layer4-hashing

commit
save
```

### Yandex Cloud - IPv6 Default Route

**Сценарий**: Dual-stack в Yandex Cloud с IPv4 и IPv6 маршрутами по умолчанию.

```bash
# IPv4 адрес и маршрут
set interfaces ethernet eth0 address 10.128.0.10/24
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1

# IPv6 адрес и маршрут
set interfaces ethernet eth0 address 2a02:6b8::/64
set protocols static route6 ::/0 next-hop 2a02:6b8::1

commit
save
```

**Проверка dual-stack**:
```bash
# IPv4
ping 8.8.8.8

# IPv6
ping6 2001:4860:4860::8888

# Показать оба маршрута
show ip route 0.0.0.0
show ipv6 route ::/0
```

## Расширенная конфигурация

### BFD для отслеживания next-hop

Bidirectional Forwarding Detection (BFD) обеспечивает быстрое обнаружение сбоев next-hop:

```bash
# Настроить BFD профиль
set protocols bfd peer 192.168.1.1 interval transmit 300
set protocols bfd peer 192.168.1.1 interval receive 300
set protocols bfd peer 192.168.1.1 interval multiplier 3

# Связать статический маршрут с BFD
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 bfd

# Резервный маршрут
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

commit
save
```

**Параметры BFD**:
- `transmit`: Интервал отправки BFD пакетов (мс)
- `receive`: Ожидаемый интервал приема (мс)
- `multiplier`: Количество пропущенных пакетов для детекции сбоя

**Результат**: При недоступности 192.168.1.1 (по BFD) маршрут автоматически переключается на резервный.

### Next-hop tracking

Отслеживание доступности next-hop без BFD:

```bash
# Статический маршрут с проверкой доступности next-hop
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 disable-route-map

# Резервный маршрут активируется при недоступности основного
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

commit
save
```

### Default route с SNAT

Автоматическая настройка NAT для default route:

```bash
# Default route
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1

# Source NAT для исходящего трафика
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 10.0.0.0/8
set nat source rule 100 translation address masquerade

commit
save
```

**Применение**: Типичная конфигурация для edge роутера с приватной LAN.

### Metric для влияния на выбор маршрута

```bash
# Два маршрута с разными метриками
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1
set protocols static route 0.0.0.0/0 metric 10

set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 1
set protocols static route 0.0.0.0/0 metric 20

commit
save
```

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

### Null route как default

Для специальных случаев (blackhole routing, тестирование):

```bash
# Отбросить весь трафик, для которого нет маршрута
set protocols static route 0.0.0.0/0 blackhole

commit
save
```

**Применение**: Защита от DDoS, тестирование, временная изоляция сети.

## Команды проверки и диагностики

### Просмотр default route

```bash
# IPv4 default route
show ip route 0.0.0.0

# Вывод:
# Routing entry for 0.0.0.0/0
#   Known via "static", distance 1, metric 0, best
#   Last update 00:15:32 ago
#   * 192.168.1.1, via eth0

# IPv6 default route
show ipv6 route ::/0

# Все static routes
show ip route static

# Только default routes
show ip route 0.0.0.0/0
```

### Полная таблица маршрутизации

```bash
# Вся таблица маршрутизации IPv4
show ip route

# Вся таблица маршрутизации IPv6
show ipv6 route

# JSON формат для автоматизации
show ip route json
```

### Проверка next-hop доступности

```bash
# Ping к gateway
ping 192.168.1.1

# Traceroute через default route
traceroute 8.8.8.8

# ARP запись для gateway (должна быть resolved)
show arp | grep 192.168.1.1

# IPv6 neighbor для gateway
show ipv6 neighbors | grep 2001:db8::1
```

### Мониторинг изменений маршрута

```bash
# Real-time мониторинг таблицы маршрутизации
monitor protocol static

# Логи маршрутизации
show log | grep routing

# FRR логи (VyOS использует FRR для маршрутизации)
show log tail 100 | grep staticd
```

### Проверка ECMP балансировки

```bash
# Показать статистику интерфейсов
show interfaces ethernet eth0 statistics
show interfaces ethernet eth1 statistics

# Сравнить TX bytes для балансировки
watch -n 1 'show interfaces ethernet eth0 statistics ; show interfaces ethernet eth1 statistics'

# Kernel routing cache (только для диагностики)
ip route get 8.8.8.8
```

### BFD статус

```bash
# Показать BFD сессии
show protocols bfd peers

# Детальная информация о BFD peer
show protocols bfd peer 192.168.1.1

# Статистика BFD
show protocols bfd peer 192.168.1.1 counters
```

### VRF маршруты

```bash
# Показать маршруты в конкретном VRF
show ip route vrf CUSTOMER1

# Список всех VRF
show vrf

# Ping из VRF
ping 8.8.8.8 vrf CUSTOMER1
```

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

### 1. Default route не применяется

**Симптомы**: Пакеты не уходят через настроенный default gateway.

**Проверка**:
```bash
# Проверить, существует ли маршрут
show ip route 0.0.0.0

# Проверить конфигурацию
show configuration protocols static

# Проверить FRR статус
show ip protocol
```

**Решение**:
```bash
# Пересоздать маршрут
delete protocols static route 0.0.0.0/0
commit

set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
commit
save

# Перезапустить FRR (крайняя мера)
restart routing-daemon static
```

### 2. Next-hop недоступен

**Симптомы**: Маршрут в таблице, но трафик не проходит.

**Проверка**:
```bash
# Проверить ARP для next-hop
show arp | grep 192.168.1.1

# Ping к next-hop
ping 192.168.1.1

# Проверить интерфейс
show interfaces ethernet eth0
```

**Решение**:
```bash
# Проверить физическое подключение
show interfaces ethernet eth0 physical

# Очистить ARP cache
reset arp interface eth0

# Проверить IP-адрес интерфейса в той же подсети с gateway
show interfaces

# Если нужно - исправить IP
set interfaces ethernet eth0 address 192.168.1.10/24
commit
```

### 3. DHCP конфликтует со статическим маршрутом

**Симптомы**: DHCP перезаписывает статический default route.

**Проверка**:
```bash
# Показать все default routes
show ip route 0.0.0.0

# Проверить DHCP конфигурацию
show interfaces ethernet eth0 | grep dhcp
```

**Решение**:
```bash
# Вариант 1: Отключить DHCP option 3 (gateway)
set interfaces ethernet eth0 dhcp-options no-default-route
commit
save

# Вариант 2: Использовать более низкий distance для static route
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1
commit
save

# DHCP маршруты обычно имеют distance > 20
```

### 4. Failover не переключается

**Симптомы**: При сбое основного маршрута резервный не активируется.

**Проверка**:
```bash
# Проверить distance обоих маршрутов
show ip route 0.0.0.0 detail

# Проверить connectivity к next-hop
ping 192.168.1.1
ping 192.168.2.1

# Проверить BFD (если используется)
show protocols bfd peers
```

**Решение**:
```bash
# Убедиться в разных distance
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10
commit
save

# Настроить BFD для быстрого детекта
set protocols bfd peer 192.168.1.1 interval transmit 300
set protocols bfd peer 192.168.1.1 interval receive 300
set protocols bfd peer 192.168.1.1 interval multiplier 3

set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 bfd
commit
save
```

### 5. ECMP не балансирует трафик

**Симптомы**: Весь трафик идет через один из маршрутов.

**Проверка**:
```bash
# Проверить оба маршрута в таблице
show ip route 0.0.0.0

# Должно быть два next-hop с одинаковым distance и metric

# Проверить multipath конфигурацию
show configuration system ip multipath
```

**Решение**:
```bash
# Убедиться, что distance и metric одинаковые
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 next-hop 192.168.1.2

# Включить layer4-hashing
set system ip multipath layer4-hashing

commit
save

# Проверить kernel балансировку
ip route show 0.0.0.0/0
# Должно показать: nexthop via 192.168.1.1 ... nexthop via 192.168.1.2
```

### 6. IPv6 default route отсутствует

**Симптомы**: IPv4 работает, IPv6 connectivity нет.

**Проверка**:
```bash
# Проверить IPv6 маршруты
show ipv6 route ::/0

# Проверить IPv6 на интерфейсе
show interfaces ethernet eth0 | grep inet6

# Проверить RA (если ожидается автоконфигурация)
tcpdump -i eth0 -n icmp6
```

**Решение**:
```bash
# Вариант 1: Статический IPv6 маршрут
set protocols static route6 ::/0 next-hop 2001:db8::1
commit
save

# Вариант 2: Автоконфигурация через RA
set interfaces ethernet eth0 ipv6 address autoconf
commit
save

# Проверить connectivity
ping6 2001:4860:4860::8888
```

### 7. Маршрут в таблице, но трафик не идет

**Симптомы**: `show ip route` показывает маршрут, но `ping` не работает.

**Проверка**:
```bash
# Проверить firewall
show firewall

# Проверить NAT (если edge router)
show nat source rules

# Проверить IP forwarding
sysctl net.ipv4.ip_forward

# Проверить интерфейс status
show interfaces
```

**Решение**:
```bash
# Убедиться, что IP forwarding включен (должен быть по умолчанию)
# НЕ использовать эту команду (она ОТКЛЮЧИТ forwarding):
# set system ip disable-forwarding

# Проверить, что forwarding активен
sysctl net.ipv4.ip_forward
# Должно быть: net.ipv4.ip_forward = 1

# Настроить NAT для исходящего трафика (если нужен)
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 192.168.0.0/16
set nat source rule 100 translation address masquerade

# Разрешить исходящий трафик в firewall
set firewall name LAN_OUT rule 10 action accept
set firewall interface eth1 out name LAN_OUT

commit
save
```

### 8. Yandex Cloud connectivity проблемы

**Симптомы**: VyOS в Yandex Cloud не может достучаться до интернета.

**Проверка**:
```bash
# Проверить IP конфигурацию
show interfaces

# Проверить default route
show ip route 0.0.0.0

# Ping к Yandex Cloud gateway (первый IP подсети)
ping 10.128.0.1

# Проверить Yandex Cloud metadata service
curl http://169.254.169.254/latest/meta-data/
```

**Решение**:
```bash
# Корректная конфигурация для Yandex Cloud
# Gateway = первый IP в подсети

# Для подсети 10.128.0.0/24:
set interfaces ethernet eth0 address 10.128.0.10/24
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1

# Для подсети 192.168.1.0/24:
set interfaces ethernet eth0 address 192.168.1.10/24
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1

commit
save

# Проверить Security Group в Yandex Cloud Console
# Должен разрешать ICMP, TCP, UDP outbound
```

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

### 1. Документирование маршрутов

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

```bash
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 description 'Primary ISP - Provider A'

set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10
set protocols static route 0.0.0.0/0 description 'Backup ISP - Provider B'

commit
save
```

### 2. Использование distance для приоритизации

**Рекомендуемые значения distance**:
- Primary static route: 1-5
- Backup static route: 10-20
- DHCP-learned route: обычно 20+ (автоматически)
- Динамические протоколы: 110 (OSPF), 200 (BGP)

```bash
# Основной
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 1

# Резервный
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

# Аварийный (например, через дорогой LTE)
set protocols static route 0.0.0.0/0 next-hop 192.168.3.1 distance 20
```

### 3. ECMP для балансировки

Используйте ECMP только для соединений с равной пропускной способностью:

```bash
# Два канала 100 Mbps каждый
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static route 0.0.0.0/0 next-hop 192.168.1.2

set system ip multipath layer4-hashing

commit
save
```

**Не используйте ECMP** для каналов с разной пропускной способностью (100 Mbps + 10 Mbps) - это приведет к неэффективному использованию.

### 4. BFD для критичных маршрутов

Для production используйте BFD для быстрого обнаружения сбоев:

```bash
# BFD с агрессивными таймерами для критичных систем
set protocols bfd peer 192.168.1.1 interval transmit 300
set protocols bfd peer 192.168.1.1 interval receive 300
set protocols bfd peer 192.168.1.1 interval multiplier 3

set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 bfd

# Резервный маршрут
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1 distance 10

commit
save
```

**Failover время**: 300ms × 3 = 900ms при агрессивных настройках.

### 5. IPv6 наравне с IPv4

Всегда настраивайте IPv6 default route вместе с IPv4:

```bash
# IPv4
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1

# IPv6
set protocols static route6 ::/0 next-hop 2001:db8::1

commit
save
```

### 6. NAT для edge роутеров

Связывайте default route с NAT для исходящего трафика:

```bash
# Default route
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1

# Source NAT на outbound интерфейсе
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 10.0.0.0/8
set nat source rule 100 translation address masquerade

commit
save
```

### 7. Мониторинг маршрутов

Регулярно проверяйте состояние маршрутов:

```bash
# Скрипт для мониторинга
cat > /config/scripts/check-default-route.sh << 'EOF'
#!/bin/bash

ROUTE=$(ip route show 0.0.0.0/0)

if [ -z "$ROUTE" ]; then
    logger -t DEFAULT_ROUTE "CRITICAL: No default route found"
    # Отправить алерт
    echo "No default route!" | mail -s "VyOS Alert" admin@example.com
else
    logger -t DEFAULT_ROUTE "OK: Default route is present"
fi
EOF

chmod +x /config/scripts/check-default-route.sh

# Запланировать проверку
set system task-scheduler task check-route interval '*/5 * * * *'
set system task-scheduler task check-route executable path '/config/scripts/check-default-route.sh'

commit
save
```

### 8. Облачные провайдеры

**Yandex Cloud**:
- Gateway = первый IP в подсети
- Используйте статические маршруты (не полагайтесь на DHCP option 3)
- Проверяйте Security Groups для outbound connectivity

**VK Cloud**:
- Аналогично Yandex Cloud - gateway первый IP
- Dual-homed конфигурация для redundancy
- Используйте distance для failover

**AWS, Azure, GCP**:
- Обычно используется DHCP для default route
- Для static маршрутов проверяйте VPC route tables
- Учитывайте route propagation в облаке

### 9. Резервное копирование конфигурации

Всегда сохраняйте working config после изменения маршрутов:

```bash
# После настройки маршрутов
commit
save

# Создать backup
save /config/backups/config-$(date +%Y%m%d-%H%M).boot
```

### 10. Тестирование перед production

Проверяйте маршруты перед внедрением:

```bash
# 1. Проверить connectivity
ping 8.8.8.8

# 2. Traceroute
traceroute 8.8.8.8

# 3. DNS resolution
nslookup google.com

# 4. Проверить failover (если настроен)
# Временно отключить primary next-hop и проверить переключение

# 5. Проверить ECMP балансировку
for i in {1..10}; do traceroute -n 8.8.8.$i | head -2; done
```

## Сравнение с другими платформами

### Cisco IOS

**Cisco IOS**:
```
ip route 0.0.0.0 0.0.0.0 192.168.1.1
```

**VyOS эквивалент**:
```bash
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
```

### Juniper JunOS

**Juniper JunOS**:
```
set routing-options static route 0.0.0.0/0 next-hop 192.168.1.1
```

**VyOS эквивалент**:
```bash
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
```

### MikroTik RouterOS

**MikroTik**:
```
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1
```

**VyOS эквивалент**:
```bash
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
```

### Linux iproute2

**Linux**:
```bash
ip route add default via 192.168.1.1
```

**VyOS эквивалент**:
```bash
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
```

## Заключение

Маршрут по умолчанию - критически важный элемент конфигурации VyOS, определяющий путь для всего исходящего трафика без более специфичных маршрутов. Современный VyOS использует синтаксис `protocols static route` для настройки default route как для IPv4 (0.0.0.0/0), так и для IPv6 (::/0).

Ключевые моменты:
- Используйте `distance` для failover между несколькими маршрутами
- ECMP с `layer4-hashing` для балансировки между равноценными каналами
- BFD для быстрого обнаружения сбоев next-hop
- Всегда документируйте маршруты через `description`
- Проверяйте connectivity после изменений

Для облачных окружений (Yandex Cloud, VK Cloud) используйте статические маршруты с gateway равным первому IP в подсети. Для отказоустойчивости настраивайте несколько маршрутов с разными distance, опционально с BFD для быстрого failover.

Правильная настройка default route обеспечивает надежное соединение с внешними сетями и является основой для построения масштабируемой и отказоустойчивой сетевой инфраструктуры на базе VyOS.

