BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Tabla ARP del router llena en red grande

laserite

No sé muy bien si esto debe ir en este foro... bueno allá va:

Tengo una red muy tocha bajo un ADSL de Jazztel, al que añadiré próximamente 4 más para ponerlos juntos con balanceo de carga. El router Comtrend no hace NAT, eso lo hace un router linux más potente que coge la IP pública por dhcp. Tengo un tráfico de 250-750 pkts/s, y el log del linux me muestra cientos de mensajes como este:

(...) kernel: Neighbour table overflow.

Obviamente pierdo muchos paquetes por culpa de esto, un 15 % aprox. La caché ARP está llena de *miles* de entradas todas correspondientes a la MAC del Comtrend, asociadas a diferentes IP públicas. ¿A qué narices se debe esto? He visto un comportamiento similar en clientes infectados con virus, pero nunca en un router como el Comtrend.

¡Muchas gracias por vuestra ayuda!

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
Frankie2004

Cuando se habla en otros hilos de problemas de saturación en las tablas NAT, siempre es debido a la escasa memoria RAM que tienen los típicos routers de 100 euros, que se suele solucionar comprando routers serios de Cisco o similares, de 400 a 600 euros.

Pero por lo que dices, has decidido volcar esa responsabilidad en un equipo con Linux. Entonces el Comtrend está actuando simplemente como módem, ¿no?. Quizás deberías investigar en los foros de Linux la posibilidad de que exista alguna opción de ampliar la tabla NAT, bien con alguna opción en algún fichero de configuración, cambiando al vuelo algún parámetro en /proc, o incluso recompilando el kernel.

Si tu red es muy grande, ¿tantos miles de IPs remotas podrían ser el funcionamiento normal del trabajo de la empresa? Si no lo es, tal vez deberías investigar si hay tráfico P2P no permitido e intentar atajarlo de raíz.

🗨️ 2
laserite

No es que la tabla NAT esté llena, no lo está, es la tabla ARP, atención porque no es lo mismo, no es problema específico del router linux, es de la red o en todo caso del Comtrend, por eso he puesto el mensaje en este foro y no en el de linux.

En cualquier caso, gracias por tu ayuda :)

🗨️ 1
Frankie2004

El Comtrend está haciendo proxy de ARP, por eso en el otro router todas las IPs de Internet están enmascaradas con su MAC.
La verdad es que no sé cómo resolver ese tema. ¿Has estudiado el tipo de tráfico para averiguar por qué tantas direcciones?

Bodescu

Para una red tan grande, deberias comprobar los protocolos de routing. Un protocolo dinamico, por ejemplo, te dara la seguridad que los nodos intercambiaran tablas entre si, de manera que siempre sabran quien es quien, pero el trafico arp crecera de manera bestial. Tal vez otro tipo de routing, por flood, por ejemplo, aun siendo mas coñazo a la hora de intercambiar tablas, seria mas adecuado para establecer las relaciones arp.

Quiza si hubiese mas nodos de routing descargarias un poco los ya existentes, de forma que no tengan que intercambiarse las tablas arp cada vez que necesitan sincronizar.

Otra forma seria hacerlo en estatico, pero si tu red es grande como dices, te volveras loco para administrarla, seria mejor pensar en dinamico o flood.

Un saludo

🗨️ 2
Frankie2004

Si sale a Internet por una simple conexión ADSL no creo que esté intercambiando tablas de rutas con nadie.

🗨️ 1
Bodescu

Es muy probable, pero por otro lado, pues dice que tiene una red muy grande, lo normal es que haya varios nodos. Si a esto le sumas una saturacion de arp, pues...

laserite

En primer lugar, muchas gracias por vuestras respuestas. Os cuento un poco cómo es la red:

------ --------------- -------------------- ------------
|LAN|---|router Linux|---|router Comtrend|---|INTERNET|
------ --------------- -------------------- ------------

En la LAN hay 250 ordenadores, el Comtrend tiene activada la opción "PPP IP Extension", que desactiva el NAT y pasa la IP pública al router Linux por DHCP.

En la red LAN hay bastante tráfico ARP, pero he conseguido controlarlo tuneando el /proc. En principio, no debería haber nada de tráfico ARP entre el Linux y el Comtrend, tan solo el intercambio de las parejas MAC/IP de ambos, y ya está. No las más de 4000 parejas de diferentes IPs públicas con la MAC del Comtrend que estoy viendo. Recuerdo que es un simple ADSL, no necesito BGP ni OSPF ni movidas similares. ¿Por qué el Comtrend me está pasando todas las IPs, enmascaradas con su propia MAC? No lo entiendo.

¡Muchas gracias!

PD: por lo pronto he aumentado el tamaño de la caché en /proc/sys/net/ipv4/neigh/default/gc_thresh*, esperemos que no ande corto de RAM ahora el server

🗨️ 4
laserite

Me autorespondo, tenéis razón, el estúpido Comtrend está haciendo de proxy ARP para todo Internet, ¿qué puedo hacer?

🗨️ 3
JoeDalton

las macs corresponeden con direcciones de inet? o de tu lan?

🗨️ 2
laserite

Casi todos son una misma MAC, la del router Comtrend, asociadas a varios miles de IPs diferentes de inet. También hay unas cien MACs de ordenadores de la lan, pero eso es normal.

🗨️ 1
Bodescu
Bodescu
MaRZiaC

Pues como te han dicho arriba parece ser que el Comtrend esta haciendo broadcasting de ARP para averiguar quien sabe que MAC en la red. El Comtrend es wireless?. Lo pregunto por saber si puede haber alguien más entre el router y la máquina Linux.

De todas formas el fallo parece ser del router. Ya nos iras contando.

Un saludo.

🗨️ 3
laserite

El wifi está desactivado, no hay nadie entre el router Linux y el Comtrend. Creo que tengo una idea de qué está pasando... mañana os cuento.

¡Gracias por vuestra ayuda!

🗨️ 2
Pridebowl

algun avance nuevo? ;)

🗨️ 1
laserite

A ver, os cuento:

El firmware del router CT536+ está mal, ya que al activar la "PPP IP Extension" te da la misma IP para la IP pública de mi router linux y para la de gateway, eso es, simplemente, erróneo según el protocolo TCP/IP, aunque funciona dado que el Comtrend se pone en modo bridge, pero puedes perfectamente borrar la entrada de gateway de la tabla de enrutado del linux. Como consecuencia de lo anterior, mi router linux toma Internet como una red LAN, por lo que tiene que resolver por ARP las MAC de todas las IP públicas con las que quiere comunicarse, lógicamente Internet no es una LAN, así que el Comtrend hace proxyarp de todas las MAC, y la caché arp de mi linux se llena con miles de entradas, por lo que pierdo paquetes.

¿Soluciones? Primero voy a intentar configurar el Comtrend a pelo, ya que es un linux embebido (busybox) y se puede toquetear un poco. Igual tengo que modificar el firmware, lo cual va a ser difícil dado que las fuentes que dan los de Comtrend están incompletas, y no me apetece mucho andar liando con fuentes del kernel y compiladores y movidas similares. Puede que antes pruebe OSPF, dado que he visto que el busybox del Comtrend trae zebra.

No encuentro casi nada de ayuda por ahí, ya que se trata de un problema muy específico, así que tendré que currármelo yo solito todo :(

Salu2,

Eduardo

elflash

Puedes intercalar routers haciendo NAT para separar las redes y evitar la sobresaturacion de las tablas ARP.

🗨️ 1
laserite

Ein? O bien tú no entiendes mi problema o yo no entiendo tu respuesta ;) ¿Puedes explicármelo más detalladamente? ¡Gracias!

40tacos

Tras leer todo el post, yo pensaría buscar solución entre lo siguiente (para empezar; ya se me ocurrirán más ideas...)

(a) Con el COMTREND en modo monopuesto (ppp ip extension):

Tocar 'algo' de la configuración de la interfaz del lado WAN del router-LINUX (en lugar de tocar el COMTREND!), de tal forma que no permita llenar sus tablas ARP. No sé que posibilidades hay en ARP ...

(b) Poner el COMTREND en modo router (desactivando el FW y el AIM interno -kill- entre otros, para descargar la RAM).

El problema es que ante 250 PC's... se queda pequeño :-(, inclusive haciendo tuning del /proc/.../ip_conntrack_max (más de 2000)... Para los 16MB que tiene, creo que no va a dar suficientes sesiones TCP por usuario :-(

(c) Usar otro modem-router (importante que tenga RAM, al menos 64M ( ip_conntrack_max = 4000+).

Consultaré con la almohada ;-)

🗨️ 4
laserite

Lo primero, muchas gracias por tu respuesta.

Opción a: ya lo he probado, pero hay un límite impuesto por la RAM, tengo 512 MB en el router, pero a partir de 3000 entradas en la caché arp la RAM se queda corta.

Opción b: mi ip_conntrack_max es de 100000, así que imposible

Opción c: hace tiempo estuve buscando, routers que gestionen todo el tráfico de una red como la nuestra cuestan muuucho, del orden del millón de pelas, teníamos un cisco de gama baja de unos 600 euros y se moría el pobrecillo

A ver si hay suerte y tu almohada me ayuda... ¡gracias!

🗨️ 3
40tacos

De lo que escribes, hay 2 cosas que ** no me cuadran **

(1) 512MB de RAM en el router-LINUX... ¿¿y esa super RAM se la comen apenas 3000 entradas en la caché ARP ?? :-o . No es lógico: la info de cada registro ARP debe rondar los 40 bytes cada uno (+/-) ????? Ponle que sean 400 bytes c/u, sigue sin cuadrarme :-?

Por tanto...

(1.1) Hipotesis1 (poco probable): ese router-LINUX no
tiene 512MB, o más bien...

(1.2) Hipotesis2 (más probable): Son OTROS datos los que se "comen la RAM"....

(2) ip_conntrack_max de 100000 ... es el valor que tienes configurado en ese router-LINUX, supongo ¿de dónde lo has sacado? :-? (a ojo, me parece alto, pero quiero que me des info...)

"Regla del pulgar":

128M RAM -> ip_conntrack_max 8.000
256M RAM -> ip_conntrack_max 16.000
512M RAM -> ip_conntrack_max 32.000 (tú 100.000)

32.000 / 250 = 128 sesiones por usuario (entre TCP, UDP, ...), a ojo me parece suficiente (¿no navegarán todos al mismo tiempo en esa empresa ¿no? :-P )

Creo que para 250 PC's un router-LINUX con 512MB va de sobra, pero hay que hacerle 'tuning' (apenas te puedo ayudar en eso, pero hay un 'bestial' por ahí que creo que sí :-P )

Por otra parte, en ese router-LINUX deberías limitar (no sé cómo) el ancho de banda hacia el ADSL, porque 250 usuarios no es lo que está pensado para un router como el Comtrend o uno apenas mejor...

¿qué ancho de banda de SUBIDA tienes en el ADSL? Los ACK's tambien ocupan ancho de banda...

🗨️ 2
laserite

Veamos...

1) Lo sé, teóricamente no son suficientes entradas como para llenar la RAM, pero he estado leyendo por internet y por lo visto nunca es bueno tener más de 500 entradas en la caché ARP. Además la RAM no está muy llena, tiene unos cuantos megas libres y el uso de swap es muy escaso. He probado a usar arpd, que mueve la caché arp del kernel a userspace, pero también se me peta.

2) Sí, 100000 es una salvajada, generalmente no suelo tener más de 10000 o 15000 en el ip_conntrack, pero lo tengo a 100000 por los floods del virus de turno. Por otra parte, los 250 ordenadores no son de una empresa, sino de un colegio mayor, o sea, universitarios bajando porno 24/7 con la mula ;)

El router está bastante tuneado, ya llevo unos años gestionando la red, en total vamos a tener 5 adsl's de 20Mb funcionando con balanceo de carga, por ahora sólo me ha llegado uno (todavía a 6 Mb), pero en cualquier caso el problema de la caché arp no va a hacer más que aumentar.

Un saludo, y gracias por tu ayuda.

🗨️ 1
40tacos
40tacos
BocaDePez

Asegurate de tener desabilitado el RIP en el router comtrend
de esta forma evitarás el trafico de tablas ARP entre la interface externa y la interna del router, asi tu linux vera solo la MAC del router en la conexión routerlinux

laserite

¡Al fin lo conseguí! ¡¡Yuhuuu!! Mañana cuando haya descansado un poco os cuento cómo lo he hecho, en mi opinión esto debería ponerse de forma fija en algún sitio de bandaancha, pues es muy importante en redes grandes o pequeñas/medianas con mucho tráfico, es la mejor forma de exprimir a tope el CT536+... bueno mañana os explico cómo lo he hecho. También creo que voy a mandar un mail a los de Comtrend para que modifiquen el firmware, ya que está mal...

¡Qué contento estoyyyyy! :-)

🗨️ 7
laserite

Uhmmm después del subidón se me ocurren los problemas, ¿cómo me evito tener que usar cinco tarjetas de red para hacer el balanceo de carga? He probado a crear una interfaz virtual eth0:0 y conectar otro Comtrend al switch donde tenía ya el router linux y un Comtrend, eth0 coge IP de un Comtrend pero eth0:0 se niega a coger IP. ¿Por qué? Le he dado a un Comtrend la 192.168.1.1 y al otro la 192.168.1.2, cuando coge IP de uno no hace ping al otro, pero si resuelve la MAC por ARP... Dios qué cosas más raras hacen estos Comtrends...

🗨️ 6
Pridebowl

A priori te diria que no vas a poder.
iptables no trabaja con interfaces virtuales y la verdad es util para estos casos en los que te quieres ahorrar un ethernet.

JoeDalton

:) enhorabuena, estoy impaciente por leer lo que has hecho.

Si te animas podrías hacer un doc, para colgarlo en la web ;)

Saludos

🗨️ 4
laserite

Como ya he comentado, los parámetros que envía por DHCP el CT536+ en el modo "PPP IP EXTENSION" son incorrectos, hay que ignorarlos y usar unos propios, en linux puedes especificar qué ignorar y qué poner por tu cuenta en el fichero dhclient.conf y en el dhclient-script de /etc. Voy a explicar cómo hacerlo a pelo (sin dhclient) y cuando tenga más tiempo (tengo dos parciales a la vista) me curro un documento. A pelo (sin dhclient) es esto:

1) ponemos el Comtrend en "PPP IP Extension", pillamos los datos de IP pública ($IP) y puerta de enlace ($GW), pasamos de lo que nos envía por DHCP

2) en el router linux, hacemos lo siguiente:

# ifconfig eth0 $IP netmask 255.255.255.0 up
# route add $GW dev eth0

3) comprobamos que funciona haciendo ping a $GW, ahora sólo queda añadir la info de ruta por defecto, ¡atención esto no funciona si se hace en el ifconfig (con la opción gateway $GW)!

# route add default dev eth0 gw $GW

Y ya está, ahora nuestro router linux hace NAT, por lo que el Comtrend queda mucho más descargado que antes, y tampoco se nos llena la caché ARP del router linux.

Espero que os sea útil, a ver si tengo tiempo y me curro un documento. Cuando me lleguen las otras cuatro conexiones os cuento cómo voy a montar el balanceo de carga, por lo pronto ya le tengo echado un ojo a esta NIC: D-Link DFE-580TX

Salu2!

🗨️ 3
Frankie2004
Frankie2004
🗨️ 2
JoeDalton
JoeDalton
🗨️ 1