nf_conntrack: table full, dropping packet

Feb 4, 2016 21:27 · 179 words · 1 minute read debian

В профилактических целях проверяем loganalyzer и видим там массу сообщений вида nf_conntrack: table full, dropping packet. Давайте разберемся!

Проблема в механизме определения состояний соединений (сеансов) — nf_conntrack, которая является важной частью сетевого экрана netfilter. Каждый пакет, проходящий через межсетевой экран может иметь 4 состояния:

  • NEW — пакеты, устанавливающие соединение;
  • ESTABLISHED — пакеты, принадлежащие установленным соединениям (сеансам);
  • RELATED — пакеты открывающие новое соединение, на основании уже существующего;
  • INVALID — остальные пакеты.

Просмотреть атрибуты активных подключений можно так:

cat /proc/net/nf_conntrack

Так как nf_conntrack хранит данные о соединениях в таблицах, сообщение nf_conntrack: table full, dropping packet совершенно очевидно говорит, что эти самые таблицы переполнены. Соединения, которые не помещаются в эту таблицу будут просто сброшены.

Проверим текущие значения в sysctl:

sysctl -a | grep conntrack_max
net.ipv4.netfilter.ip_conntrack_max = 65536
net.netfilter.nf_conntrack_max = 65536
net.nf_conntrack_max = 65536

Увеличиваем размер таблиц (в данном примере в 16 раз):

echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf

и применяем изменения:

sysctl -p

Проверим значения после изменений:

sysctl -a | grep conntrack_max
net.netfilter.nf_conntrack_max = 1048576
net.ipv4.netfilter.ip_conntrack_max = 1048576
net.nf_conntrack_max = 1048576

После данных изменений в логах должно исчезнуть сообщение nf_conntrack: table full, dropping packet.

tweet Share