Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

CONNTRACK_TABLE_FULL Linux / DevOps

Траблшутинг переполнения таблицы conntrack в Linux: тюнинг nf_conntrack

Обновлено: 21.08.2026
  • В выводе dmesg появляется ошибка nf_conntrack: table full, dropping packet.
  • Сервер или Kubernetes-нода внезапно перестает принимать новые входящие TCP/UDP соединения.
  • Случайные потери сетевых пакетов при нормальной нагрузке на CPU и пропускную способность сети.

1. Проверка текущего заполнения таблицы conntrack

# Текущее количество активных соединений
cat /proc/sys/net/netfilter/nf_conntrack_count

# Максимальный установленный лимит
cat /proc/sys/net/netfilter/nf_conntrack_max

# Использование таблицы в процентах
awk 'BEGIN {getline count < "/proc/sys/net/netfilter/nf_conntrack_count"; getline max < "/proc/sys/net/netfilter/nf_conntrack_max"; printf "Usage: %.2f%% (%d/%d)\n", (count/max)*100, count, max}'

2. Расчет и изменение лимитов conntrack и хэш-таблицы (buckets)

Отредактируйте /etc/sysctl.d/99-conntrack.conf:

# Увеличение максимального числа отслеживаемых соединений до 1 млн (требует ~300-400MB RAM)
net.netfilter.nf_conntrack_max = 1048576

# Уменьшение таймаутов для быстрого освобождения завершенных сессий
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
net.netfilter.nf_conntrack_generic_timeout = 60

3. Применение параметров ядра и обновление размера Buckets

sysctl --system

# Размер хэш-таблицы (buckets = max / 4)
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize

4. Исключение высоконагруженного трафика из Conntrack (NOTRACK)

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK
💡 Практика специалистов: В Kubernetes переполнение conntrack на worker-нодах — одна из самых частых скрытых причин сбоев DNS (CoreDNS timeouts). Всегда настраивайте conntrack_max на нодах из расчета не менее 262144 на каждые 16GB RAM.

Частые вопросы (FAQ)

Сколько памяти потребляет одна запись conntrack?

В 64-битных Linux-системах одна структура nf_conntrack занимает около 320 байт памяти ядра (SUnreclaim Slab). 1 миллион соединений потребует около 320-350 MB RAM.

Почему нельзя просто выключить модуль nf_conntrack?

Модуль conntrack обязателен для работы NAT (маскарадинга), Stateful брандмауэров (iptables stateful matching) и Kubernetes kube-proxy / Calico / Cilium.

Полезные материалы
Рекомендуем