Conntrack Sync
Conntrack Sync (синхронизация отслеживания соединений) - это функция фреймворка Netfilter, которая синхронизирует состояния отслеживания соединений между сетевыми устройствами. Это обеспечивает stateful failover (отказоустойчивость с сохранением состояния) и высокую доступность для firewall и NAT.
Обзор
Connection tracking (отслеживание соединений) отслеживает все сетевые соединения через маршрутизатор на уровне протокола. Это позволяет:
- Поддерживать stateful firewall правила
- Обеспечивать NAT с отслеживанием состояний
- Синхронизировать активные соединения между узлами HA
- Минимизировать прерывание соединений при failover
Conntrack Sync синхронизирует эти состояния между несколькими VyOS маршрутизаторами, что позволяет резервному узлу немедленно принять на себя активные соединения без разрыва.
Поддерживаемые протоколы
Conntrack Sync может синхронизировать состояния для следующих протоколов:
- TCP
- UDP
- ICMP
- SCTP
- DCCP
- IPv6-ICMP
Архитектура
[Primary VyOS] [Backup VyOS]
| |
| Conntrack Sync Protocol |
|<-------------------------------->|
| (Multicast or Unicast) |
| |
[Conntrack Table] [Conntrack Table]
- Active connections - Synced connections
- NAT mappings - NAT mappings
- Firewall states - Firewall statesПри failover резервный узел имеет полную таблицу активных соединений и может продолжить обработку без прерывания клиентских сессий.
Базовая конфигурация
Минимальная настройка
Минимальная конфигурация для conntrack sync:
set service conntrack-sync interface eth1
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1Структура конфигурации
service conntrack-sync
├── interface <name> # Интерфейс для синхронизации
├── mcast-group <address> # Multicast группа (default: 225.0.0.50)
├── failover-mechanism
│ └── vrrp
│ └── sync-group <name> # VRRP sync-group
├── accept-protocol <protocol> # Ограничить синхронизируемые протоколы
├── ignore-address <ip> # Игнорировать IP адреса
├── sync-queue-size <size> # Размер очереди синхронизации
├── expect-sync <protocol> # Синхронизировать expect entries
├── event-listen-queue-size <size>
└── startup-resync # Запросить полную синхронизацию при стартеПараметры конфигурации
Interface
Интерфейс, который будет использоваться для передачи данных синхронизации:
set service conntrack-sync interface eth1Рекомендации:
- Используйте выделенный интерфейс для синхронизации (не публичный)
- Обычно это интерфейс в приватной сети между узлами HA
- Интерфейс должен быть активен и иметь IP-адрес
Multicast Group
Multicast группа для передачи данных синхронизации:
set service conntrack-sync mcast-group 225.0.0.50Значение по умолчанию: 225.0.0.50
Для multicast требуется:
- L2 сегмент между узлами (без маршрутизации multicast)
- Firewall должен разрешать multicast трафик
- Интерфейс должен поддерживать multicast
Unicast (альтернатива Multicast)
Для сетей без multicast поддержки используйте unicast:
set service conntrack-sync expect-sync all
set service conntrack-sync interface eth1
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1Unicast использует peer-to-peer соединение вместо multicast группы.
Failover Mechanism - VRRP Integration
Интеграция с VRRP для автоматического управления состоянием:
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1Conntrack-sync будет:
- Активен только на VRRP MASTER узле
- Автоматически переключаться при VRRP failover
- Синхронизировать состояния в фоне
Требует настроенный VRRP sync-group. Пример VRRP конфигурации:
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN virtual-address 203.0.113.1/24
set high-availability vrrp group WAN priority 200
set high-availability vrrp sync-group SYNC1 member WANAccept Protocol
Ограничение синхронизируемых протоколов:
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync accept-protocol icmpДоступные протоколы:
tcp- TCP соединенияudp- UDP сессииicmp- ICMP запросы/ответыsctp- SCTP соединенияdccp- DCCP соединенияipv6-icmp- ICMPv6
По умолчанию синхронизируются все протоколы.
Рекомендации:
- Для уменьшения overhead синхронизируйте только критичные протоколы
- TCP обычно наиболее важен для stateful failover
- UDP может генерировать много записей (DNS, NTP)
Ignore Address
Исключение определенных IP-адресов из синхронизации:
set service conntrack-sync ignore-address 192.168.1.1
set service conntrack-sync ignore-address 203.0.113.0/24Используйте для:
- Исключения служебных адресов (мониторинг, управление)
- Исключения локальных сервисов
- Уменьшения overhead синхронизации
Expect Sync
Синхронизация expect entries для сложных протоколов:
set service conntrack-sync expect-sync ftp
set service conntrack-sync expect-sync h323
set service conntrack-sync expect-sync nfs
set service conntrack-sync expect-sync sip
set service conntrack-sync expect-sync sqlnetДоступные протоколы:
ftp- FTP (активный режим)h323- H.323 VoIPnfs- Network File Systemsip- SIP VoIPsqlnet- Oracle SQLNetall- все протоколы
Expect entries необходимы для протоколов, которые открывают дополнительные соединения (например, FTP data channel).
Queue Sizes
Настройка размеров очередей:
Sync Queue Size:
set service conntrack-sync sync-queue-size 8192Очередь для исходящих сообщений синхронизации. По умолчанию: 1024.
Event Listen Queue Size:
set service conntrack-sync event-listen-queue-size 16384Очередь для входящих событий conntrack. По умолчанию: 8192.
Увеличивайте при большом количестве соединений или потере сообщений синхронизации.
Startup Resync
Полная синхронизация таблицы соединений при запуске:
set service conntrack-sync startup-resyncПри включении:
- Новый узел запрашивает полную таблицу соединений от мастера
- Увеличивает время запуска, но гарантирует полную синхронизацию
- Полезно при частых перезагрузках или обновлениях
Полная конфигурация High Availability
Сценарий: Active-Standby Firewall/NAT
Топология:
Internet
|
[Virtual IP: 203.0.113.1]
|
+-------------+-------------+
| |
[vyos-primary] [vyos-backup]
eth0: 203.0.113.10 eth0: 203.0.113.11
eth1: 192.168.1.1 eth1: 192.168.1.2
eth2: 10.0.0.1 (sync) eth2: 10.0.0.2 (sync)
| |
+-------------+-------------+
|
Internal LANКонфигурация vyos-primary:
# Базовые интерфейсы
set interfaces ethernet eth0 address 203.0.113.10/24
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth1 address 192.168.1.1/24
set interfaces ethernet eth1 description 'LAN'
set interfaces ethernet eth2 address 10.0.0.1/24
set interfaces ethernet eth2 description 'HA-SYNC'
# VRRP для WAN интерфейса
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN virtual-address 203.0.113.1/24
set high-availability vrrp group WAN priority 200
set high-availability vrrp group WAN preempt true
set high-availability vrrp group WAN authentication type 'plaintext-password'
set high-availability vrrp group WAN authentication password 'SecurePassword123'
# VRRP для LAN интерфейса
set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN virtual-address 192.168.1.254/24
set high-availability vrrp group LAN priority 200
set high-availability vrrp group LAN preempt true
set high-availability vrrp group LAN authentication type 'plaintext-password'
set high-availability vrrp group LAN authentication password 'SecurePassword123'
# VRRP Sync Group
set high-availability vrrp sync-group SYNC1 member WAN
set high-availability vrrp sync-group SYNC1 member LAN
# Conntrack Sync
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync accept-protocol icmp
set service conntrack-sync ignore-address 10.0.0.0/24
set service conntrack-sync expect-sync ftp
set service conntrack-sync expect-sync sip
# NAT для выхода в интернет
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 translation address masquerade
# Firewall - WAN_LOCAL
set firewall ipv4 name WAN_LOCAL default-action drop
set firewall ipv4 name WAN_LOCAL rule 10 action accept
set firewall ipv4 name WAN_LOCAL rule 10 state established
set firewall ipv4 name WAN_LOCAL rule 10 state related
set firewall ipv4 name WAN_LOCAL rule 20 action drop
set firewall ipv4 name WAN_LOCAL rule 20 state invalid
set firewall ipv4 name WAN_LOCAL rule 30 action accept
set firewall ipv4 name WAN_LOCAL rule 30 protocol icmp
# Применение firewall на WAN
set firewall interface eth0 local name WAN_LOCALКонфигурация vyos-backup:
# Базовые интерфейсы
set interfaces ethernet eth0 address 203.0.113.11/24
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth1 address 192.168.1.2/24
set interfaces ethernet eth1 description 'LAN'
set interfaces ethernet eth2 address 10.0.0.2/24
set interfaces ethernet eth2 description 'HA-SYNC'
# VRRP для WAN интерфейса
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN virtual-address 203.0.113.1/24
set high-availability vrrp group WAN priority 100
set high-availability vrrp group WAN preempt false
set high-availability vrrp group WAN authentication type 'plaintext-password'
set high-availability vrrp group WAN authentication password 'SecurePassword123'
# VRRP для LAN интерфейса
set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN virtual-address 192.168.1.254/24
set high-availability vrrp group LAN priority 100
set high-availability vrrp group LAN preempt false
set high-availability vrrp group LAN authentication type 'plaintext-password'
set high-availability vrrp group LAN authentication password 'SecurePassword123'
# VRRP Sync Group
set high-availability vrrp sync-group SYNC1 member WAN
set high-availability vrrp sync-group SYNC1 member LAN
# Conntrack Sync (идентична primary)
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync accept-protocol icmp
set service conntrack-sync ignore-address 10.0.0.0/24
set service conntrack-sync expect-sync ftp
set service conntrack-sync expect-sync sip
# NAT (идентична primary)
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 translation address masquerade
# Firewall (идентична primary)
set firewall ipv4 name WAN_LOCAL default-action drop
set firewall ipv4 name WAN_LOCAL rule 10 action accept
set firewall ipv4 name WAN_LOCAL rule 10 state established
set firewall ipv4 name WAN_LOCAL rule 10 state related
set firewall ipv4 name WAN_LOCAL rule 20 action drop
set firewall ipv4 name WAN_LOCAL rule 20 state invalid
set firewall ipv4 name WAN_LOCAL rule 30 action accept
set firewall ipv4 name WAN_LOCAL rule 30 protocol icmp
set firewall interface eth0 local name WAN_LOCALКлючевые моменты:
- Primary имеет priority 200, backup - 100
- Primary использует preempt, backup - нет (предотвращает flapping)
- Обе ноды имеют идентичную конфигурацию NAT и Firewall
- Синхронизация через выделенный интерфейс eth2
- VRRP sync-group гарантирует согласованность состояний
Операционные команды
Просмотр таблицы соединений
IPv4 conntrack table:
show conntrack table ipv4Пример вывода:
ipv4 tcp ESTABLISHED src=192.168.1.100 dst=203.0.113.50 sport=45678 dport=443
ipv4 tcp TIME_WAIT src=192.168.1.101 dst=203.0.113.51 sport=52341 dport=80
ipv4 udp src=192.168.1.102 dst=8.8.8.8 sport=53124 dport=53IPv6 conntrack table:
show conntrack table ipv6Фильтрация по протоколу:
show conntrack table ipv4 protocol tcp
show conntrack table ipv4 protocol udpФильтрация по адресу:
show conntrack table ipv4 source 192.168.1.100
show conntrack table ipv4 destination 203.0.113.50Просмотр Conntrack Sync состояния
Статус синхронизации:
show conntrack-sync statusПример вывода:
sync-interface : eth2
failover-mechanism : vrrp [sync-group SYNC1]
last-rx : 0.123s ago
last-tx : 0.098s agoВнутренний кэш (локальные соединения):
show conntrack-sync cache internalПоказывает соединения, отслеживаемые локально для синхронизации.
Внешний кэш (полученные соединения):
show conntrack-sync cache externalПоказывает соединения, полученные от peer узла.
Статистика синхронизации:
show conntrack-sync statisticsПример вывода:
cache stats:
current entries: 1523
peak entries: 2891
insertions: 45234
deletions: 43711
message traffic:
received:
packets: 123456
bytes: 45678901
errors: 0
sent:
packets: 123401
bytes: 45654321
errors: 0Управление Conntrack
Удаление всех соединений:
delete conntrack table ipv4Удаление соединений по протоколу:
delete conntrack table ipv4 protocol tcpУдаление соединений по адресу:
delete conntrack table ipv4 source 192.168.1.100Перезапуск сервиса
restart conntrack-syncПримеры конфигурации
Минимальная конфигурация (без VRRP)
set service conntrack-sync interface eth1
set service conntrack-sync mcast-group 225.0.0.50Примечание: Без VRRP оба узла будут активно синхронизировать соединения, что может привести к дублированию.
Только TCP синхронизация (оптимизация)
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync accept-protocol tcpСинхронизация для VoIP (SIP/H.323)
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync expect-sync sip
set service conntrack-sync expect-sync h323Высоконагруженная конфигурация
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync sync-queue-size 16384
set service conntrack-sync event-listen-queue-size 32768
set service conntrack-sync startup-resyncИсключение служебных адресов
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
set service conntrack-sync ignore-address 10.0.0.0/24
set service conntrack-sync ignore-address 192.168.255.0/24
set service conntrack-sync ignore-address 169.254.0.0/16Устранение неполадок
Проверка статуса синхронизации
- Проверьте, что conntrack-sync запущен:
show conntrack-sync statusОжидается:
- sync-interface должен быть активен
- last-rx и last-tx должны показывать недавнюю активность
- Проверьте VRRP состояние:
show vrrpУбедитесь, что MASTER узел имеет активный conntrack-sync.
- Проверьте статистику:
show conntrack-sync statisticsОбратите внимание на:
errorsдолжен быть 0 или минимальнымreceived packetsдолжен увеличиваться на BACKUP узлеsent packetsдолжен увеличиваться на MASTER узле
Соединения не синхронизируются
Проблема: Backup узел не видит соединения от master.
Проверка:
- Проверьте multicast связность:
# На master
set system ipv4 multicast-routing mroute 0.0.0.0/0 interface eth2
# Тест с tcpdump
sudo tcpdump -i eth2 host 225.0.0.50- Проверьте firewall на sync интерфейсе:
# Разрешите multicast на eth2
set firewall interface eth2 local ipv4 name ALLOW_SYNC
set firewall ipv4 name ALLOW_SYNC rule 10 action accept
set firewall ipv4 name ALLOW_SYNC rule 10 destination address 225.0.0.50
set firewall ipv4 name ALLOW_SYNC rule 10 protocol udp- Проверьте, что интерфейсы в одном L2 сегменте:
# На обоих узлах
ping -I eth2 <peer-ip>- Проверьте логи:
show log | match conntrackHigh CPU usage от conntrack-sync
Причины:
- Слишком много соединений синхронизируется
- Неправильно настроен accept-protocol
- Не используется ignore-address для служебных адресов
Решение:
- Ограничьте синхронизируемые протоколы:
set service conntrack-sync accept-protocol tcp- Исключите служебные адреса:
set service conntrack-sync ignore-address 10.0.0.0/8
set service conntrack-sync ignore-address 192.168.0.0/16- Увеличьте размеры очередей:
set service conntrack-sync sync-queue-size 16384
set service conntrack-sync event-listen-queue-size 32768- Проверьте количество соединений:
show conntrack table ipv4 | countFailover приводит к разрыву соединений
Проблема: При переключении VRRP соединения разрываются.
Причины:
- Conntrack-sync не успел синхронизировать соединения
- Firewall state не синхронизирован
- NAT mappings не синхронизированы
Решение:
- Убедитесь, что conntrack-sync привязан к VRRP:
show service conntrack-sync- Включите startup-resync:
set service conntrack-sync startup-resync- Проверьте VRRP transition delay:
set high-availability vrrp group WAN transition-script mode-force- Убедитесь, что firewall правила идентичны:
# На обоих узлах
show firewall- Проверьте NAT правила:
# На обоих узлах
show nat source rulesConntrack table переполнена
Проблема: nf_conntrack: table full, dropping packet
Проверка:
# Текущее использование
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_maxРешение:
- Увеличьте размер таблицы:
set system conntrack table-size 262144- Уменьшите timeout для conntrack:
set system conntrack timeout tcp close-wait 10
set system conntrack timeout tcp time-wait 10- Настройте ignore-address для уменьшения записей:
set service conntrack-sync ignore-address <high-traffic-subnet>- Перезагрузите после изменения table-size:
reboot nowДиагностика с tcpdump
Мониторинг conntrack-sync трафика:
# Multicast трафик
sudo tcpdump -i eth2 -n host 225.0.0.50 -vv
# Все UDP на sync интерфейсе
sudo tcpdump -i eth2 -n udp -vv
# С записью в файл
sudo tcpdump -i eth2 -n host 225.0.0.50 -w /tmp/conntrack-sync.pcapЛучшие практики
Проектирование
Выделенный интерфейс синхронизации - используйте отдельный интерфейс для conntrack-sync, не смешивайте с production трафиком
Используйте приватную сеть - sync интерфейс должен быть в приватной сети, недоступной извне
L2 смежность - для multicast узлы должны быть в одном L2 сегменте (без маршрутизации)
Достаточная пропускная способность - для высоконагруженных систем используйте минимум 1Gbit/s для sync
Оптимизация
- Ограничьте протоколы - синхронизируйте только критичные протоколы (обычно TCP)
set service conntrack-sync accept-protocol tcp- Исключайте служебные адреса - не синхронизируйте мониторинг, управление, heartbeat
set service conntrack-sync ignore-address 10.0.0.0/8- Настройте размеры очередей - для высоких нагрузок увеличивайте queue sizes
set service conntrack-sync sync-queue-size 16384
set service conntrack-sync event-listen-queue-size 32768- Используйте expect-sync избирательно - включайте только нужные протоколы (FTP, SIP)
Безопасность
- Защитите sync интерфейс - настройте firewall для разрешения только conntrack-sync трафика
set firewall interface eth2 local ipv4 name SYNC_LOCAL
set firewall ipv4 name SYNC_LOCAL default-action drop
set firewall ipv4 name SYNC_LOCAL rule 10 action accept
set firewall ipv4 name SYNC_LOCAL rule 10 destination address 225.0.0.50
set firewall ipv4 name SYNC_LOCAL rule 10 protocol udpИзолируйте VLAN - используйте отдельный VLAN для HA/sync трафика
Мониторинг - настройте алерты на ошибки синхронизации
Мониторинг
- Регулярно проверяйте статистику:
show conntrack-sync statistics- Отслеживайте ошибки:
show log | match conntrack- Мониторьте размер таблицы:
show conntrack table ipv4 | count- Проверяйте VRRP состояние:
show vrrpТестирование Failover
Подготовка:
- Установите активные соединения (например, SSH, HTTP)
- Запустите мониторинг ping
Выполните failover:
# На master узле
set high-availability vrrp group WAN disable
commitПроверка:
- Соединения должны сохраниться без разрыва
- Ping не должен иметь значительных потерь
- Backup должен стать MASTER
Возврат:
delete high-availability vrrp group WAN disable
commitОбслуживание
- Резервное копирование - регулярно сохраняйте конфигурацию:
save /config/backup/config.$(date +%Y%m%d).bootСинхронизация конфигураций - обе ноды должны иметь идентичные:
- Firewall правила
- NAT правила
- Conntrack-sync параметры
- VRRP конфигурацию
Плановое обслуживание:
- Переведите узел в backup перед обслуживанием
- Проверьте синхронизацию после обновлений
- Тестируйте failover после изменений
Особенности для облачных платформ
Yandex Cloud
Ограничения:
- Multicast обычно не поддерживается
- Используйте unicast или VPN между узлами
Рекомендуемая архитектура:
set service conntrack-sync interface eth1
set service conntrack-sync failover-mechanism vrrp sync-group SYNC1
# Используйте internal network для синхронизации
# eth1 должен быть во внутренней подсетиNetwork Load Balancer:
- Настройте NLB для распределения трафика
- Используйте health checks для автоматического failover
- Conntrack-sync обеспечит бесшовный переход
VK Cloud
Аналогично Yandex Cloud:
- Используйте приватные сети для sync
- Настройте security groups для разрешения sync трафика
- Тестируйте failover в тестовой среде перед продакшном
Общие рекомендации для облака
- Используйте внутренние сети - для sync трафика
- Настройте security groups - разрешите только необходимый трафик
- Мониторинг - используйте облачные метрики для отслеживания состояния
- Автоматизация - используйте Terraform/Ansible для развертывания
- Backup - регулярно сохраняйте snapshots и конфигурации
Следующие шаги
- High Availability (VRRP) - настройка отказоустойчивости
- Firewall - stateful firewall правила
- NAT - Network Address Translation
- Traffic Policy - управление трафиком