Babel - Loop-free Distance-Vector Routing Protocol

Babel - Loop-free Distance-Vector Routing Protocol

Обзор

Babel - это современный протокол маршрутизации, специально разработанный для проводных и беспроводных mesh-сетей. Определен в RFC 8966 и представляет собой безпетлевой distance-vector протокол с расширенными возможностями для динамической маршрутизации в сложных топологиях.

Ключевые особенности

  • Loop-free Distance-Vector: Гарантированное отсутствие петель маршрутизации благодаря механизму feasibility condition
  • Dual-stack: Нативная поддержка IPv4 и IPv6 в одном протоколе
  • Адаптивные метрики: Автоматическое вычисление качества канала на основе RTT и потерь пакетов
  • Разнообразие маршрутов (Diversity Routing): Выбор маршрутов с учетом минимизации интерференции на беспроводных каналах
  • Простота конфигурации: Минимальные требования к настройке для работы в mesh-сетях
  • Быстрая сходимость: Эффективное обнаружение и реакция на изменения топологии
  • Масштабируемость: Подходит для сетей от небольших до средних размеров

Области применения

Babel оптимально подходит для следующих сценариев:

  1. Беспроводные mesh-сети: WiFi mesh, точка-многоточка, ad-hoc сети
  2. Гибридные сети: Комбинация проводных и беспроводных каналов
  3. Overlay-сети: VPN mesh, SD-WAN, туннельные топологии
  4. Домашние сети: Резервные каналы, multi-homing, отказоустойчивость
  5. Облачные инфраструктуры: Динамическая маршрутизация между виртуальными машинами

Архитектура и принципы работы

Distance-Vector с гарантией отсутствия петель

Babel использует усовершенствованный алгоритм distance-vector, который:

  1. Распространяет маршруты: Каждый узел объявляет известные ему сети и метрику до них
  2. Вычисляет метрику: Метрика увеличивается на стоимость канала при передаче через соседа
  3. Проверяет feasibility: Принимает маршрут только если он не может создать петлю
  4. Использует sequence numbers: Отслеживание версий маршрутов для обнаружения изменений
  5. Запускает loop avoidance: Специальные механизмы предотвращения петель при смене топологии

Метрики и качество каналов

Babel поддерживает различные типы метрик в зависимости от типа интерфейса:

Проводные каналы (wired):

  • Базовая метрика: hop-count (количество переходов)
  • Минимальная стоимость: 96 единиц на переход
  • Дополнительная стоимость: на основе RTT (опционально)

Беспроводные каналы (wireless):

  • ETX метрика (Expected Transmission Count)
  • Учитывает потери пакетов и повторные передачи
  • Автоматическое вычисление на основе статистики hello-пакетов

Формула метрики с RTT:

metric = base_metric + rtt_penalty
где rtt_penalty = (RTT / rtt_min) * rtt_max

Сообщения протокола

Babel использует следующие типы сообщений:

  1. Hello: Обнаружение соседей и проверка связности (периодические)
  2. IHU (I Heard You): Подтверждение получения hello и информация о качестве канала
  3. Update: Объявление маршрутов и их метрик
  4. Route Request: Запрос маршрута к конкретной сети
  5. Seqno Request: Запрос обновления sequence number для маршрута

Таймеры

  • Hello interval: Интервал отправки hello-сообщений (по умолчанию: 4 секунды)
  • Update interval: Интервал отправки обновлений маршрутов (по умолчанию: 16 секунд)
  • Hold time: Время удержания маршрута без обновлений (обычно 3.5 × hello interval)

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

Включение Babel на интерфейсах

Минимальная конфигурация для запуска Babel:

configure

# Включение Babel на интерфейсе eth1
set protocols babel interface eth1

# Сохранение конфигурации
commit
save

При добавлении первого интерфейса автоматически запускается процесс Babel (babeld).

Указание типа интерфейса

Тип интерфейса влияет на выбор метрики и оптимизацию работы протокола:

configure

# Проводной интерфейс (hop-count метрика)
set protocols babel interface eth1 type wired

# Беспроводной интерфейс (ETX метрика)
set protocols babel interface wlan0 type wireless

# Автоматическое определение (по умолчанию)
set protocols babel interface eth2 type auto

commit
save

Рекомендации по выбору типа:

  • wired: Ethernet, GRE/IPIP туннели, проводные соединения
  • wireless: WiFi mesh, точка-многоточка, мобильные каналы
  • auto: Babel автоматически определяет тип (используется hop-count)

Базовые параметры интерфейса

configure

set protocols babel interface eth1 type wired

# Hello interval (секунды)
set protocols babel interface eth1 hello-interval 4

# Update interval (секунды)
set protocols babel interface eth1 update-interval 16

# Split-horizon (предотвращение анонсов обратно отправителю)
set protocols babel interface eth1 split-horizon enable

commit
save

Расширенные настройки интерфейсов

Настройка стоимости канала

Можно явно указать стоимость приема пакетов на интерфейсе:

configure

# Установка фиксированной стоимости приема (rxcost)
# Значение в единицах Babel (256 = 1 hop)
set protocols babel interface eth1 rxcost 512

# Для беспроводных интерфейсов - использовать автоматический расчет
# delete protocols babel interface wlan0 rxcost

commit
save

Применение:

  • Принудительное предпочтение одного канала над другим
  • Создание резервных каналов с высокой стоимостью
  • Ручная корректировка автоматической метрики

RTT (Round-Trip Time) параметры

Babel может измерять RTT и использовать его для улучшения метрики:

configure

# Включение измерения RTT
set protocols babel interface eth1 enable-timestamps

# Минимальный RTT для нормализации (мс)
set protocols babel interface eth1 rtt-min 10

# Максимальное влияние RTT на метрику
set protocols babel interface eth1 rtt-max 120

# Период сглаживания RTT (секунды)
set protocols babel interface eth1 rtt-decay 42

commit
save

Как это работает:

  • Babel добавляет временные метки в hello/IHU сообщения
  • Вычисляется RTT между соседями
  • RTT влияет на метрику: penalty = (current_rtt / rtt_min) * rtt_max
  • Полезно для обнаружения перегруженных или нестабильных каналов

Channel diversity (разнообразие каналов)

Для беспроводных сетей можно использовать diversity routing - выбор маршрутов с минимальной интерференцией:

configure

# Глобальное включение diversity routing
set protocols babel diversity

# Коэффициент diversity (1-256)
# Чем выше значение, тем сильнее влияние разнообразия
set protocols babel diversity-factor 128

# Указание канала на интерфейсе
set protocols babel interface wlan0 channel 36
set protocols babel interface wlan1 channel 149

commit
save

Принцип работы:

  • Babel учитывает номера каналов при выборе маршрута
  • Предпочитает маршруты, использующие разные каналы
  • Минимизирует интерференцию в mesh-сетях WiFi
  • diversity-factor определяет насколько важно разнообразие по сравнению с метрикой

Перераспределение маршрутов

Перераспределение connected сетей

Анонсирование напрямую подключенных сетей:

configure

# Перераспределение IPv4 connected сетей
set protocols babel redistribute ipv4 connected

# Перераспределение IPv6 connected сетей
set protocols babel redistribute ipv6 connected

commit
save

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

configure

# IPv4 статические маршруты
set protocols babel redistribute ipv4 static

# IPv6 статические маршруты
set protocols babel redistribute ipv6 static

commit
save

Перераспределение из других протоколов

Babel может перераспределять маршруты из других протоколов маршрутизации:

configure

# Перераспределение из OSPF
set protocols babel redistribute ipv4 ospf

# Перераспределение из BGP
set protocols babel redistribute ipv4 bgp

# Перераспределение из RIP
set protocols babel redistribute ipv4 rip

# Перераспределение из ISIS
set protocols babel redistribute ipv4 isis

# Перераспределение из EIGRP
set protocols babel redistribute ipv4 eigrp

# Перераспределение из kernel routing table
set protocols babel redistribute ipv4 kernel

commit
save

Фильтрация перераспределяемых маршрутов

Использование prefix-list для контроля перераспределения:

configure

# Создание prefix-list
set policy prefix-list BABEL-EXPORT rule 10 action permit
set policy prefix-list BABEL-EXPORT rule 10 prefix 10.100.0.0/16

set policy prefix-list BABEL-EXPORT rule 20 action permit
set policy prefix-list BABEL-EXPORT rule 20 prefix 172.16.0.0/12

set policy prefix-list BABEL-EXPORT rule 100 action deny
set policy prefix-list BABEL-EXPORT rule 100 prefix 0.0.0.0/0 le 32

# Применение к перераспределению
set protocols babel redistribute ipv4 connected
set protocols babel redistribute ipv4 connected prefix-list BABEL-EXPORT

commit
save

Фильтрация маршрутов

Входящая фильтрация (import)

Контроль принимаемых маршрутов от соседей:

configure

# Создание prefix-list для IPv4
set policy prefix-list BABEL-IMPORT-V4 rule 10 action permit
set policy prefix-list BABEL-IMPORT-V4 rule 10 prefix 10.0.0.0/8

set policy prefix-list BABEL-IMPORT-V4 rule 20 action permit
set policy prefix-list BABEL-IMPORT-V4 rule 20 prefix 172.16.0.0/12

set policy prefix-list BABEL-IMPORT-V4 rule 100 action deny
set policy prefix-list BABEL-IMPORT-V4 rule 100 prefix 0.0.0.0/0 le 32

# Применение к интерфейсу
set protocols babel interface eth1 import-filter prefix-list BABEL-IMPORT-V4

commit
save

Исходящая фильтрация (export)

Контроль анонсируемых маршрутов на интерфейс:

configure

# Создание prefix-list для IPv6
set policy prefix-list6 BABEL-EXPORT-V6 rule 10 action permit
set policy prefix-list6 BABEL-EXPORT-V6 rule 10 prefix fd00::/8

set policy prefix-list6 BABEL-EXPORT-V6 rule 100 action deny
set policy prefix-list6 BABEL-EXPORT-V6 rule 100 prefix ::/0 le 128

# Применение к интерфейсу
set protocols babel interface eth1 export-filter prefix-list BABEL-EXPORT-V6

commit
save

Фильтрация по access-list

Альтернативный способ фильтрации с использованием access-list:

configure

# Создание access-list
set policy access-list 100 rule 10 action permit
set policy access-list 100 rule 10 source address 10.100.0.0
set policy access-list 100 rule 10 source inverse-mask 0.0.255.255

set policy access-list 100 rule 100 action deny
set policy access-list 100 rule 100 source any

# Применение к интерфейсу
set protocols babel interface eth1 import-filter access-list 100

commit
save

Dual-stack конфигурация (IPv4 и IPv6)

Одновременная работа IPv4 и IPv6

Babel нативно поддерживает dual-stack без дополнительной конфигурации:

configure

# Интерфейс с IPv4 и IPv6 адресами
set interfaces ethernet eth1 address 10.100.1.1/24
set interfaces ethernet eth1 address fd00:100:1::1/64

# Включение Babel
set protocols babel interface eth1 type wired

# Перераспределение обоих стеков
set protocols babel redistribute ipv4 connected
set protocols babel redistribute ipv6 connected

commit
save

Раздельная конфигурация для IPv4 и IPv6

configure

# IPv4 маршруты только через определенный интерфейс
set protocols babel interface eth1 ipv4 enable
set protocols babel interface eth1 ipv6 disable

# IPv6 маршруты через другой интерфейс
set protocols babel interface eth2 ipv4 disable
set protocols babel interface eth2 ipv6 enable

commit
save

Фильтрация по версии протокола

configure

# Фильтр для IPv4
set policy prefix-list BABEL-V4 rule 10 action permit
set policy prefix-list BABEL-V4 rule 10 prefix 10.0.0.0/8

# Фильтр для IPv6
set policy prefix-list6 BABEL-V6 rule 10 action permit
set policy prefix-list6 BABEL-V6 rule 10 prefix fd00::/8

# Применение
set protocols babel redistribute ipv4 connected prefix-list BABEL-V4
set protocols babel redistribute ipv6 connected prefix-list BABEL-V6

commit
save

Примеры конфигурации для Yandex Cloud

Пример 1: Mesh-сеть между виртуальными машинами

Сценарий: 4 виртуальные машины в Yandex Cloud организованы в mesh-топологию для отказоустойчивости.

Топология:

VM1 (10.100.1.1) -------- VM2 (10.100.2.1)
     |                         |
     |                         |
VM3 (10.100.3.1) -------- VM4 (10.100.4.1)

Конфигурация VM1 (10.100.1.1):

configure

# Интерфейсы
set interfaces ethernet eth1 address 10.100.1.1/24
set interfaces ethernet eth1 description 'Link to VM2'

set interfaces ethernet eth2 address 10.100.13.1/24
set interfaces ethernet eth2 description 'Link to VM3'

# Babel на обоих интерфейсах
set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired

# Loopback для идентификации
set interfaces loopback lo address 192.168.1.1/32

# Перераспределение loopback
set protocols babel redistribute ipv4 connected

commit
save

Конфигурация VM2 (10.100.2.1):

configure

set interfaces ethernet eth1 address 10.100.1.2/24
set interfaces ethernet eth1 description 'Link to VM1'

set interfaces ethernet eth2 address 10.100.24.1/24
set interfaces ethernet eth2 description 'Link to VM4'

set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired

set interfaces loopback lo address 192.168.1.2/32

set protocols babel redistribute ipv4 connected

commit
save

Конфигурация VM3 (10.100.3.1):

configure

set interfaces ethernet eth1 address 10.100.13.2/24
set interfaces ethernet eth1 description 'Link to VM1'

set interfaces ethernet eth2 address 10.100.34.1/24
set interfaces ethernet eth2 description 'Link to VM4'

set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired

set interfaces loopback lo address 192.168.1.3/32

set protocols babel redistribute ipv4 connected

commit
save

Конфигурация VM4 (10.100.4.1):

configure

set interfaces ethernet eth1 address 10.100.24.2/24
set interfaces ethernet eth1 description 'Link to VM2'

set interfaces ethernet eth2 address 10.100.34.2/24
set interfaces ethernet eth2 description 'Link to VM3'

set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired

set interfaces loopback lo address 192.168.1.4/32

set protocols babel redistribute ipv4 connected

commit
save

Пример 2: Hub-and-Spoke с резервированием

Сценарий: Центральный роутер (Hub) в Yandex Cloud и 3 удаленных офиса (Spokes) с резервными каналами.

Топология:

        Spoke1 (10.1.0.0/24)
           |  \
           |   \
    Primary \   \ Backup
           |     \
          Hub (10.0.0.1)
           |     /
    Primary /   / Backup
           |   /
           |  /
        Spoke2 (10.2.0.0/24)

Конфигурация Hub:

configure

# Primary каналы к Spoke1 и Spoke2
set interfaces ethernet eth1 address 10.100.11.1/30
set interfaces ethernet eth1 description 'Primary to Spoke1'

set interfaces ethernet eth2 address 10.100.12.1/30
set interfaces ethernet eth2 description 'Primary to Spoke2'

# Backup каналы
set interfaces ethernet eth3 address 10.100.21.1/30
set interfaces ethernet eth3 description 'Backup to Spoke1'

set interfaces ethernet eth4 address 10.100.22.1/30
set interfaces ethernet eth4 description 'Backup to Spoke2'

# Babel на всех интерфейсах
set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired
set protocols babel interface eth3 type wired
set protocols babel interface eth4 type wired

# Повышенная стоимость backup каналов
set protocols babel interface eth3 rxcost 512
set protocols babel interface eth4 rxcost 512

# Локальные сети Hub
set interfaces ethernet eth0 address 10.0.0.1/24

# Перераспределение локальных сетей
set protocols babel redistribute ipv4 connected

commit
save

Конфигурация Spoke1:

configure

# Primary канал к Hub
set interfaces ethernet eth1 address 10.100.11.2/30
set protocols babel interface eth1 type wired

# Backup канал к Hub
set interfaces ethernet eth2 address 10.100.21.2/30
set protocols babel interface eth2 type wired
set protocols babel interface eth2 rxcost 512

# Локальная сеть
set interfaces ethernet eth0 address 10.1.0.1/24

# Перераспределение
set protocols babel redistribute ipv4 connected

commit
save

Пример 3: Dual-stack mesh с IPv6

Сценарий: Mesh-сеть в Yandex Cloud с полной поддержкой IPv4 и IPv6.

Конфигурация узла:

configure

# Интерфейсы с dual-stack
set interfaces ethernet eth1 address 10.100.1.1/24
set interfaces ethernet eth1 address fd00:100:1::1/64

set interfaces ethernet eth2 address 10.100.2.1/24
set interfaces ethernet eth2 address fd00:100:2::1/64

# Loopback dual-stack
set interfaces loopback lo address 192.168.1.1/32
set interfaces loopback lo address fd00:ffff::1/128

# Babel на интерфейсах
set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired

# Перераспределение обоих стеков
set protocols babel redistribute ipv4 connected
set protocols babel redistribute ipv6 connected

# Фильтрация IPv6 ULA только
set policy prefix-list6 BABEL-V6-FILTER rule 10 action permit
set policy prefix-list6 BABEL-V6-FILTER rule 10 prefix fd00::/8

set policy prefix-list6 BABEL-V6-FILTER rule 100 action deny
set policy prefix-list6 BABEL-V6-FILTER rule 100 prefix ::/0 le 128

set protocols babel redistribute ipv6 connected prefix-list BABEL-V6-FILTER

commit
save

Примеры конфигурации для VK Cloud

Пример 1: Overlay mesh-сеть поверх VK Cloud VPC

Сценарий: 3 региона VK Cloud объединены в mesh-сеть через WireGuard туннели с динамической маршрутизацией Babel.

Топология:

Region MSK (wg0: 10.200.1.1/24)
    |                    \
    |                     \
    |                      \
Region SPB              Region KZN
(wg1: 10.200.2.1/24)   (wg2: 10.200.3.1/24)

Конфигурация Region MSK:

configure

# WireGuard туннели (уже настроены)
# wg0 -> Region SPB (10.200.1.1/24)
# wg1 -> Region KZN (10.200.2.1/24)

# Babel на WireGuard интерфейсах
set protocols babel interface wg0 type wired
set protocols babel interface wg0 hello-interval 10
set protocols babel interface wg0 update-interval 40

set protocols babel interface wg1 type wired
set protocols babel interface wg1 hello-interval 10
set protocols babel interface wg1 update-interval 40

# Локальные сети региона MSK
set interfaces ethernet eth0 address 172.16.1.0/24

# Перераспределение локальных сетей
set protocols babel redistribute ipv4 connected

# Фильтр - только внутренние сети
set policy prefix-list VK-INTERNAL rule 10 action permit
set policy prefix-list VK-INTERNAL rule 10 prefix 172.16.0.0/12

set policy prefix-list VK-INTERNAL rule 20 action permit
set policy prefix-list VK-INTERNAL rule 20 prefix 10.200.0.0/16

set policy prefix-list VK-INTERNAL rule 100 action deny
set policy prefix-list VK-INTERNAL rule 100 prefix 0.0.0.0/0 le 32

set protocols babel redistribute ipv4 connected prefix-list VK-INTERNAL

commit
save

Конфигурация Region SPB:

configure

# WireGuard туннели
# wg0 -> Region MSK (10.200.1.2/24)
# wg1 -> Region KZN (10.200.3.1/24)

set protocols babel interface wg0 type wired
set protocols babel interface wg0 hello-interval 10
set protocols babel interface wg0 update-interval 40

set protocols babel interface wg1 type wired
set protocols babel interface wg1 hello-interval 10
set protocols babel interface wg1 update-interval 40

# Локальные сети региона SPB
set interfaces ethernet eth0 address 172.16.2.0/24

set protocols babel redistribute ipv4 connected

# Применение фильтра
set policy prefix-list VK-INTERNAL rule 10 action permit
set policy prefix-list VK-INTERNAL rule 10 prefix 172.16.0.0/12

set policy prefix-list VK-INTERNAL rule 20 action permit
set policy prefix-list VK-INTERNAL rule 20 prefix 10.200.0.0/16

set policy prefix-list VK-INTERNAL rule 100 action deny
set policy prefix-list VK-INTERNAL rule 100 prefix 0.0.0.0/0 le 32

set protocols babel redistribute ipv4 connected prefix-list VK-INTERNAL

commit
save

Пример 2: Babel с RTT-оптимизацией для VK Cloud

Сценарий: Mesh-сеть с автоматическим выбором оптимального маршрута на основе задержки.

configure

# Интерфейсы к соседям
set protocols babel interface eth1 type wired
set protocols babel interface eth2 type wired
set protocols babel interface eth3 type wired

# Включение RTT measurements
set protocols babel interface eth1 enable-timestamps
set protocols babel interface eth1 rtt-min 5
set protocols babel interface eth1 rtt-max 100
set protocols babel interface eth1 rtt-decay 42

set protocols babel interface eth2 enable-timestamps
set protocols babel interface eth2 rtt-min 5
set protocols babel interface eth2 rtt-max 100
set protocols babel interface eth2 rtt-decay 42

set protocols babel interface eth3 enable-timestamps
set protocols babel interface eth3 rtt-min 5
set protocols babel interface eth3 rtt-max 100
set protocols babel interface eth3 rtt-decay 42

# Перераспределение
set protocols babel redistribute ipv4 connected

commit
save

Пример 3: Babel для multi-tenant overlay

Сценарий: Разделение трафика разных клиентов (tenants) в VK Cloud с использованием VRF и Babel.

configure

# VRF для Tenant A
set vrf name TENANT-A table 100
set vrf name TENANT-A description 'Customer A'

# VRF для Tenant B
set vrf name TENANT-B table 200
set vrf name TENANT-B description 'Customer B'

# Интерфейсы для Tenant A
set interfaces ethernet eth1 vrf TENANT-A
set interfaces ethernet eth1 address 10.10.1.1/24

# Интерфейсы для Tenant B
set interfaces ethernet eth2 vrf TENANT-B
set interfaces ethernet eth2 address 10.20.1.1/24

# Babel для Tenant A
set protocols babel vrf TENANT-A interface eth1 type wired
set protocols babel vrf TENANT-A redistribute ipv4 connected

# Babel для Tenant B
set protocols babel vrf TENANT-B interface eth2 type wired
set protocols babel vrf TENANT-B redistribute ipv4 connected

commit
save

Примечание: Поддержка VRF в Babel зависит от версии VyOS. В старых версиях может потребоваться отдельный экземпляр babeld для каждого VRF.

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

Просмотр общей информации о Babel

# Общий статус протокола Babel
show babel summary

# Вывод:
# Babel instance running
# Interfaces: 3 active
# Routes: 12 total (8 installed)
# Neighbors: 4

Просмотр соседей (neighbors)

# Все соседи Babel
show babel neighbors

# Вывод:
# Interface  Address               Reach  RXcost  TXcost
# eth1       10.100.1.2            FFFF   96      96
# eth2       10.100.2.2            FFFF   96      96
# wg0        10.200.1.2            FF7F   256     96

Значения:

  • Reach: Bitmap достижимости (16 последних hello), FFFF = все получены
  • RXcost: Стоимость приема от соседа
  • TXcost: Стоимость передачи к соседу (вычисленная соседом)

Просмотр маршрутов

# Все маршруты Babel
show babel routes

# Вывод:
# Prefix                via             Interface  Metric  Installed
# 10.0.0.0/24          -               eth0       0       yes
# 10.1.0.0/24          10.100.1.2      eth1       96      yes
# 10.2.0.0/24          10.100.2.2      eth2       192     yes
# 192.168.1.2/32       10.100.1.2      eth1       96      yes
# 192.168.1.3/32       10.100.2.2      eth2       192     yes

# Маршруты с IPv6
show babel routes ipv6

# Маршруты только установленные в kernel
show babel routes installed

Просмотр информации об интерфейсах

# Интерфейсы Babel
show babel interfaces

# Вывод:
# Interface  Type    Hello  Update  Neighbors
# eth1       wired   4      16      2
# eth2       wired   4      16      1
# wg0        wired   10     40      1

# Детальная информация об интерфейсе
show babel interface eth1

# Вывод:
# Interface: eth1
# Type: wired
# Hello interval: 4
# Update interval: 16
# RXcost: 96
# Split-horizon: enabled
# Neighbors: 2
# Timestamps: enabled
# RTT min: 10 ms
# RTT max: 120 ms

Просмотр статистики

# Статистика протокола
show babel statistics

# Вывод может включать:
# - Количество отправленных/полученных сообщений каждого типа
# - Счетчики обновлений маршрутов
# - Ошибки и предупреждения

Просмотр конфигурации

# Конфигурация Babel
show configuration protocols babel

# Вывод текущей конфигурации:
# protocols {
#     babel {
#         interface eth1 {
#             type wired
#         }
#         interface eth2 {
#             type wired
#         }
#         redistribute {
#             ipv4 {
#                 connected {
#                 }
#             }
#         }
#     }
# }

Мониторинг в реальном времени

# Мониторинг логов Babel
monitor protocol babel

# Или через journalctl (в режиме operational)
monitor log babel

Просмотр kernel routing table

# Проверка установки маршрутов в kernel
show ip route babel

# Вывод:
# B>* 10.1.0.0/24 [100/96] via 10.100.1.2, eth1, weight 1, 00:05:23
# B>* 10.2.0.0/24 [100/192] via 10.100.2.2, eth2, weight 1, 00:05:23
# B>* 192.168.1.2/32 [100/96] via 10.100.1.2, eth1, weight 1, 00:05:23

# B = Babel, > = selected route, * = active route
# [AD/Metric] - Administrative Distance / Babel metric

Диагностика и устранение неполадок

Проблема: Соседи не устанавливаются

Симптомы:

show babel neighbors
# Вывод пустой или неполный

Проверки:

  1. Проверить включен ли Babel на интерфейсе:
show configuration protocols babel
  1. Проверить IP connectivity:
ping <neighbor-ip>
  1. Проверить мультикаст (Babel использует UDP port 6696 и multicast):
# IPv4 multicast: 224.0.0.1
# IPv6 multicast: ff02::1:6

# Проверить firewall
show firewall

# Разрешить Babel в firewall
configure
set firewall name WAN_LOCAL rule 100 action accept
set firewall name WAN_LOCAL rule 100 protocol udp
set firewall name WAN_LOCAL rule 100 destination port 6696
commit
  1. Проверить network namespace (для VRF):
# Если используется VRF, убедиться что интерфейсы в правильном VRF
show vrf

Проблема: Маршруты не устанавливаются

Симптомы:

show babel routes
# Маршруты видны, но не установлены (Installed = no)

Проверки:

  1. Проверить наличие конфликтов с другими протоколами:
show ip route <prefix>

# Если есть маршрут с меньшим AD (Administrative Distance):
# - Connected: AD 0
# - Static: AD 1
# - OSPF: AD 110
# - Babel: AD 100 (по умолчанию в FRR)
  1. Проверить feasibility condition - маршрут может быть отклонен из-за loop prevention:
# Проверить sequence number и метрику
show babel routes detail
  1. Проверить фильтры:
show configuration protocols babel
# Проверить наличие import-filter, которые могут блокировать маршруты

Проблема: Высокая метрика маршрутов

Симптомы:

show babel routes
# Metric очень высокая (например, >1000)

Причины и решения:

  1. ETX метрика на беспроводном интерфейсе:
# Проверить тип интерфейса
show babel interface <name>

# Если используется wireless, но канал проводной:
configure
set protocols babel interface <name> type wired
commit
  1. Высокий rxcost:
# Проверить rxcost
show babel interface <name>

# Если установлен вручную, сбросить:
configure
delete protocols babel interface <name> rxcost
commit
  1. RTT влияние:
# Проверить RTT parameters
show babel interface <name>

# Уменьшить влияние RTT:
configure
set protocols babel interface <name> rtt-max 50
commit

Проблема: Петли маршрутизации

Симптомы:

traceroute <destination>
# Маршрут зацикливается

Действия:

  1. Babel должен предотвращать петли автоматически. Проверить версию:
show version

# Обновить VyOS/FRR если версия старая
  1. Проверить split-horizon:
show configuration protocols babel interface <name>

# Включить split-horizon если отключен:
configure
set protocols babel interface <name> split-horizon enable
commit
  1. Временное решение - запретить анонсы определенных маршрутов:
configure
set protocols babel interface <name> export-filter prefix-list LOOP-FIX
commit

Проблема: Медленная сходимость

Симптомы:

  • Долгое время переключения на резервный маршрут при отказе
  • Долгое обнаружение изменений топологии

Решения:

  1. Уменьшить hello interval (с осторожностью):
configure
# По умолчанию: 4 секунды
set protocols babel interface eth1 hello-interval 2

# Пропорционально уменьшить update interval
set protocols babel interface eth1 update-interval 8
commit

Предупреждение: Слишком малые интервалы увеличивают нагрузку и трафик протокола.

  1. Включить BFD (Bidirectional Forwarding Detection) если поддерживается:
# BFD обнаруживает отказы каналов быстрее
configure
set protocols bfd peer <neighbor-ip> interval receive 300
set protocols bfd peer <neighbor-ip> interval transmit 300
set protocols bfd peer <neighbor-ip> multihop
commit

Проблема: Высокая загрузка CPU/memory

Симптомы:

show system resources
# High CPU usage by babeld process

Решения:

  1. Увеличить интервалы:
configure
set protocols babel interface eth1 hello-interval 10
set protocols babel interface eth1 update-interval 40
commit
  1. Уменьшить количество перераспределяемых маршрутов:
# Использовать агрегацию или фильтрацию
configure
set protocols babel redistribute ipv4 connected prefix-list AGGREGATE-ONLY
commit
  1. Оптимизировать diversity routing:
# Отключить если не используется
configure
delete protocols babel diversity
commit

Отладка

Включение debug логов

# В operational mode
debug babel events
debug babel packets
debug babel route

# Просмотр debug вывода
show log babel

# Отключение debug
no debug babel events
no debug babel packets
no debug babel route

Анализ пакетов

# Захват Babel пакетов на интерфейсе
monitor traffic interface eth1 filter "udp port 6696"

# Или с tcpdump
sudo tcpdump -i eth1 -vvv udp port 6696

Логирование в файл

configure

# Направить логи Babel в отдельный файл
set system syslog file babel facility local7 level debug
set system syslog file babel archive size 10

commit
save

Просмотр:

show log file babel

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

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

  1. Топология:

    • Предпочитать mesh или partial mesh для отказоустойчивости
    • Для hub-and-spoke использовать разные rxcost для primary/backup каналов
    • Избегать топологий с единственной точкой отказа
  2. Масштабируемость:

    • Babel эффективен для сетей до 50-100 узлов
    • Для больших сетей рассмотреть BGP с route reflectors
    • Использовать агрегацию маршрутов где возможно
  3. Безопасность:

    • Babel не имеет встроенной аутентификации
    • Использовать firewall для ограничения приема Babel пакетов только от доверенных соседей
    • В overlay сетях использовать шифрование туннелей (WireGuard, IPsec)

Настройка параметров

  1. Интервалы:

    • Проводные стабильные сети: hello 4s, update 16s (по умолчанию)
    • Беспроводные нестабильные сети: hello 2s, update 8s
    • WAN каналы с высокой задержкой: hello 10s, update 40s
  2. Типы интерфейсов:

    • Всегда явно указывать тип (wired/wireless)
    • Не использовать auto в production
  3. RTT optimization:

    • Включать только если есть альтернативные пути с разной задержкой
    • Установить rtt-min близкой к минимальному RTT в сети
    • rtt-max влияет на максимальное изменение метрики

Перераспределение маршрутов

  1. Фильтрация:

    • ВСЕГДА использовать prefix-list для контроля анонсируемых префиксов
    • Запрещать default route (0.0.0.0/0) если не требуется явно
    • Фильтровать приватные диапазоны на границах
  2. Агрегация:

    • Анонсировать агрегированные префиксы вместо /32 или /128
    • Использовать static aggregate routes
  3. Селективное перераспределение:

    • Не перераспределять все подряд (kernel, connected, static одновременно)
    • Выбрать минимально необходимый набор источников

Мониторинг и обслуживание

  1. Регулярные проверки:
# Еженедельно проверять:
show babel summary
show babel neighbors
show babel routes

# Проверять метрики маршрутов на аномалии
  1. Логирование:

    • Централизованный syslog для корреляции событий
    • Алерты на потерю соседей
    • Мониторинг изменений количества маршрутов
  2. Резервное копирование:

# Регулярно сохранять конфигурацию
save
show configuration protocols babel > /tmp/babel-backup.conf

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

  1. Babel + OSPF:

    • OSPF для core сети, Babel для edge/mesh
    • Перераспределять маршруты с осторожностью (риск петель)
    • Использовать route-maps для контроля
  2. Babel + BGP:

    • BGP для WAN, Babel для site-local
    • Не анонсировать Babel маршруты в BGP без агрегации
    • Использовать BGP communities для маркировки источника
  3. Babel + Static:

    • Static routes как fallback
    • Установить высокий AD для Babel если static должен быть предпочтителен

Обновление и миграция

  1. Добавление нового узла:
# На новом узле:
configure
set protocols babel interface <intf> type wired
set protocols babel redistribute ipv4 connected
commit

# Проверить появление соседей:
show babel neighbors

# Проверить получение маршрутов:
show babel routes
  1. Вывод узла из эксплуатации:
# Graceful shutdown - удалить перераспределение:
configure
delete protocols babel redistribute
commit

# Подождать пока соседи удалят маршруты (update interval × 3)
# Затем отключить интерфейсы:
delete protocols babel interface <intf>
commit
  1. Обновление параметров:
    • Изменения применяются немедленно
    • Изменение типа интерфейса может вызвать переключение маршрутов
    • Изменение hello/update interval влияет на скорость сходимости

Ограничения и особенности

Ограничения протокола

  1. Масштабируемость:

    • Оптимален для 50-100 узлов
    • Для больших сетей требуется иерархическая архитектура
  2. Безопасность:

    • Нет встроенной аутентификации
    • Нет шифрования (требуется на уровне туннелей)
    • Уязвим к DoS если нет firewall фильтрации
  3. Транспорт:

    • UDP port 6696
    • Использует multicast (может не работать в некоторых overlay сетях)
    • Требует двусторонней связности

Особенности реализации в VyOS

  1. FRR babeld:

    • VyOS использует FRR routing suite
    • Поддержка версии зависит от версии FRR
    • Некоторые опции могут отличаться от standalone babeld
  2. VRF support:

    • Поддержка VRF зависит от версии VyOS
    • Может требовать отдельного экземпляра на VRF
  3. IPv6:

    • Полная поддержка dual-stack
    • Link-local адреса используются для обмена сообщениями
    • Требуется IPv6 на интерфейсе даже для IPv4-only маршрутизации в некоторых версиях

Отличия от других протоколов

Babel vs OSPF:

  • Babel: Проще настройка, лучше для mesh, поддержка wireless метрик
  • OSPF: Более зрелый, лучше масштабируемость, широкая поддержка

Babel vs BGP:

  • Babel: Автоматическое обнаружение соседей, проще для небольших сетей
  • BGP: Масштабируемость, policy control, стандарт для Internet

Babel vs RIP:

  • Babel: Быстрая сходимость, loop-free, современные метрики
  • RIP: Устаревший, медленная сходимость, ограничение 15 hop

Babel vs EIGRP:

  • Babel: Open standard, проще
  • EIGRP: Проприетарный (Cisco), более сложные метрики, DUAL алгоритм

Справочная информация

RFC и документация

Параметры по умолчанию

ПараметрЗначениеОписание
Hello interval4 секундыИнтервал отправки hello-сообщений
Update interval16 секундИнтервал отправки update-сообщений
Hold time14 секунд (3.5 × hello)Время удержания соседа без hello
Wired cost96Базовая стоимость для проводных каналов
Wireless cost256Базовая стоимость для беспроводных каналов
UDP port6696Порт для Babel протокола
IPv4 multicast224.0.0.1Multicast группа для IPv4
IPv6 multicastff02::1:6Multicast группа для IPv6
Administrative Distance100AD в FRR routing table

Команды конфигурации (краткий справочник)

# Включение Babel на интерфейсе
set protocols babel interface <name>
set protocols babel interface <name> type [auto|wired|wireless]

# Параметры интерфейса
set protocols babel interface <name> hello-interval <seconds>
set protocols babel interface <name> update-interval <seconds>
set protocols babel interface <name> rxcost <cost>
set protocols babel interface <name> split-horizon [enable|disable]

# RTT параметры
set protocols babel interface <name> enable-timestamps
set protocols babel interface <name> rtt-min <ms>
set protocols babel interface <name> rtt-max <ms>
set protocols babel interface <name> rtt-decay <seconds>

# Diversity routing
set protocols babel diversity
set protocols babel diversity-factor <1-256>
set protocols babel interface <name> channel <number>

# Перераспределение
set protocols babel redistribute [ipv4|ipv6] [connected|static|ospf|bgp|rip|isis|eigrp|kernel]

# Фильтрация
set protocols babel interface <name> import-filter [access-list|prefix-list] <name>
set protocols babel interface <name> export-filter [access-list|prefix-list] <name>

Команды просмотра (краткий справочник)

# Статус и информация
show babel summary
show babel neighbors
show babel routes
show babel routes ipv6
show babel routes installed
show babel interfaces
show babel interface <name>

# Конфигурация
show configuration protocols babel

# Маршруты в kernel
show ip route babel
show ipv6 route babel

# Мониторинг
monitor protocol babel
monitor log babel

Заключение

Babel - это современный и эффективный протокол маршрутизации для mesh-сетей, который предлагает простоту настройки в сочетании с надежностью и производительностью. Его поддержка dual-stack IPv4/IPv6, адаптивные метрики и гарантированное отсутствие петель делают его отличным выбором для:

  • Mesh-сетей в облачных провайдерах (Yandex Cloud, VK Cloud)
  • Overlay-сетей поверх VPN туннелей (WireGuard, IPsec)
  • Гибридных проводных/беспроводных сетей
  • Отказоустойчивых топологий с множественными путями

При правильной конфигурации и следовании best practices, Babel обеспечивает стабильную и предсказуемую маршрутизацию даже в динамически изменяющихся средах.

Дальнейшие шаги

  1. Изучить другие протоколы маршрутизации VyOS для сравнения
  2. Протестировать Babel в лабораторной среде перед production развертыванием
  3. Настроить мониторинг и алертинг для Babel метрик
  4. Документировать специфичные для вашей инфраструктуры настройки
  5. Регулярно обновлять VyOS для получения последних улучшений Babel

Версия документа: 1.0 Дата создания: 2025-01-15 Применимо к: VyOS 1.3+, VyOS 1.4 (Sagitta), VyOS 1.5 (Circinus) Автор: OpenNix Documentation Team

Проверено OpenNix LLC · Обновлено