Как устранить ошибку "kernel: nf_conntrack: таблица заполнена, отбрасывание пакета"
Недавно у нас была проблема с одним из наших серверов (Debian Squeeze), который перестал отвечать на запросы при большой нагрузке. Глядя на логи ядра, я думаю, что это причина:
kernel: nf_conntrack: table full, dropping packet
Насколько я понимаю, это модуль conntrack, который выполняет отслеживание соединения с отслеживанием состояния, сообщая, что таблица, используемая для хранения сведений о соединении, заполнена.
Из проведенного мною исследования, кажется, есть два способа смягчить это:
Увеличьте размер таблицы.
Удалить модуль из системы в целом.
Тем не менее, ни /proc/sys/net/ipv4/ip_conntrack_max
ни /proc/sys/net/ipv4/netfilter/ip_conntrack_max
существуют на этой машине (нет ipv4
каталог под net
).
Если я сделаю lsmod
Я не получаю результатов.
Итак, я немного растерялся - может, кто-нибудь прояснит ситуацию для меня?
- Установлен ли conntrack? Если да, где настройки? И почему он не отображается в lsmod?
- Если conntrack не установлен, что выдаёт в таблице полные сообщения?
Спасибо
2 ответа
Это из опыта - я не проводил исследования, чтобы проверить эту информацию: я видел несколько систем, где та же самая ошибка присутствует в системных журналах, и нет ничего в /proc/sys/net/ipv4/ip_conn* или / proc / SYS / нетто / ipv4 / Netfilter. Я также хотел бы знать, почему - но это не останется очень важным, когда вы найдете решение для первоначальных симптомов.;)
Стратегия смягчения была двоякой: увеличение лимита с помощью sysctl (наивный краткосрочный подход) и выяснение того, почему количество отслеживаемых соединений так велико.
Если пределы по умолчанию превышаются, и рассматриваемый сервер не предназначен для обработки большого количества соединений, то вполне естественно, что ограничения не должны быть достигнуты вообще. Хорошим примером службы, которая будет предъявлять высокие требования к отслеживанию соединений, является "общедоступный" DNS-сервер, обслуживающий более сотни тысяч клиентов.
Меры по снижению риска заключаются в том, чтобы просмотреть журналы, убедиться, что меры по борьбе с DOS/DDOS приняты (например, см. Fail2ban), и убедиться, что у вас установлена разумная конфигурация брандмауэра.
Что касается lsmod, я не сталкивался с ситуацией, когда он кажется активным, но модуль не указан. Я не уверен, как эта ситуация возникает.
Настройки для conntrack часто находятся в /proc/sys/net/netfilter/nf_conntrack_max.