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)Процесс синхронизации
- Администратор вносит изменения на primary роутере
- Выполняется
commitна primary - Config Sync перехватывает изменения
- Изменения отправляются на secondary через REST API
- Secondary применяет конфигурацию
- Результат логируется на 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
saveVyOS 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 32port
TCP порт REST API (по умолчанию 443):
set service config-sync secondary port 443
set service config-sync secondary port 8443timeout
Таймаут соединения в секундах (по умолчанию 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 | Конфигурация интерфейсов |
nat | NAT правила (source, destination) |
nat66 | NAT66 (IPv6-to-IPv6) |
pki | PKI сертификаты и ключи |
protocols | Динамическая маршрутизация (BGP, OSPF, RIP) |
qos | Quality of Service политики |
service | Сервисы (DHCP, DNS, SSH, etc.) |
system | Системные настройки (hostname, users, etc.) |
vpn | VPN конфигурация (IPsec, OpenVPN, L2TP) |
vrf | Virtual 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 serviceMode - режим синхронизации
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
saveSecondary роутер:
configure
# Включить REST API
set service https api keys id config-sync key 'MySecureKey123!@#'
set service https api rest
commit
saveHA 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
saveMulti-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
savePrimary роутер (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
savePrimary роутер (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/32AWS 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
savePrimary (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
saveAzure 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
savePrimary (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'
commitTimeout ошибки
Симптомы: 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
commitHTTPS сертификаты
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.0Audit logging
Включите логирование всех API операций:
set system syslog global facility all level info
set system syslog host 192.168.1.100 facility all level info
commitЛучшие практики
Планирование
- Выберите правильные разделы: Синхронизируйте только то, что должно быть идентичным
- Тестируйте на staging: Проверьте Config Sync в тестовой среде перед production
- Документируйте архитектуру: Четко укажите какой роутер primary, какой secondary
Конфигурация
- Используйте режим load: Гарантирует идентичность конфигураций
- Не синхронизируйте interfaces слепо: Интерфейсы могут иметь разные IP адреса
- Генерируйте сильные API ключи: Минимум 32 символа случайных данных
- Настройте адекватный timeout: Учитывайте размер конфигурации и скорость сети
Операции
- Мониторьте логи: Регулярно проверяйте успешность синхронизации
- Тестируйте failover: Периодически проверяйте работоспособность secondary
- Делайте резервные копии: Config Sync не заменяет backup
- Версионный контроль: Храните историю конфигураций в git
Безопасность
- Ограничьте firewall: Только primary должен иметь доступ к API secondary
- Используйте internal сети: Не синхронизируйте через публичный интернет без VPN
- Регулярно меняйте ключи: Ротация API ключей каждые 90 дней
- Логируйте все операции: Centralized logging для audit trail
Отказоустойчивость
- Тестируйте failover сценарии: Primary падает, переключение на secondary
- Документируйте процедуры восстановления: Как вернуть primary в строй
- Синхронизация после восстановления: Как восстановить sync после downtime
- Мониторинг обоих роутеров: Alerting на проблемы синхронизации
Ограничения
- Односторонняя синхронизация: Только primary → secondary
- Требуется online secondary: Оба роутера должны быть доступны
- Одинаковая версия VyOS: Несовместимость версий может вызвать ошибки
- Нет конфликт-резолюции: Изменения на secondary перезаписываются
- Один secondary: Нельзя синхронизировать с несколькими secondary одновременно
- Синхронные операции: Commit блокируется до завершения синхронизации
Альтернативные подходы
Для множественной репликации
Если нужно синхронизировать более 2 роутеров:
- Configuration Management: Ansible, SaltStack, Puppet
- Git-based: Храните конфигурации в git, применяйте через CI/CD
- Scripted sync: Кастомные скрипты через VyOS API
Для bidirectional sync
Config Sync не поддерживает двустороннюю синхронизацию. Варианты:
- Два Config Sync: Настройте взаимную синхронизацию (осторожно с петлями!)
- External orchestration: Ansible с централизованным state
- 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
saveSecondary (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_secondsZabbix 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 0Syslog
Отправка логов 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-syncTroubleshooting 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 операций