nf_conntrack: table full, dropping packet
Feb 4, 2016 21:27 · 179 words · 1 minute read
В профилактических целях проверяем 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.