"nf_conntrack: tabla llena, paquete descartado" aunque nf_conntrack_count es mucho menor que nf_conntrack_max

"nf_conntrack: tabla llena, paquete descartado" aunque nf_conntrack_count es mucho menor que nf_conntrack_max

Tengo un nodo en nuestro clúster que recibe muchos mensajes "nf_conntrack: tabla llena, paquete descartado" en el syslog. Revisé nf_conntrack_count y se estaba ejecutando directamente con nf_conntrack_max. Al mirar la tabla, vi que la mayoría de las entradas eran solicitudes de DNS, así que agregué estas reglas a la tabla de netfilter "sin procesar".

$ sudo iptables -t raw -vnL
Chain PREROUTING (policy ACCEPT 146M packets, 19G bytes)
pkts bytes target     prot opt in     out     source               destination
33M 4144M CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spt:53 CT notrack
33M 2805M CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 CT notrack
Chain OUTPUT (policy ACCEPT 73M packets, 8311M bytes)
pkts bytes target     prot opt in     out     source               destination         
10785  882K CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 CT notrack
0     0 CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spt:53 CT notrack

Eso dejó el recuento rondando los 13000 aproximadamente, y nf_conntrack_max está configurado en 65535. Sin embargo, sigo recibiendo los mensajes de paquetes descartados. La mayoría del resto de los paquetes son UDP, y configuré nf_conntrack_udp_timeout en tan solo 1 segundo, dejando nf_conntrack_count alrededor de 1000. Sin embargo, todavía recibo el mensaje empaquetado descartado.

A partir de aquí, si elevo el máximo, se detendrán los mensajes de paquetes descartados, sin embargo, no veo por qué es necesario.

Estoy ejecutando Docker y hay un contenedor de elasticsearch (este problema parece ocurrir en cualquier nodo que esté ejecutando elasticsearch). No estoy seguro si es relevante, pero el nodo tiene 48 núcleos.

$ uname -a
Linux qtausc-pphd0128 3.19.0-26-generic #28~14.04.1-Ubuntu SMP Wed Aug 12 14:09:17 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Entonces, ¿por qué descarta paquetes cuando el recuento es mucho menor que el máximo?

Respuesta1

Tuve el mismo problema hace un tiempo en un sistema Squid.

Una de las formas más efectivas que encontré para reducir el tamaño de conntrack fue reducir el tiempo de espera de TCP predeterminado en el kernel.

Está net.netfilter.nf_conntrack_tcp_timeout_establishedconfigurado en 432000 de forma predeterminada. Así es... son 5 días.

Para establecer el valor, puede emitir el siguiente comando;

sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=X

Y si desea que ese cambio sea persistente, debe agregar la línea a /etc/sysctl.conf.

Después de reducir ese valor a 600, el recuento de conexiones disminuyó constantemente durante un par de días.

Utilicé sysctl net.netfilter.nf_conntrack_maxy sysctl net.netfilter.nf_conntrack_countpara obtener los valores.

información relacionada