Conntrack table is full now

Заметил однажды в Ubuntu Server 14.04 LTS настроенного как роутер, в файле /var/log/kern.log следующую ошибку:

Aug 14 17:32:51 router kernel: [1933791.144013] nf_conntrack: table full, dropping packet

Посмотрим текущее максимальное значение записей количества статуса соединений:

Посмотрим сколько использовано:

Увеличим командой nf_conntrack_max, а также hashsize (hashsize=nf_conntrack_max/8):

Чтобы значение не сбросилось после перезапуска системы, можно добавить команды выше например в файл:

В данной статье речь пойдет об ошибке "nf_conntrack: table full, dropping packet", которая может появляться в логах сервера, работающего на ОС Linux и том, как эту ошибку исправить.

Описание

В случае большого количества сетевых соединений, в логах сервера, работающего под ОС Linux, может появляться следующая ошибка:

kernel: nf_conntrack: nf_conntrack: table full, dropping packet

Как видно из её текста, эта ошибка связана с тем, что переполнена таблица, в которой модуль nf_conntrack хранит всю информацию.

Для того, чтобы посмотреть текущее максимальное количество соединений, информацию о которых может хранить и обрабатывать модуль nf_conntrack, вводим следующую команду:

В нашем примере, видно, что максимальное количество соединений – 65536. Т.к. мы получаем ошибку, то увеличим число соединений в 4 раза, для этого воспользуемся следующей командой:

Т.е. мы добавляем в самый конец конфига /etc/sysctl.conf , строку net.netfilter.nf_conntrack_max = 262144
Далее, нам необходимо применить измененные настройки, для этого вводим следующую команду:

И проверяем, что теперь количество одновременных соединений, которое может обслуживать модуль nf_conntrack, увеличилось в 4 раза:

При данной записи в логах ядра nf_conntrack: table full, dropping packet, происходит переполнение таблицы conntrack и новые соединения не будут обрабатываться, а просто отбросятся. Одной из причин может быть DDOS атака, когда зомби-машина пытается генерировать значительное количество запросов и открывает много соединений, тем самым исчерпывая лимит на количество соединений.

Смотрим значение по умолчанию:

Вывод должен быть примерно следующим:

Для решения проблемы в данной ситуации необходимо увеличить количество возможных записей в таблице. Увеличить значение можно через файл /etc/sysctl.conf необходимо добавить или изменить записи:

Внимание:В дистрибутивах со старыми ядрами, ниже 2.6, параметры задающие максимальное количество записей в conntrack таблице называются net.ipv4.netfilter.ip_conntrack_max

Для применения изменений необходимо выполнить команду:

Если установить большое значение при малом количестве оперативной памяти , то могут возникнуть проблемы с переполнением памяти, в логах будет сообщение о нехватке оперативной памяти:

Также можно изменить и другие параметры:

который не даст держать открытым соединение без подтверждения более суток.

Посмотреть сколько в данный момент записей в conntrack таблице можно командой:

Можно установить пакет conntrack-tools и с его помощью собирать статистику:

Данным скриптом можно проверять и вводить 15 ip-адресов у которых наибольшее количество соединений в данный момент.

Оцените статью
ПК Знаток
Добавить комментарий

Adblock
detector