Траблшутинг переполнения таблицы conntrack в Linux: тюнинг nf_conntrack
- В выводе
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 = 603. Применение параметров ядра и обновление размера Buckets
sysctl --system
# Размер хэш-таблицы (buckets = max / 4)
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize4. Исключение высоконагруженного трафика из Conntrack (NOTRACK)
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK Частые вопросы (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.