Configuración puertos router D-Link para eMule

Configuración puertos router D-Link para eMule

El router tiene un cortafuegos propio (firewall) que debemos configurar para que abra los puertos que utiliza el EMULE (o el programa p2p que utilicemos).

Una vez instalado el EMULE , accedemos a la opción de PREFERENCIAS

En la pantalla que aparece vamos a la opción de CONEXIÓN donde comprobamos que los puertos que tenemos que abrir son TCP 4662 y UDP 4672.

En el botón de COMPROBAR PUERTOS podemos verificar si los mismos están cerrados o abiertos.

En el botón de ASISTENTE, podemos configurar nuestra conexión, en el ejemplo una ADSL 512/128


preferencias eMule

En la pantalla que aparece vamos a la opción de CONEXIÓN donde comprobamos que los puertos que tenemos que abrir son TCP 4662 y UDP 4672.

En el botón de COMPROBAR PUERTOS podemos verificar si los mismos están cerrados o abiertos.

En el botón de ASISTENTE, podemos configurar nuestra conexión, en el ejemplo una ADSL 512/128:
Pestaña conexión eMule

Accedemos al router a través de la siguiente dirección IP:http://192.168.1.1

Acceso al router D-Link

Y vamos a la pestaña de ADVANCED, y en los botones de la izquierda pulsamos PORT FORWARDING.

Panel avanzado de router D-Link
En ADVANCED – PORT FORWARDING, debemos crear una regla que nos permita abrir los puertos que utiliza el EMULE, esa regla solo será válida para la IP del PC que aparece en la casilla de LAN IP. Debemos marcar USER y crear la regla con el botón de ADD

Configurar usuario router D-Link
A continuación aparece la pantalla para poner los puertos, ponemos un nombre a la regla (p. ej. emule), a veces el nombre debe ir precedido por un número (p. ej. 2emule), ponemos el TCP con el valor 4662 en los tres campos.

Y pulsamos APPLY para aplicar los cambios

Abriendo puertos router D-Link para eMule
Ahora ponemos el UDP con el valor 4672 en los tres campos. Y pulsamos APPLY para aplicar los cambios:

Configurando puertos router D-Link para eMule
Volvemos a pulsar en PORT FORWARDING, marcamos USER, seleccionamos la regla que acabamos de crear y pulsamos el botón de ADD

Regla nueva en router D-Link
Veremos que la regla ha pasado a la ventana de APPLIED RULES. Pulsamos APPLY para aplicarla.

Aplicando nueva regla router D-Link
Por último en TOOLS – SYSTEM COMMANDS, guardamos los cambios para que no se pierdan al apagar el router.

Para salir del menú de configuración, pulsamos el botón de LOGOUT (en cualquiera de las pantallas del router, en el extremo inferior izquierdo de la pantalla)

Configuracion puertos router D-Link para eMule

Si ahora volvemos al EMULE, opción de PREFERENCIAS y pulsamos el botón de COMPROBAR LOS PUERTOS nos tiene que salir

Probando puertos en eMule

CONSIDERACIONES A TENER EN CUENTA:

Si en el router están conectados varios PC y está configurada la opción de asignar IP dinámicas (marcada por defecto en el router), hay que poner una IP fija al PC que se utilice para el EMULE: En la pestaña de ADVANCED – LAN CLIENTS podemos poner una IP fija a un PC determinado.

Si no hacemos ningún cambio las IP que se asignen van a ser dinámicas.

Debemos añadir la IP (dentro del rango que permite el router) y el HOST del PC. Pulsamos ADD y APPLY para aplicar los cambios.

Ejemplo de IP fija:

Configuracion puertos router D-Link para eMule

Los puertos TCP y UDP pueden ser otros diferentes de 4662 y 4672, si se cambian se debe hacer tanto en el router como en el EMULE.-Se puede desconectar totalmente el FIREWALL del router (no aconsejado) por lo que no haría falta crear ninguna regla. Se hace en ADVANCED – ADVANCED SECURITY.

Pulsamos APPLY para aplicar los cambios (no debemos olvidar luego salvar los cambios en TOOLS – SYSTEM COMMANDS – SAVE ALL).

Activar firewall router D-Link para eMule

Si en Windows XP tenemos conectado el cortafuegos, lo desconectamos o abrimos los puertos del mismo, para ello en PANEL DE CONTROL, CONEXIONES DE RED, accedemos a las PROPIEDADES de nuestra conexión y desconectamos la opción de PROTEGER MI EQUIPO …..:

Activar/desactivar firewaal Windows

Si tenemos instalado en Windows el SP2, puede dar problemas.

Si abrimos el EMULE, le conectamos, comprobamos los puertos y están abiertos y la ID nos da ALTA, pero descarga despacio, en principio no es problema del router, que está correctamente configurado, puede ser que nuestro proveedor de ADSL ponga algún filtro para dificultar el tráfico p2p, que estemos descargando algo con pocas fuentes, que tengamos mal configurado el EMULE, etc, etc.

Pestaña Servidores para eMule

Por último, se ha detectado que tras algunos días con el EMULE conectado de forma ininterrumpida, el router se satura y no permite navegar ni el EMULE va bien, no es un problema de configuración, y tampoco del proveedor de ADSL, aquí se explica muy bien y se da una solución.

Me gustaría compartir con todo el mundo la solución que he encontrado  con el problema de este Router y el emule cuando hay muchas conexiones o bien se usa la red Kademlia. Como algunos sabréis este Router (y me imagino que esto es aplicable a otros  routers del mismo fabricante, e incluso de otros fabricantes) está basado en Linux.

Pues bien, he descubierto que el problema reside en que por firwmare está limitado a una cantidad máxima de conexiones NAT.

Si se excede ésta, el router se cuelga y la conexión deja de responder.

Para solucionar esto, debéis hacer telnet al router:-> telnet 192.168.1.1

Entonces como login: root y como password: admin (el que tengáis en la web del router si lo cambiáis)

Entonces llegareis al terminal Linux del router: BusyBox v0.61.pre (2004.07.21-12:17+0000) Built-in shell (ash)
Enter ‘help’ for a list of built-in commands.

El archivo que tenemos que cambiar en cuestión es el siguiente (si hacéis un cat veréis el valor que tiene):
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
1024

Lo queremos cambiar a 2048: # echo 2048 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max

Et voilà! Teóricamente os deberían desaparecer las inestabilidades (probad a meter 400-500 conexiones con el emule a ver que tal).

Teóricamente el router soporta un valor máximo de ip_conntrack_max de 2500 pero yo recomiendo probar con 2048.

Consola Windows

Ya podéis hacer un exit. La mala noticia es que este cambio se pierde cada vez que apagáis el router 🙁 Para que fuera permanente habría que guardarlo en el firmware y  de momento no se como hacerlo todavía.

Espero que os ayude como me ha ayudado a mi, comentaros que he puesto en contacto con Dlink a ver si sacan un Firmware para corregir esto.

PD. Si queréis podéis ver cosas vais en la consola.
Si hacéis un cat /proc/cpuinfo vereis información sobre la pequeña CPU que lleva el router 🙂 y si hacéis un cat /proc/version veréis la versión de linux que corre 🙂


Actualización del tutorial

He continuado investigando sobre la arquitectura NAT de linux y he llegado a conclusiones importantes. La primera es que mi anterior solución al problema de la estabilidad de sus routers y programas p2p que consistía en incrementar el tamaño máximo de entradas NAT de 1024 a 2048 era incorrecto.

Si bien esto me ayudó a aumentar el tiempo que tardaba el router en saturarse, no era más que un mero parche temporal que retrasaba lo inevitable: la saturación de la tabla NAT. Pero después de investigar en documentación técnica, foros y otras fuentes de información he llegado a una solución que parece definitiva y efectiva.

Básicamente el problema no está en el tamaño de la tabla NAT en si mismo sino en que se juntan dos problemas: por un lado, el programa p2p en cuestión (p.e.emule) lanza una cantidad de masiva de conexiones, muchas de las cuales se quedan en un estado «established» pero sin tráfico alguno, las denominadas conexiones fantasma, que se van acumulando y acumulando y acumulando, pueden comprobar esto con el siguiente comando:

#cat /proc/net/ip_conntrack | grep "tcp" -c (para conexiones TCP)
#cat /proc/net/ip_conntrack | grep "udp" -c (para UDP, emule usa de este tipo tb)

Prueben a lanzar el programa p2p en cuestión y a monitorizar periódicamente las conexiones, verán que comienzan a aumentar y aumentar sin parar hasta que llegan al limite (por defecto, 1024 para mi DLink 504T) y el router se cuelga.

Para rematarlo del todo se ha juntado con un segundo problema: los timeouts de limpieza de la tabla NAT que incorpora por defecto el router son muy largos, demasiados largos para un aparato de estas características, miren por ejemplo: #cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 432000

Si miran la documentación Linux, este valor se mide en segundos, lo cual significa (sí, sí) que el router tarda 5 días (!) en limpiar la tabla NAT de conexiones established fantasma. Como digo este, digo otros timeouts que son demasiado largos.

El problema es (sin ánimo de criticar a D-link) que han puesto un kernel Linux a saco en el firmware sin reajustar los valores para adaptarlos a un aparato de esta índole, que tiene una cantidad de RAM limitada (no como equipos PC router que tienen cantidades ingentes de memoria), con ello una cantidad limitada de conexiones máximas (y que los usuarios se encargan de agotar rápidamente).

La solución ha sido poner unos timeouts mucho más cortos para que el router limpie periódicamente la tabla NAT:

echo 2048 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 50 > /proc/sys/net/ipv4/netfilter/ip_conntrack_generic_timeout
echo 5 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
echo 120 >
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
echo 1200 >
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 120 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
echo 60 >
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout

Si comprueban ahora con el primer comando mencionado, la cantidad de conexiones activas TCP/UDP verán que se mantienen dentro de un rango aceptable, puesto que el router limpia activamente todas aquellas conexiones que ya no son necesarias a intervalos cortos de tiempo.

El problema es que hay que hacer esto cada vez que se apaga el router, puesto que se pierde. Estoy programando un script que lo hará automáticamente.

Este manual ha sido realizado gracias a los manuales de otras webs, los cuales han sido resumidos y unidos para formar éste, espero que os sirva de ayuda.