15 diciembre 2008

NSLU2 como Proxy ARP

Si se quiere compartir una conexión a internet, no hay nada mejor que hacerlo por WiFi. En mi caso, mi vecino tenía un D-Link modelo DI-624, así que lo más fácil era poner mi Linksys WRT54GS en modo cliente y configurarlo para conectarse al otro router. Problema: el WRT54GS y el DI-624 no se llevaban bien trabajando con WPA. Sin encriptación o con WEP la cosa funcionaba, pero con WAP nada. Así que opté por hacer el enlace con la NSLU2. Como se ve en mi anterior artículo en la NSLU2 funciona bien un D-Link DWL-G122. Así que la conexión entre la NSLU2 y el DI-624 fue bien a la primera. El siguiente problema era hacer que la NSLU2 encaminara el tráfico de mis PCs hacia el DI-624 y de ahí a Internet.

Tenía por un lado la red inalámbrica entre la NSLU2 y el DI-624, y por otro la red ethernet entre la NSLU2 y mi WRT54GS (y de este al resto de PCs). Podría haber hecho que las dos redes se comportaran como una sola por debajo del nivel IP (lo que hubiera sido hacer de la NSLU2 un 'bridge'), pero me parecía más natural que las dos redes, la cableada y la inalámbrica, estuvieran diferenciadas a nivel IP. Fácil entonces, solo tenía que segmentar las direcciones C del rango 192.168.0.0 en dos, usando la máscara 255.255.255.128 y asignando a cada interfaz de red de la NSLU2 una dirección de esos segmentos. Con activar el reenvío de paquetes IP (forwarding) ya estaría todo. Es decir, teniendo el DI-624 la dirección interna 192.168.0.1, la configuración de los otros dos elementos quedaba así:

En la NSLU2, fichero /etc/network/interfaces:
allow-hotplug eth0
iface eth0 inet static
  address 192.168.0.177
  netmask 255.255.255.128

allow-hotplug wlan0
iface wlan0 inet static
  pre-up ifconfig wlan0 up
  pre-up iwconfig wlan0 essid "********"
  pre-up iwconfig wlan0 mode Managed
  pre-up iwpriv wlan0 set AuthMode=WPAPSK
  pre-up iwpriv wlan0 set EncrypType=AES
  pre-up iwpriv wlan0 set WPAPSK="********"
  pre-up iwpriv wlan0 set SSID="********"
  address 192.168.0.77
  netmask 255.255.255.128
  gateway 192.168.0.1

En la NSLU2, fichero /etc/sysctl.conf:
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.conf.default.forwarding=1

En el WRT54GS:
IP Addrs: 192.168.0.129
Mascara: 255.255.255.128
GW: 192.168.0.177
DNS: 192.168.0.1
DHCP: 192.169.0.200/250

Pero el DI-624 no admitía rutas estáticas; o al menos yo no ví como hacerle el equivalente a un 'route add', para que así reenviara a la NSLU2 los paquetes correspondientes al segmento ethernet. Solución: hacer que la NSLU2 fuera un Proxy ARP. De esta manera el DI-624 ve a la NSLU2 como destinataria de los paquetes correspondientes a la red ethernet y la NSLU2 los reenvía a sus destinatarios finales. Más información aquí.

La forma de activar la NSLU2 como Proxy ARP es también modificando el /etc/sysctl.conf:
# Proxy arp
net.ipv4.conf.default.proxy_arp=1

09 diciembre 2008

Saturación de un router con DD-WRT por P2P

Después de dar algo más de trabajo a mi NSLU2 con rtorrent, empecé a observar que la conexión a internet no iba bien. Si, los torrents más o menos se bajaban, pero la navegación web desde otros PCs era lentísima. Parecía que era una simple cuestión de ancho de banda, pero limitar las bajadas/subidas en rtorrent no cambiaba la situación.

El síntoma definitivo fue comprobar que el propio router, un WRT54GS con DD-WRT, quedaba muerto. Las conexiones al mismo con el navegador para administrarlo se eternizaban. Resetearlo lo dejaba como nuevo, pero tras unas horas de funcionamiento del rtorrent, todo volvía a languidecer. Así que el problema no venía del ISP ni estaba en la conexión a Internet. Estaba en el router. No cerraba las conexiones IP antiguas, no dejaba espacio para nuevas conexiones y entraba en agonía.

El problema y la solución se explican muy bien en las FAQ de µTorrent. Puesto que yo tengo instalada la versión DD-WRT v23 SP2, solo tuve que alterar un poco la configuración. En 'Web-Admin -> Administration -> Management -> IP Filter Settings' puse los valores recomendados:
Maximum Ports: 4096
TCP Timeout (s): 300
UDP Timeout (s): 300

Grabar, rearrancar el router, y a correr. Ahora va como la seda.

De todos modos, investigando este asunto he visto otros firmwares interesantes. Quizás pruebe un día de estos Tomato.