Descartes del firewall o del seguimiento de conexiones Stateful firewall / conntrack drops
ID de la causa rt-stateful-fw · Responsable principal Infraestructura de red (Equipo de infraestructura) · También Infraestructura de servidores (Equipo de infraestructura), Desarrollo de servidor (Equipo de desarrollo), Desarrollo de cliente (Equipo de desarrollo)
Los firewalls y el seguimiento de conexiones de Linux (conntrack, la función que registra en una tabla las conexiones que pasan) descartan paquetes cuando la tabla se llena o cuando consideran que no encajan con el estado de la conexión.
Por qué La tabla de seguimiento de conexiones se llena (table full), o la ida y la vuelta van por rutas distintas y solo un sentido pasa por el firewall (ruta asimétrica) → Efecto El firewall toma los paquetes como de una “conexión desconocida” o con un “número de secuencia fuera de la ventana” y los descarta → En pantalla Si la tabla se llena, no entran conexiones nuevas; si las rutas no coinciden, solo los jugadores de esa ruta acaban en desconexión tras repetidas retransmisiones
Cuando se junta mucha gente, Al conectar o tras un mantenimiento, De vez en cuando, al azar
Responsable
Responsable principal Infraestructura de red (Equipo de infraestructura) · También Infraestructura de servidores (Equipo de infraestructura), Desarrollo de servidor (Equipo de desarrollo), Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Servidor: regular con un sistema de cola de inicio de sesión las conexiones que llegan de golpe, por si la tabla se llena, reutilizar conexiones para no abrir conexiones cortas una y otra vez (también en las llamadas entre servidores), cerrar primero las conexiones cuyo heartbeat se cortó. Cliente: si la conexión falla o se corta, reintentar con intervalos crecientes y repartidos al azar (para que no vuelvan todos a la vez cuando la tabla se llena).
Tareas (Equipo de infraestructura)
Red: ampliar la tabla de seguimiento de conexiones del firewall, excluir del seguimiento los puertos del juego, ajustar el enrutamiento para que la ida y la vuelta pasen por el mismo firewall, revisar la configuración de comprobación de ventana TCP del firewall. Servidores/SO: ampliar la tabla en Linux (nf_conntrack_max), excluir del seguimiento los puertos del juego (NOTRACK), revisar la configuración de comprobación de ventana TCP (nf_conntrack_tcp_be_liberal) y, en AWS, revisar también conntrack_allowance_exceeded.
Cifras de referencia
El límite predeterminado de conntrack en Linux (nf_conntrack_max) va de decenas de miles a cientos de miles de entradas según la memoria. Cuando el número actual (nf_conntrack_count) llega al límite, queda en el log “nf_conntrack: table full, dropping packet”.
En el gráfico
Topa con el límite · Entradas de conntrack (nf_conntrack_count), conexiones nuevas fallidas
Dónde mirar
En servidores Linux, nf_conntrack_count y nf_conntrack_max, “nf_conntrack: table full, dropping packet” en dmesg, y drop e invalid en /proc/net/stat/nf_conntrack (una línea por núcleo, en hexadecimal). En firewalls, el uso de la tabla de sesiones y los logs de descartes; en AWS, conntrack_allowance_exceeded en ethtool -S
Se confirma si
Las entradas se quedan planas en el límite y, a la misma hora, suben los logs de table full y drop, o conntrack_allowance_exceeded. Con una ruta asimétrica, hay margen en el límite, pero invalid y los logs de descartes del firewall suben en las conexiones de una ruta concreta
Se descarta si
Si las entradas están lejos del límite e invalid y los logs de descartes no cambian, es otra causa. Si la tabla tiene margen, pero la CPU o los paquetes por segundo del firewall están al tope, apunta a “Límite de procesamiento superado en dispositivos intermedios (firewall, IPS, protección DDoS)”
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Fuentes
Netfilter Conntrack Sysfs variablesLinux kernel El valor predeterminado de nf_conntrack_max es el número de buckets del hash (memoria ÷ 16384, entre 1,024 y 262,144), el número actual es nf_conntrack_count, y nf_conntrack_tcp_be_liberal solo marca como INVALID los RST fuera de la ventana
net/netfilter/nf_conntrack_core.cLinux kernel Cuando la tabla se llena, deja el log “nf_conntrack: table full, dropping packet” y descarta el paquete (sube la estadística drop); los paquetes que no encajan con el estado de la conexión suben la estadística invalid
Amazon EC2 security group connection trackingAWS Al superar el límite de conexiones con seguimiento de cada instancia se descartan paquetes, lo que se ve en conntrack_allowance_exceeded; recomendación de evitar las rutas asimétricas
net/netfilter/nf_conntrack_standalone.cLinux kernel /proc/net/stat/nf_conntrack tiene una línea por núcleo, en hexadecimal, con columnas como entries, invalid, insert_failed, drop y early_drop