Todos los productos
Search
Centro de documentos

:Solución de problemas del error "kernel: nf_conntrack: table full, dropping packet"

Última actualización: Sep 02, 2026

Descripción del problema

Es posible que experimente pérdida ocasional de paquetes al conectarse a aplicaciones en una instancia ECS. Una investigación muestra que la red externa de la instancia ECS funciona con normalidad, pero los registros del kernel (dmesg) contienen el mensaje de error kernel: nf_conntrack: table full, dropping packet. Este problema afecta a las instancias ECS con las siguientes características:

  • Imagen: aliyun-2.1903-x64-20G-alibase-20190327.vhd o posterior

  • Kernel: kernel-4.19.24-9.al7 o posterior

Causa

nf_conntrack es un módulo del kernel de Linux que rastrea las entradas de conexión para la traducción de direcciones de red (NAT). El módulo nf_conntrack almacena las conexiones establecidas en una tabla hash. Cuando esta tabla hash se llena, las nuevas conexiones desencadenan el error nf_conntrack: table full, dropping packet. Los parámetros clave del módulo nf_conntrack incluyen:

  • nf_conntrack_buckets: El tamaño de la tabla hash de seguimiento de conexiones. Puede especificar este valor cuando se carga el módulo o modificarlo mediante el comando sysctl. Para sistemas con 4 GB o más de memoria, el valor predeterminado es 65536.

  • nf_conntrack_max: El número máximo de conexiones que el módulo nf_conntrack puede rastrear. Para sistemas con 4 GB o más de memoria, el valor predeterminado es 262144. Este valor predeterminado puede ser insuficiente para servidores que gestionan muchas conexiones.

  • nf_conntrack_tcp_timeout_time_wait: El tiempo durante el cual nf_conntrack conserva la entrada de seguimiento de una conexión TCP en estado TIME_WAIT. El valor predeterminado es 120 s.

Soluciones

Elija la solución que mejor se adapte a su caso de uso.

Solución 1: Ajustar los parámetros de nf_conntrack

Determine el número máximo de conexiones que podría requerir su aplicación y, a continuación, ejecute los siguientes comandos para ajustar los parámetros del módulo nf_conntrack.

sysctl -w net.netfilter.nf_conntrack_max=1503232
sysctl -w net.netfilter.nf_conntrack_buckets=375808  # This option cannot be modified during runtime if the kernel version is not 4.19.
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=60
Importante

Los valores de los parámetros en estos comandos son ejemplos. Ajústelos según su carga de trabajo real y sus requisitos empresariales. Antes de realizar cambios, cree una instantánea o haga una copia de seguridad de los archivos importantes.

Nota

Revise las siguientes recomendaciones para la configuración de parámetros:

  • Si su carga de trabajo implica un alto número de conexiones simultáneas y de corta duración, aumente los valores de nf_conntrack_max y nf_conntrack_buckets. Esto evita que la tabla hash de nf_conntrack se llene. Se recomienda establecer el valor de nf_conntrack_max en cuatro veces el valor de nf_conntrack_buckets.

  • Ajuste los parámetros nf_conntrack_buckets y nf_conntrack_max de forma conjunta. Si solo aumenta nf_conntrack_max, las listas vinculadas en la tabla hash pueden volverse demasiado largas, lo que reduce la eficiencia de búsqueda. Cambiar únicamente nf_conntrack_buckets no resolverá el problema.

  • Antes de ajustar el parámetro nf_conntrack_tcp_timeout_time_wait, asegúrese de comprender su propósito y sus posibles efectos. Ajuste este parámetro con precaución según el caso de uso de su aplicación y los resultados del monitoreo de rendimiento. Los siguientes ejemplos sirven como referencia para distintos escenarios:

    • Para servicios de alta concurrencia que gestionan muchas conexiones de corta duración, como un servidor web, considere establecer nf_conntrack_tcp_timeout_time_wait en una duración más breve, como 30 o 60 segundos. Esto libera las entradas de seguimiento de conexiones más rápido y deja capacidad available para nuevas conexiones. No obstante, debe asegurarse de que su aplicación pueda tolerar una pequeña cantidad de retransmisión de datos o latencia potencial.

    • Si su aplicación requiere una integridad de datos extremadamente alta, como un sistema de operaciones financieras, es más seguro mantener el valor predeterminado de nf_conntrack_tcp_timeout_time_wait. Esto ayuda a garantizar que todos los paquetes de datos se entreguen correctamente.

    • En entornos con latencia de red alta o inestable, un valor más bajo de nf_conntrack_tcp_timeout_time_wait puede aumentar el riesgo de pérdida de datos. Se recomienda una configuración más conservadora.

Solución 2: Filtrar conexiones sin seguimiento con reglas de iptables

Agregue reglas de iptables con el destino -j NOTRACK para evitar que se rastreen conexiones específicas. Las conexiones que coinciden con estas reglas no se agregan a la tabla de seguimiento, lo que evita que se llene.

sudo iptables -t raw -A PREROUTING -p udp -j NOTRACK
sudo iptables -t raw -A PREROUTING -p tcp --dport 22 -j NOTRACK
Nota

Los comandos de ejemplo deshabilitan el seguimiento de conexiones para todo el tráfico UDP y para el tráfico TCP en el puerto 22. Estas reglas son ejemplos. Configúrelas según sus requisitos específicos y su entorno.

Referencias