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.

29 enero 2008

Una definición de inteligencia

Un problema en el campo de la inteligencia artificial es la dificultad de definir el propio termino inteligencia. Con este artículo quiero aportar mi granito de arena en clarificar este tema (u oscurecerlo, nunca se sabe):

Inteligencia: es la capacidad de generar nueva información coherente con información previamente asimilada o generada.

Los términos clave en esta definición son información, nueva y coherente:
  • Por información entendemos, no solo datos simples y puros, sino también reglas, normas y leyes que rigen dichos datos, que su vez pueden estar sometidas a principios o meta-reglas, y así sucesivamente.
  • Por nueva queremos decir desconocida para el sujeto (persona, entidad o sistema) capaz de actuar inteligentemente. Por ejemplo, cuando un maestro propone a sus alumnos un problema de matemáticas, la solución del mismo es nueva o desconocida para los estudiantes, pero no para el profesor.
  • Por último, para que haya inteligencia, la información generada tiene que ser coherente o consistente con la información base (formada por datos, reglas y meta-reglas). En realidad, se suele atribuir más o menos inteligencia al resultado del razonar humano según este criterio. Así una solución a un problema que en realidad no resuelva nada se considera una estupidez: no es coherente con el propio problema. Si la solución resuelve el problema, pero requiere mucho tiempo o energías, se considera poco inteligente. Si la solución es correcta y además eficaz y efectiva, consumiendo poco tiempo y recursos, entonces es una solución inteligente: es coherente con el problema y con la ley del mínimo esfuerzo, por ejemplo. A mayor coherencia con el campo de información base, mayor inteligencia se puede atribuir al proceso generador.
Y podemos ver que esta definición describe bien el elemento inteligente de la actividad humana en diferentes campos del saber.

En primer lugar tenemos los campos puramente creativos, como son los pertenecientes a las artes: música, pintura, escultura o literatura, entre otros. En todos ellos el artista conforma su obra a las leyes de la armonía, la estética y la belleza. Mención especial merece la literatura (para mi, creación en estado puro), donde el escritor crea su obra según las reglas presentes en las mentes de sus lectores para, con el lenguaje, hacerles llegar sensaciones, emociones, sentimientos y pensamientos. Y se considera al artista aun más genial si en su obra da lugar a nuevas normas estéticas (nuevos estilos o corrientes), que difieren de las anteriores, pero que sin duda son coherentes con metanormas de rango superior.

Los ingenieros, informáticos, matemáticos, arquitectos, etc. también crean conjuntos de nueva información, pero esta vez bajo las reglas de su ámbito de actuación, bien sean leyes físicas, oferta disponible de piezas y materia prima, funcionamiento de la máquina lógica subyacente o leyes matemáticas. Y normalmente lo hacen con el objetivo de resolver algún problema concreto o satisfacer cierta necesidad. El proceso de generación de información en estos casos se puede comparar a la construcción física de un edificio: se plantea un objetivo (el edificio terminado), y partiendo de un terreno vacío, se van añadiendo elementos que a su vez permiten la adicción de más elementos hasta tener el edificio terminado.

Lo mismo ocurre con investigadores de todo tipo, desde el científico en su laboratorio, hasta el policía que trata de resolver un crimen, pasando por el médico que trabaja para diagnosticar una enfermedad: deben relacionar los datos que recopilan con su conocimiento para así elaborar teorías (una vez más, nueva información) que expliquen el fenómeno investigado. Es interesante que en estos ámbitos se suele hablar de encontrar soluciones o realizar descubrimientos. Con estas expresiones se da a entender que aunque la información que se busca es desconocida o nueva para el sujeto que realiza la investigación, tiene que estar presente de forma explicita o implícita en el campo de información en el que se trabaja.

Llegados a este punto podemos comprender que en realidad no hay mucha diferencia en como se han ido construyendo las distintas áreas del saber. No difieren mucho en su trabajo un escritor y un matemático o un informático. Todos producen nueva información; varían las reglas y leyes que rigen dicha información.

Notamos también que en realidad el elemento inteligente, la generación de nueva información, está presente en casi cualquier actividad humana. Cuando aprendemos, bien sea en la escuela o por experiencia en la vida cotidiana, no estamos simplemente almacenando datos nuevos en la mente. Establecemos relaciones entre la información adquirida y la que ya conocíamos con anterioridad. Son esas relaciones lo que constituyen el entendimiento de un asunto, es decir, la capacidad para interiorizar la explicación de la información recién aprendida en base a lo ya conocido. Y son esas relaciones entre información adquirida e información preexistente lo que constituyen la nueva información que debe generar todo proceso inteligente. Igualmente, cuando realizamos cualquier tarea, por ejemplo, preparar un plato de cocina siguiendo una receta que conocemos bien, no actuamos sin pensar. Debemos adaptar lo que ya sabemos (la receta) a la realidad en la que nos vemos inmersos ("vaya, nos falta tal ingrediente"). Tenemos que establecer relaciones entre lo que conocemos y lo que nos vamos encontrando. Y una vez más, estas relaciones son nueva información que nos permite calificar de inteligente nuestra forma de actuar.

De modo que, según la definición enunciada y las explicaciones expuestas, la producción de información nueva coherente sería el elemento que nos permitiría identificar un proceso como inteligente. Es como la radiación a las reacciones nucleares. Hay radiación, entonces hay reacciones nucleares. Hay información nueva coherente, entonces hay inteligencia.

Pienso que la definición de inteligencia presentada en este artículo es buena por tres motivos:
  • Es muy sencilla y concreta. Me atrevería a decir que admite una formalización matemática.
  • Aisla el elemento inteligente, aquello que tienen en común los procesos calificados como tales.
  • Encaja con los comportamientos que el sentido común nos dice que son inteligentes.
Un ejercicio interesante para probar la veracidad de estas afirmaciones sería tratar de aplicar dicha definición a las conversaciones, actividades y tareas de la vida cotidiana de uno y de otros. A ver si realmente este artículo es coherente o inteligente ;)