Config Sync

Config Sync - сервис автоматической синхронизации конфигурации между двумя маршрутизаторами VyOS.

Обзор

Config Sync обеспечивает автоматическую репликацию изменений конфигурации с основного (primary) маршрутизатора на резервный (secondary).

Основные возможности:

  • Односторонняя синхронизация (primary → secondary)
  • Выборочная синхронизация разделов конфигурации
  • Автоматическая отправка изменений после commit
  • Два режима синхронизации: load и set
  • Поддержка всех основных разделов конфигурации

Требования:

  • VyOS REST API настроен на вторичном маршрутизаторе
  • Оба маршрутизатора должны быть online
  • Одинаковая версия VyOS на обоих устройствах
  • Сетевая связность между маршрутизаторами

Протокол: HTTPS/HTTP (VyOS REST API)

Порт: 443 (HTTPS) или настраиваемый

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

Архитектура

┌──────────────────┐                    ┌──────────────────┐
│   Primary VyOS   │                    │  Secondary VyOS  │
│                  │                    │                  │
│  Config Sync     │──── HTTPS API ────>│   REST API       │
│  Client          │                    │   Server         │
│                  │                    │                  │
└──────────────────┘                    └──────────────────┘
     (master)                               (replica)

Процесс синхронизации

  1. Администратор вносит изменения на primary роутере
  2. Выполняется commit на primary
  3. Config Sync перехватывает изменения
  4. Изменения отправляются на secondary через REST API
  5. Secondary применяет конфигурацию
  6. Результат логируется на primary

Направление синхронизации

Важно: Синхронизация односторонняя:

  • Primary → Secondary: Да
  • Secondary → Primary: Нет

Изменения на secondary НЕ синхронизируются обратно и будут перезаписаны при следующей синхронизации с primary.

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

Подготовка Secondary роутера

Первым шагом настройте REST API на вторичном роутере:

VyOS 1.4 (Sagitta)

configure
set service https api keys id config-sync key 'your-secure-api-key-here'
commit
save

VyOS 1.5 (Circinus)

configure
set service https api keys id config-sync key 'your-secure-api-key-here'
set service https api rest
commit
save

Примечание: В VyOS 1.5 необходимо явно включить REST API endpoint.

Настройка Primary роутера

Настройте Config Sync на основном роутере:

configure

# Укажите адрес вторичного роутера
set service config-sync secondary address '192.168.100.2'

# API ключ (должен совпадать с ключом на secondary)
set service config-sync secondary key 'your-secure-api-key-here'

# Разделы для синхронизации
set service config-sync section firewall
set service config-sync section nat
set service config-sync section vpn

commit
save

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

Secondary роутер

address

IP-адрес или hostname вторичного роутера:

set service config-sync secondary address '192.168.100.2'
set service config-sync secondary address 'vyos-backup.example.com'
set service config-sync secondary address '2001:db8::2'

key

API ключ для аутентификации:

set service config-sync secondary key 'your-secure-api-key-here'

Генерация безопасного ключа:

openssl rand -base64 32

port

TCP порт REST API (по умолчанию 443):

set service config-sync secondary port 443
set service config-sync secondary port 8443

timeout

Таймаут соединения в секундах (по умолчанию 60):

set service config-sync secondary timeout 60
set service config-sync secondary timeout 120

Увеличьте для медленных каналов или больших конфигураций.

Section - разделы для синхронизации

Выберите разделы конфигурации для репликации:

set service config-sync section <section-name>

Доступные разделы:

РазделОписание
firewallПравила firewall, зоны, группы
interfacesКонфигурация интерфейсов
natNAT правила (source, destination)
nat66NAT66 (IPv6-to-IPv6)
pkiPKI сертификаты и ключи
protocolsДинамическая маршрутизация (BGP, OSPF, RIP)
qosQuality of Service политики
serviceСервисы (DHCP, DNS, SSH, etc.)
systemСистемные настройки (hostname, users, etc.)
vpnVPN конфигурация (IPsec, OpenVPN, L2TP)
vrfVirtual Routing and Forwarding

Примеры:

Синхронизация всех сетевых сервисов:

set service config-sync section firewall
set service config-sync section nat
set service config-sync section interfaces
set service config-sync section vpn

Только routing и services:

set service config-sync section protocols
set service config-sync section service

Mode - режим синхронизации

load (по умолчанию)

Заменяет конфигурацию разделов на secondary:

set service config-sync mode load

Поведение:

  • Удаляет существующую конфигурацию раздела на secondary
  • Загружает новую конфигурацию с primary
  • Рекомендуется для полной синхронизации

Пример:

# Primary имеет:
firewall rule 10, 20, 30

# Secondary будет иметь точно то же:
firewall rule 10, 20, 30

# Любые другие правила на secondary будут удалены

set

Добавляет/обновляет конфигурацию на secondary:

set service config-sync mode set

Поведение:

  • Не удаляет существующую конфигурацию
  • Добавляет новые параметры
  • Обновляет существующие параметры
  • Может привести к несоответствию конфигураций

Пример:

# Primary имеет:
firewall rule 10, 20

# Secondary имеет:
firewall rule 30, 40

# После синхронизации secondary будет иметь:
firewall rule 10, 20, 30, 40

Рекомендация: Используйте load для гарантированной идентичности конфигураций.

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

Базовый HA роутер

Primary роутер:

configure

# Secondary роутер
set service config-sync secondary address '192.168.100.2'
set service config-sync secondary key 'MySecureKey123!@#'

# Синхронизация критичных разделов
set service config-sync section firewall
set service config-sync section nat
set service config-sync section system

# Режим полной замены
set service config-sync mode load

commit
save

Secondary роутер:

configure

# Включить REST API
set service https api keys id config-sync key 'MySecureKey123!@#'
set service https api rest

commit
save

HA VPN шлюз

Primary:

configure

# Secondary роутер
set service config-sync secondary address '10.0.0.2'
set service config-sync secondary key 'VpnGatewaySync2024'
set service config-sync secondary timeout 120

# VPN и связанные разделы
set service config-sync section vpn
set service config-sync section firewall
set service config-sync section nat
set service config-sync section pki

# Режим замены
set service config-sync mode load

commit
save

Синхронизация OSPF конфигурации

Primary:

configure

# Secondary роутер
set service config-sync secondary address '192.168.1.2'
set service config-sync secondary key 'OspfSyncKey'

# Только протоколы маршрутизации и system
set service config-sync section protocols
set service config-sync section system

commit
save

Multi-site с VRF

Primary:

configure

# Secondary роутер
set service config-sync secondary address '10.10.10.2'
set service config-sync secondary key 'VrfMultiSite2024'

# VRF, routing и сервисы
set service config-sync section vrf
set service config-sync section protocols
set service config-sync section interfaces
set service config-sync section service

commit
save

Полная синхронизация всех разделов

Primary:

configure

set service config-sync secondary address '192.168.100.2'
set service config-sync secondary key 'FullSyncKey2024'

# Все поддерживаемые разделы
set service config-sync section firewall
set service config-sync section interfaces
set service config-sync section nat
set service config-sync section nat66
set service config-sync section pki
set service config-sync section protocols
set service config-sync section qos
set service config-sync section service
set service config-sync section system
set service config-sync section vpn
set service config-sync section vrf

set service config-sync mode load

commit
save

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

Yandex Cloud HA конфигурация

Топология:

  • Primary VyOS: 192.168.10.10 (внутренний IP)
  • Secondary VyOS: 192.168.10.20 (внутренний IP)
  • Обе VM в одной подсети Yandex Cloud
  • Security Group разрешает HTTPS между VM

Secondary роутер (192.168.10.20):

configure

# Настройка REST API
set service https api keys id yc-config-sync key 'YC-Secure-Key-2024-Random-String'
set service https api rest

# Разрешить HTTPS из внутренней сети
set service https listen-address 192.168.10.20

# HTTPS сертификат (self-signed для internal)
set service https certificates system-generated-certificate

commit
save

Primary роутер (192.168.10.10):

configure

# Подключение к secondary
set service config-sync secondary address '192.168.10.20'
set service config-sync secondary key 'YC-Secure-Key-2024-Random-String'
set service config-sync secondary port 443
set service config-sync secondary timeout 90

# Разделы для синхронизации
set service config-sync section firewall
set service config-sync section nat
set service config-sync section interfaces
set service config-sync section system

# Режим полной замены
set service config-sync mode load

commit
save

Примечание для Yandex Cloud:

  • Используйте внутренние IP адреса для синхронизации
  • Настройте Security Groups для разрешения HTTPS (TCP 443)
  • Рассмотрите использование Network Load Balancer для failover

VK Cloud (Mail.ru Cloud) HA конфигурация

Топология:

  • Primary VyOS: 10.0.10.10 (приватный IP)
  • Secondary VyOS: 10.0.10.20 (приватный IP)
  • Floating IP для failover
  • Security Group с правилом HTTPS

Secondary роутер (10.0.10.20):

configure

# REST API конфигурация
set service https api keys id vkcloud-sync key 'VKCloud-HA-Key-SecureRandom123'
set service https api rest

# Слушать на приватном интерфейсе
set service https listen-address 10.0.10.20

# Self-signed сертификат
set service https certificates system-generated-certificate

commit
save

Primary роутер (10.0.10.10):

configure

# Secondary endpoint
set service config-sync secondary address '10.0.10.20'
set service config-sync secondary key 'VKCloud-HA-Key-SecureRandom123'
set service config-sync secondary port 443
set service config-sync secondary timeout 120

# Критичные разделы
set service config-sync section firewall
set service config-sync section nat
set service config-sync section vpn
set service config-sync section service

set service config-sync mode load

commit
save

Настройка Security Group в VK Cloud:

# Разрешить HTTPS между HA парой
Направление: Ingress
Протокол: TCP
Порт: 443
Источник: 10.0.10.10/32

AWS HA с разными AZ

Топология:

  • Primary: us-east-1a (10.0.1.10)
  • Secondary: us-east-1b (10.0.2.20)
  • Разные Availability Zones для отказоустойчивости

Secondary (10.0.2.20):

configure

set service https api keys id aws-ha key 'AWS-HA-Sync-Key-Random'
set service https api rest
set service https listen-address 10.0.2.20
set service https certificates system-generated-certificate

commit
save

Primary (10.0.1.10):

configure

set service config-sync secondary address '10.0.2.20'
set service config-sync secondary key 'AWS-HA-Sync-Key-Random'
set service config-sync secondary timeout 150

# Полная синхронизация для DR
set service config-sync section firewall
set service config-sync section nat
set service config-sync section interfaces
set service config-sync section protocols
set service config-sync section service
set service config-sync section system
set service config-sync section vpn

set service config-sync mode load

commit
save

Azure HA с Availability Set

Топология:

  • Primary: 172.16.1.10 (zone 1)
  • Secondary: 172.16.1.20 (zone 2)
  • Azure Load Balancer для failover

Secondary (172.16.1.20):

configure

set service https api keys id azure-ha key 'Azure-ConfigSync-2024-SecureKey'
set service https api rest
set service https listen-address 172.16.1.20

commit
save

Primary (172.16.1.10):

configure

set service config-sync secondary address '172.16.1.20'
set service config-sync secondary key 'Azure-ConfigSync-2024-SecureKey'
set service config-sync secondary port 443

set service config-sync section firewall
set service config-sync section nat
set service config-sync section vpn
set service config-sync section protocols

set service config-sync mode load

commit
save

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

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

Показать текущую конфигурацию Config Sync:

show service config-sync

Вывод:

 config-sync {
     mode load
     secondary {
         address 192.168.100.2
         key ****************
         port 443
         timeout 60
     }
     section firewall
     section nat
     section vpn
 }

Ручная синхронизация

Config Sync автоматически срабатывает после commit. Для ручного запуска:

reset config-sync

Это пересинхронизирует все настроенные разделы.

Проверка статуса

Проверка последней синхронизации:

show log | match config-sync

Успешная синхронизация:

Oct 15 10:30:15 vyos-primary config-sync[1234]: Successfully synced section 'firewall' to 192.168.100.2
Oct 15 10:30:16 vyos-primary config-sync[1234]: Successfully synced section 'nat' to 192.168.100.2

Ошибка синхронизации:

Oct 15 10:30:15 vyos-primary config-sync[1234]: Failed to sync to 192.168.100.2: Connection timeout

Мониторинг логов

Реал-тайм мониторинг:

monitor log | match config-sync

Или через журнал системы:

show log tail 50 | match config-sync

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

Синхронизация не работает

Симптомы: Изменения на primary не появляются на secondary.

Проверка 1 - REST API на secondary:

show service https

Должен быть запущен и иметь API ключ.

Проверка 2 - Сетевая связность:

ping 192.168.100.2

Проверка 3 - HTTPS доступность:

curl -k https://192.168.100.2/

Должен вернуть ответ от VyOS API.

Проверка 4 - Проверьте логи:

show log | match config-sync

Решение:

# На secondary проверьте API
show service https api

# Перезапустите HTTPS сервис если нужно
restart https

# На primary проверьте конфигурацию
show service config-sync

# Попробуйте ручную синхронизацию
reset config-sync

Ошибка аутентификации

Симптомы: Authentication failed в логах.

Причина: API ключи не совпадают.

Решение:

На secondary:

show service https api keys

На primary:

show service config-sync secondary key

Обновите ключ на primary если они различаются:

set service config-sync secondary key 'correct-key-from-secondary'
commit

Timeout ошибки

Симптомы: Connection timeout в логах.

Причины:

  • Медленная сеть
  • Большая конфигурация
  • Secondary перегружен

Решение:

Увеличьте timeout:

set service config-sync secondary timeout 180
commit

Проверьте нагрузку на secondary:

# На secondary
show system cpu
show system memory

Частичная синхронизация

Симптомы: Некоторые разделы синхронизируются, другие нет.

Проверка:

show log | match "config-sync.*Failed"

Возможные причины:

  • Несовместимость версий VyOS
  • Синтаксические ошибки в конфигурации
  • Недостаточные права API ключа

Решение:

Проверьте версии:

# На обоих роутерах
show version

Проверьте валидность конфигурации:

show configuration commands | grep <section>

Secondary роутер offline

Симптомы: Connection refused или No route to host.

Проверка:

ping 192.168.100.2
show log | match config-sync

Поведение: Config Sync будет продолжать попытки при следующем commit.

Решение:

  • Восстановите сетевую связность
  • Проверьте firewall между роутерами
  • После восстановления выполните reset config-sync

Конфликты конфигурации

Симптомы: После синхронизации secondary имеет ошибки или неожиданное поведение.

Причина: Режим set может создавать конфликты.

Решение:

Переключитесь на режим load:

set service config-sync mode load
commit

Очистите конфигурацию раздела на secondary вручную если нужно:

# На secondary
delete firewall
commit

# Config Sync загрузит свежую конфигурацию при следующем commit на primary

Несовпадение версий VyOS

Симптомы: Синхронизация работает, но secondary показывает ошибки.

Проверка:

# На обоих роутерах
show version | grep Version

Решение: Обновите оба роутера до одинаковой версии VyOS.

Безопасность

Защита API ключа

Генерация сильного ключа:

openssl rand -base64 32

Пример вывода:

3Km8WxT7qN9vB2hL5pY6sF1dC4eR8tU3jH7gN2mK9xP=

Не используйте слабые ключи:

  • Словарные слова
  • Простые паттерны (123456, password)
  • Короткие ключи (< 20 символов)

Firewall правила

Ограничьте доступ к REST API только с primary роутера:

На secondary роутере:

# Разрешить HTTPS только с primary
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination port 443
set firewall ipv4 input filter rule 100 protocol tcp
set firewall ipv4 input filter rule 100 source address 192.168.100.1

# Запретить все остальные HTTPS подключения
set firewall ipv4 input filter rule 110 action drop
set firewall ipv4 input filter rule 110 destination port 443
set firewall ipv4 input filter rule 110 protocol tcp

commit

HTTPS сертификаты

Self-signed сертификаты (internal networks):

set service https certificates system-generated-certificate
commit

Собственные сертификаты:

# Сначала импортируйте сертификат через PKI
set pki certificate vyos-cert certificate 'MII...'
set pki certificate vyos-cert private key 'MII...'

# Используйте в HTTPS
set service https certificates certificate vyos-cert
commit

Ограничение listen-address

Слушайте только на internal интерфейсе:

set service https listen-address 192.168.100.2
set service https listen-address 10.0.0.2
commit

Не используйте:

# Опасно - слушает на всех интерфейсах
set service https listen-address 0.0.0.0

Audit logging

Включите логирование всех API операций:

set system syslog global facility all level info
set system syslog host 192.168.1.100 facility all level info
commit

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

Планирование

  1. Выберите правильные разделы: Синхронизируйте только то, что должно быть идентичным
  2. Тестируйте на staging: Проверьте Config Sync в тестовой среде перед production
  3. Документируйте архитектуру: Четко укажите какой роутер primary, какой secondary

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

  1. Используйте режим load: Гарантирует идентичность конфигураций
  2. Не синхронизируйте interfaces слепо: Интерфейсы могут иметь разные IP адреса
  3. Генерируйте сильные API ключи: Минимум 32 символа случайных данных
  4. Настройте адекватный timeout: Учитывайте размер конфигурации и скорость сети

Операции

  1. Мониторьте логи: Регулярно проверяйте успешность синхронизации
  2. Тестируйте failover: Периодически проверяйте работоспособность secondary
  3. Делайте резервные копии: Config Sync не заменяет backup
  4. Версионный контроль: Храните историю конфигураций в git

Безопасность

  1. Ограничьте firewall: Только primary должен иметь доступ к API secondary
  2. Используйте internal сети: Не синхронизируйте через публичный интернет без VPN
  3. Регулярно меняйте ключи: Ротация API ключей каждые 90 дней
  4. Логируйте все операции: Centralized logging для audit trail

Отказоустойчивость

  1. Тестируйте failover сценарии: Primary падает, переключение на secondary
  2. Документируйте процедуры восстановления: Как вернуть primary в строй
  3. Синхронизация после восстановления: Как восстановить sync после downtime
  4. Мониторинг обоих роутеров: Alerting на проблемы синхронизации

Ограничения

  1. Односторонняя синхронизация: Только primary → secondary
  2. Требуется online secondary: Оба роутера должны быть доступны
  3. Одинаковая версия VyOS: Несовместимость версий может вызвать ошибки
  4. Нет конфликт-резолюции: Изменения на secondary перезаписываются
  5. Один secondary: Нельзя синхронизировать с несколькими secondary одновременно
  6. Синхронные операции: Commit блокируется до завершения синхронизации

Альтернативные подходы

Для множественной репликации

Если нужно синхронизировать более 2 роутеров:

  1. Configuration Management: Ansible, SaltStack, Puppet
  2. Git-based: Храните конфигурации в git, применяйте через CI/CD
  3. Scripted sync: Кастомные скрипты через VyOS API

Для bidirectional sync

Config Sync не поддерживает двустороннюю синхронизацию. Варианты:

  1. Два Config Sync: Настройте взаимную синхронизацию (осторожно с петлями!)
  2. External orchestration: Ansible с централизованным state
  3. Manual coordination: Выберите один роутер как source of truth

Интеграция с HA

Config Sync отлично работает с VyOS HA (VRRP):

Primary (VRRP Master):

configure

# VRRP
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24

# Config Sync
set service config-sync secondary address '192.168.100.2'
set service config-sync secondary key 'HA-Sync-Key'
set service config-sync section firewall
set service config-sync section nat
set service config-sync section service

commit
save

Secondary (VRRP Backup):

configure

# VRRP (те же настройки)
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24

# REST API для Config Sync
set service https api keys id config-sync key 'HA-Sync-Key'
set service https api rest

commit
save

Результат:

  • VRRP обеспечивает IP failover
  • Config Sync гарантирует идентичную конфигурацию
  • При падении primary, secondary готов к работе

Мониторинг

Prometheus метрики

Если используете VyOS Prometheus exporter:

# Метрики для мониторинга
- vyos_config_sync_last_success_timestamp
- vyos_config_sync_failures_total
- vyos_config_sync_duration_seconds

Zabbix monitoring

Скрипт для проверки синхронизации:

#!/bin/bash
# check_config_sync.sh

LAST_SYNC=$(grep "Successfully synced" /var/log/messages | tail -1)
SYNC_TIME=$(echo "$LAST_SYNC" | awk '{print $1, $2, $3}')

# Проверить что синхронизация была за последний час
if [ -z "$SYNC_TIME" ]; then
    echo "CRITICAL: No config sync found"
    exit 2
fi

# Вернуть OK
echo "OK: Last sync at $SYNC_TIME"
exit 0

Syslog

Отправка логов Config Sync на централизованный syslog:

set system syslog host 192.168.1.100 facility all level info
set system syslog host 192.168.1.100 port 514
commit

Примеры сценариев

Первоначальная настройка новой HA пары

Шаг 1 - Настройте secondary:

configure
set service https api keys id ha-sync key 'GeneratedSecureKey123'
set service https api rest
set service https listen-address 192.168.100.2
commit
save

Шаг 2 - Настройте primary:

configure
set service config-sync secondary address '192.168.100.2'
set service config-sync secondary key 'GeneratedSecureKey123'
set service config-sync section firewall
set service config-sync section nat
set service config-sync section vpn
commit
save

Шаг 3 - Проверьте:

show log | match config-sync

Шаг 4 - Тест изменения:

configure
set firewall ipv4 input filter rule 999 action accept
set firewall ipv4 input filter rule 999 description "Test sync"
commit

Шаг 5 - Проверьте на secondary:

show firewall ipv4 input filter rule 999

Восстановление после сбоя

Сценарий: Primary был offline, изменения делались на secondary.

Шаг 1 - Определите source of truth:

  • Если secondary конфигурация правильная, сделайте его новым primary
  • Если primary конфигурация правильная, пересинхронизируйте

Шаг 2 - Переключение ролей (secondary → primary):

На старом secondary (теперь primary):

configure
set service config-sync secondary address '192.168.100.1'
set service config-sync secondary key 'HA-Sync-Key'
set service config-sync section firewall
# ... остальные разделы
commit

На старом primary (теперь secondary):

configure
delete service config-sync
set service https api keys id ha-sync key 'HA-Sync-Key'
set service https api rest
commit

Шаг 3 - Принудительная синхронизация:

reset config-sync

Плановое обслуживание

Перед обслуживанием:

# Сделайте резервную копию обоих роутеров
show configuration commands | cat > /config/backup-$(date +%Y%m%d).conf

# Проверьте что secondary синхронизирован
show log | match config-sync | tail -20

Во время обслуживания:

# Временно отключите Config Sync если меняете primary
set service config-sync secondary disable
commit

# Выполните обслуживание
# ...

# Включите обратно
delete service config-sync secondary disable
commit

# Пересинхронизируйте
reset config-sync

Troubleshooting Checklist

При проблемах проверьте по списку:

  • REST API запущен на secondary (show service https)
  • API ключи совпадают на primary и secondary
  • Сетевая связность (ping, traceroute)
  • HTTPS порт доступен (curl, telnet)
  • Firewall не блокирует HTTPS между роутерами
  • Версии VyOS совпадают на обоих устройствах
  • Разделы для синхронизации указаны корректно
  • Timeout достаточен для размера конфигурации
  • Логи не показывают ошибок синхронизации
  • Secondary роутер не перегружен (CPU, память)
  • Конфигурация на primary валидна (commit check)

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

  • High Availability (VRRP) - настройка VRRP для IP failover
  • HTTPS API - детальная настройка REST API
  • System Login - управление пользователями и API ключами
  • Monitoring - мониторинг Config Sync операций