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 SYNC1

Unicast использует peer-to-peer соединение вместо multicast группы.

Failover Mechanism - VRRP Integration

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

set service conntrack-sync failover-mechanism vrrp sync-group SYNC1

Conntrack-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 WAN

Accept 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 VoIP
  • nfs - Network File System
  • sip - SIP VoIP
  • sqlnet - Oracle SQLNet
  • all - все протоколы

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=53

IPv6 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

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

Проверка статуса синхронизации

  1. Проверьте, что conntrack-sync запущен:
show conntrack-sync status

Ожидается:

  • sync-interface должен быть активен
  • last-rx и last-tx должны показывать недавнюю активность
  1. Проверьте VRRP состояние:
show vrrp

Убедитесь, что MASTER узел имеет активный conntrack-sync.

  1. Проверьте статистику:
show conntrack-sync statistics

Обратите внимание на:

  • errors должен быть 0 или минимальным
  • received packets должен увеличиваться на BACKUP узле
  • sent packets должен увеличиваться на MASTER узле

Соединения не синхронизируются

Проблема: Backup узел не видит соединения от master.

Проверка:

  1. Проверьте 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
  1. Проверьте 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
  1. Проверьте, что интерфейсы в одном L2 сегменте:
# На обоих узлах
ping -I eth2 <peer-ip>
  1. Проверьте логи:
show log | match conntrack

High CPU usage от conntrack-sync

Причины:

  • Слишком много соединений синхронизируется
  • Неправильно настроен accept-protocol
  • Не используется ignore-address для служебных адресов

Решение:

  1. Ограничьте синхронизируемые протоколы:
set service conntrack-sync accept-protocol tcp
  1. Исключите служебные адреса:
set service conntrack-sync ignore-address 10.0.0.0/8
set service conntrack-sync ignore-address 192.168.0.0/16
  1. Увеличьте размеры очередей:
set service conntrack-sync sync-queue-size 16384
set service conntrack-sync event-listen-queue-size 32768
  1. Проверьте количество соединений:
show conntrack table ipv4 | count

Failover приводит к разрыву соединений

Проблема: При переключении VRRP соединения разрываются.

Причины:

  • Conntrack-sync не успел синхронизировать соединения
  • Firewall state не синхронизирован
  • NAT mappings не синхронизированы

Решение:

  1. Убедитесь, что conntrack-sync привязан к VRRP:
show service conntrack-sync
  1. Включите startup-resync:
set service conntrack-sync startup-resync
  1. Проверьте VRRP transition delay:
set high-availability vrrp group WAN transition-script mode-force
  1. Убедитесь, что firewall правила идентичны:
# На обоих узлах
show firewall
  1. Проверьте NAT правила:
# На обоих узлах
show nat source rules

Conntrack table переполнена

Проблема: nf_conntrack: table full, dropping packet

Проверка:

# Текущее использование
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

Решение:

  1. Увеличьте размер таблицы:
set system conntrack table-size 262144
  1. Уменьшите timeout для conntrack:
set system conntrack timeout tcp close-wait 10
set system conntrack timeout tcp time-wait 10
  1. Настройте ignore-address для уменьшения записей:
set service conntrack-sync ignore-address <high-traffic-subnet>
  1. Перезагрузите после изменения 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

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

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

  1. Выделенный интерфейс синхронизации - используйте отдельный интерфейс для conntrack-sync, не смешивайте с production трафиком

  2. Используйте приватную сеть - sync интерфейс должен быть в приватной сети, недоступной извне

  3. L2 смежность - для multicast узлы должны быть в одном L2 сегменте (без маршрутизации)

  4. Достаточная пропускная способность - для высоконагруженных систем используйте минимум 1Gbit/s для sync

Оптимизация

  1. Ограничьте протоколы - синхронизируйте только критичные протоколы (обычно TCP)
set service conntrack-sync accept-protocol tcp
  1. Исключайте служебные адреса - не синхронизируйте мониторинг, управление, heartbeat
set service conntrack-sync ignore-address 10.0.0.0/8
  1. Настройте размеры очередей - для высоких нагрузок увеличивайте queue sizes
set service conntrack-sync sync-queue-size 16384
set service conntrack-sync event-listen-queue-size 32768
  1. Используйте expect-sync избирательно - включайте только нужные протоколы (FTP, SIP)

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

  1. Защитите 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
  1. Изолируйте VLAN - используйте отдельный VLAN для HA/sync трафика

  2. Мониторинг - настройте алерты на ошибки синхронизации

Мониторинг

  1. Регулярно проверяйте статистику:
show conntrack-sync statistics
  1. Отслеживайте ошибки:
show log | match conntrack
  1. Мониторьте размер таблицы:
show conntrack table ipv4 | count
  1. Проверяйте VRRP состояние:
show vrrp

Тестирование Failover

  1. Подготовка:

    • Установите активные соединения (например, SSH, HTTP)
    • Запустите мониторинг ping
  2. Выполните failover:

# На master узле
set high-availability vrrp group WAN disable
commit
  1. Проверка:

    • Соединения должны сохраниться без разрыва
    • Ping не должен иметь значительных потерь
    • Backup должен стать MASTER
  2. Возврат:

delete high-availability vrrp group WAN disable
commit

Обслуживание

  1. Резервное копирование - регулярно сохраняйте конфигурацию:
save /config/backup/config.$(date +%Y%m%d).boot
  1. Синхронизация конфигураций - обе ноды должны иметь идентичные:

    • Firewall правила
    • NAT правила
    • Conntrack-sync параметры
    • VRRP конфигурацию
  2. Плановое обслуживание:

    • Переведите узел в 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 в тестовой среде перед продакшном

Общие рекомендации для облака

  1. Используйте внутренние сети - для sync трафика
  2. Настройте security groups - разрешите только необходимый трафик
  3. Мониторинг - используйте облачные метрики для отслеживания состояния
  4. Автоматизация - используйте Terraform/Ansible для развертывания
  5. Backup - регулярно сохраняйте snapshots и конфигурации

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

Дополнительные ресурсы