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
.