Ayuda OnLine de GULiC
Configuración automática de la red, en Debian (Actualización 20051027)
Hace poco reinstalé el S.O de mi portatil. Y como me ocurrió las veces anteriores, resulta un poco desagradable el tiempo que tarda en arrancar por culpa de la falta de conexión de red. Desde luego resulta mucho más interesante que sólo la configure en caso de que haya enlace (ya sea por cable o inalámbico).
Voy a explicar como he preparado mi Debian para que configure automáticamente la red cuando detecta un enlace.
En mi caso concreto tengo en casa una red wifi encriptada con WPA-PSK. Además en el trabajo tengo una red inalámbrica abierta (que no sirve para acceder a los servidores del trabajo pero si para navegar por Internet desde la cafetería), una red de cable convencional para trabajar, y puede que con el tiempo montemos una VPN para poder trabajar desde casa. A parte me gustaría tener el portatil preparado para conectarse a cualquier otra red (cable o wifi) sin tener que configurar nada.
Lo cierto es que para lo que yo quiero hacer hay muchas soluciones. Pero al igual que el desarrollador de ifdownupd-roam (paquete hoy obsoleto) busco una solución compatible con ifdownup. El motivo es que este paquete es muy utilizado en las distribuciones de Linux, y mucho software depende de su buen funcionamiento. Cualquier solución a mi problema debería operar de forma compatible con ese software.
El creador de ifdownupd-roam dio con la solución, que ahora actualizo a mi gusto.
E ifplugd dijo -!Levantese la interfaz¡- y la interfaz se levanto
Nuestro amigo ifplugd es un viejo conocido para muchos de nosotros. Empecemos instalándolo:
$ apt-get install ifplugd
El paquete ifplugd se encarga de levantar una interfaz cuando detecta que tiene conexión de red (vamos, que se enciende la luz de link). En el caso de las intefaces inalámbricas hace lo mismo cuando la interfaz se asocia a un AP (Access Point). Tocaremos este último punto más adelante.
Hoy en día todos los equipos en Linux utilizan hotplug. Sería interesante configurar ifplugd para que opere correctamente con dicho software. Empezamos poniendo las siguientes líneas en /etc/default/ifplugd:
INTERFACES="" HOTPLUG_INTERFACES="all"
De esta forma ifplugd no gestionará ninguna interfaz que hotplug no le indique. Cuando el dispositivo de red correspondiente esté disponible, hotplug le indicará la interfaz a ifplugd para que las gestione.
Actualización 20051027
La experiencia me ha demostrado que indicar específicamente las interfaces que queremos monitorizar es mucho más beneficioso:INTERFACES="" HOTPLUG_INTERFACES="eth0 eth1"Así evitamos que
ifplugdcontrole interfaces rara comosit0o la interfaz de red sobre FireWire (que seguramente nunca utilizaremos).En todo caso en la versión 0.70 de
udevse integra la funcionalidad dehotplug, por lo que éste último paquete debe ser purgado. Por el momento parece que el paqueteifplugdde Debian no funciona con esa versión deudev. El problema es que no está adaptado a la forma en la queudevnecesita que se le indiquen los scripts que debe ejecutar.
Además hotplug tiene la manía de levantar las interfaces automáticamente cuando están disponibles. Para que ifplugd las gestiones correctamente, no debería hacerlo. Modifiquemos /etc/default/hotplug:
NET_AGENT_POLICY=auto
Actualización 20051027
En versiones recientes dehotplugdicha opción no está disponible. Sencillamentehotplugnunca levantará la interfaz a menos que se le indique con una líneaallow-hotplugen el/etc/network/interfaces.
De esta forma hotplug solo levantará las interfaces marcadas como auto en /etc/network/interfaces. Por eso debemos modificar ese fichero y borrar o comentar todas las lineas que empiezan por auto excepto auto lo. A menos que queramos que una interfaz se levanta pase lo que pase.
Guessnet: Y como configurar la red a la que me conecto
Aunque ifplugd hace una parte importante del trabajo, no lo hace todo. ¿Qué pasa si suelo conectarme a varias redes con diferentes configuraciones?. Para eso utilizamos guessnet que de forma compatible con ifdownup detecta la red a la que nos conectamos y la configura según nuestras preferencias. Primero instalamos guessnet:
$ apt-get install guessnet
Y configuramos /etc/interfaces/network con el siguiente ejemplo:
mapping eth? wlan?
script guessnet-ifupdown
# Buscar en todas las interfaces lógicas
# map default: none
map timeout: 3
# map verbose: true
# map debug: true
iface work inet dhcp
test peer address 193.145.98.1 mac 02:E0:52:EB:B6:DF
up perl -pli'*.old' -e 's/^ServerName .*$/ServerName lp.cyc.ull.es/i' \
/etc/cups/client.conf
down perl -pli'*.old' -e 's/^ServerName .*$/ServerName localhost/i' \
/etc/cups/client.conf
iface home inet dhcp
test wireless essid wifi.casa.r&j.prv
# up /usr/local/sbin/qos start
# down /usr/local/sbin/qos stop
# Si ninguna es encontrada, prueba DHCP
iface none inet dhcp
Repacemos cada línea:
mapping eth? wlan?
Indica el mappeo de las interfaces. Cuando, por ejemplo, se hace un ifup eth0 se mira con las interfaces indicadas despues de la palabra mapping. En mi caso vale cualquier interfaz que empieze por eth y wlan. Si no hay interfaces wlan basta con poner mapping eth? e incluso mapping *.
En mi caso no utilizo mapping * porque tengo una interfaz wifi0 que no quiero que se gestione con guessnet.
Cuando el nombre de una interfaz coincide con el indicado en mapping se ejecuta el programa indicado en la línea script. En nuestro caso guessnet.
A guessnet se le pasa en la línea de comandos el nombre de la interfaz física que queremos levantar. Debajo de la línea mapping podemos usar una o más lineas map. Las líneas map del ejemplo pasan parámetros a guessnet. Por ejemplo con:
map timeout: 3
Indica que guessnet debe tomar una decisión en menos de 3 segundos. Además se pueden indicar
las interfaces lógicas que queremos comprobar:
map home
map wifi
...
Cada interfaz lógica (home y wifi) debe tener una línea iface correspondiente (mirar iface home inet dhcp). Cada línea iface define como se configura la interfaz lógica y como se detecta que es esa interfaz lógica y no otra la que tenemos que confgurar.
Así que guessnet realiza sobre la interfaz física que queremos levantar los test de cada interfaz lógica indicada en las líneas map. Si un test da positivo, entonces se supone que esa interfaz lógica debe mapearse sobre la interfaz física que intentamos levantar. La configuración indicada en la interfaz lógica se utiliza para configurar la interfaz física.
Si no se indica ninguna línea map, como es nuestro caso, se comprueban todas las interfaces lógicas.
Actualización 20051027
La experienca me dice que si no se puede acceder a una misma red por dos interfaces (p. ej por cable y por inálambrico a la red del trabajo) lo mejor es usarmappara que sólo se compruebe los casos realmente posibles. Por ejemplo yo sugiero esta configuración para el caso anterior:mapping eth? script guessnet-ifupdown map work mapping wlan? script guessnet-ifupdown map home
iface work inet dhcp
Esta línea define mi interfaz lógica work que utilizo en la red cableada de mi trabajo. Como se puede ver la configuración de dicha interfaz se hace por DHCP. La línea:
test peer address 193.145.98.1 mac 02:E0:52:EB:B6:DF
Indica que la forma de detectar si esa es la red de mi trabajo es que la MAC de la IP 193.145.98.1 sea 02:E0:52:EB:B6:DF. Habitualmente lo que hacemos es comprobar la IP del gateway de la red.
Actualización 20051027
He tenido problemas para detectar redes donde el gateway no responde a consultas ARP que provinen de 0.0.0.0. En ese caso la comprobación sería:test peer address 193.145.98.1 mac 02:E0:52:EB:B6:DF source 193.145.98.0Se puede apreciar que utilizamos la dirección de la red como origen para el paquete ARP.
Si la red es detectada entonces la interfaz se configura por DHCP y se utilizan las líneas:
up perl -pli'*.old' -e 's/^ServerName .*$/ServerName lp.cyc.ull.es/i' \
/etc/cups/client.conf
down perl -pli'*.old' -e 's/^ServerName .*$/ServerName localhost/i' \
/etc/cups/client.conf
Para configurar el servidor de impresión por defecto. En este caso se le indica a los clientes CUPS que el servidor departamental tiene el nombre lp.cyc.ull.es.
iface home inet dhcp
Esta linea define la interfaz lógica home que utilizo en la red wifi de mi casa. La configuración tambien es por DHCP. Con la línea:
test wireless essid wifi.casa.r&j.prv
Indicamos que buscamos una red inalambrica con nombre wifi.casa.r&j.prv. Es importante darse cuenta que la interfaz solo será levantada si ifplugd detecta que la interfaz está asociada a un AP. Al levantar la interfaz, guessnet comprobará si estamos en la interfaz lógica home mirando el nombre de la red del AP asociado. Si ese nombre coincide con wifi.casa.r&j.prv entonces configurará la interfaz por DHCP.
Las líneas comentadas que quedan pretenden ejecutar un script para configurar el QoS.
iface none inet dhcp
Esta es la interfaz lógica por defecto. Si ninguna otra coincide guessnet utilizará esta interfaz lógica para configurar la interfaz física.
wpasupplicant: Y como no ser un vecino generoso
La configuración comentada no funciona con redes wifi encriptadas. Y no lo hace porque hasta que no se ha creado el canal seguro, la interfaz no queda asociada con el AP. Y hasta que eso no ocurra el ifplugd no hace su trabajo de levantar la interfaz.
Tampoco funciona si los AP de una red están configurados para no notificar el SSID. Si eso pasa no se puede saber el SSID de las redes disponibles. Sino que hay que configurar el SSID de la red que queremos en la interfaz. Solo cuando está configurado el SSID en la interfaz, esta se puede asociar con un AP puesto que sabe identificar la red a la que se quiere conectar.
Lo más comun era instalar waproamd pero en su web dicen que el paquete está obsoleto. Así que me he tirado por su sustituto: wpasupplicant
$ apt-get install wpasupplicant
Para que funcione hay que copiar un fichero de configuración a /etc. Podemos utilizar el ejemplo que viene con el paquete:
$ cp /usr/share/doc/wpasupplicant/examples/wpa_supplicant.conf.gz /etc/ $ gzip -d /etc/wpa_supplicant.conf.gz
Si miramos debajo de la línea:
# Example blocks:
Veremos ejemplos de configuración para diversas redes. Como se puede observar wpasupplicant utilizará el SSID para determinar que configuración es la adecuada. En caso de que hayan varias entradas con el mismo SSID se puede utilizar el parámetro priority para priorizar una sobre otra.
Personalmente yo he comentado todos los ejemplo y después he añadido el caso particular de las redes a las que yo accedo. Por ejemplo, la red de mi casa utiliza WPA-PSK (que tiene un algoritmo de encriptación mucho más fuerte que WEP) así que utilizo una configuración como esta:
network={
ssid="wifi.casa.r&j.prv"
psk="frase de paso secreta"
psk=a2001a6a0309e485527dc55384f22ffb6ae5daf77add103709b8c6353024309e
}
Lo sierto es que las frase de paso se utiliza para generar una clave de 256 bits. Esta tarea lleva cierto tiempo, por lo que podemos pre-generarla:
$ wpa_passphrase 'wifi.casa.r&j.prv' 'frase de paso secreta'
network={
ssid="wifi.casa.r&j.prv"
#psk="frase de paso secreta"
psk=987f7dbba1426bf25a7469632b7ab67655d4071aeb98473a25180876d435d7a5
}
Otras opción es configurar una red con conexión en texto plano (es decir sin encriptación) pero que no informa publicamente de su SSID:
network={
ssid="plaintext-test"
scan_ssid=1
key_mgmt=NONE
}
En este caso la opción scan_ssid=1 es importante porque le indica a wpasupplicant que no se moleste en sacar una lista de las redes disponibles. La que queremos no le va a decir su nombre, así que mejor es que utilize directamente el que le hemos indiciado. Por último podemos configurar una red con encriptación WEP pero que si informa publicamente de su nombre:
network={
ssid="wep-test"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
}
Debemos hechar un ojo a la opción ap_scan. Nos ayudará a utilizar el programa con drivers que usan ndiswrapper o que no tiene soporte para WPA.
wpasupplicant resuelve algunos problemas de waproamd. En este último hay una condición de carrera entre el programa y el firmware de la tarjeta, que hace que en ocaciones no se configure la red. Sin embargo, por el momento, wpasupplicant tiene menor soporte de hardware por lo que si nuestra tarjeta no está soportada deberemos utilizar el otro. Como ejemplo yo tengo una Prism que no funciona con wpasupplicant si utilizo los módulos orinocco. Sin embargo, la estoy utilizando correctamente con los módulos hostap.
Actualización 20051027
Hasta la fechawpasupplicantfuncionaba con el driveripw2200, aunque la conexión se perdía en ocaciones y el programa tardaba en restablecerla (cuando no se generaba un kernel panic). En estos momentos con la versión 1.0.8 del driver todo funciona a la perfección.
Para que wpasupplicant funcione debemos modificar /etc/default/wpasupplicant con las siguientes líneas:
ENABLED=1 OPTIONS="-w -i <interfaz inalámbrica> -D <driver>"
Como se puede observar hay que indicar la interfaz que debe ser monitoriza y el driver que controla la interfaz. Por defecto se utiliza hostap (el de las prism) pero se puede indicar otros valores como ipw para las Intel PRO/Wireless 2xxx (la versión 1.0.8 de la Intel PRO/Wireless 2200 utiliza el driver wext). Hay una lista de los drivers soportados en /usr/share/doc/wpasupplicant/README.gz. Una ver hecho esto iniciamos el demonio:
$ /etc/init.d/wpasupplicant start
Con esto ya queda listo nuestro sistema de configuración automática de la red. A disfrutar de la comodidad 
- blog de aplatanado
- Añadir nuevo comentario
- 15419 lecturas
- Enviar Blog entry




Te vuelvo a agradecer esta
Enviado por lagoon el 17 Agosto, 2005 - 08:56.Te vuelvo a agradecer esta clase de artículos
El nivel de detalle al que llegas nos facilita un montón la vida a otros padawanes.
Tan solo un pequeño apunte, la opción NET_AGENT_POLICY del hotplug está marcada actualmente como deprecated. Por defecto hotplug no intentará levantar ninguna interfaz a no ser que se marque como “allow-hotplug ethX” en /etc/network/interfaces.
Un bug donde se explica un poco más el tema.
Es gracioso, primero lo hago
Enviado por aplatanado el 17 Agosto, 2005 - 10:45.Es gracioso, primero lo hago funcionar con ubuntu que tiene la opción a hotplug. Después me fajo con la Debian y descubro que a partir de una versión reciente tiene un auto. Y ahora que no rula y hay un bug.
cosas de la Sid
Por lo que leo la cosa está muy justificada y es como dices. El portatil nuevo no ha pasado a sid todavía y por eso no he tenido problema. Pero ya se lo que me puedo esperar cuando lo haga.
Gracias.
—
May the Free Software Force be with you…
Bug en ipw2200 1.0.6
Enviado por aplatanado el 5 Septiembre, 2005 - 00:58.A fecha de hoy hay un bug en el módulo ipw2200 1.0.6 que no le permite operar correctamente con el wpa_supplicant.
Parece que la solución por el momento es cargar el módulo ipw2200 con la opción hwcrypto=0. Con ello se desactiva la encriptación por hardware.
Saludos.
—
May the Free Software Force be with you…
Jeje, pues mira que tenía
Enviado por lagoon el 9 Septiembre, 2005 - 15:46.Jeje, pues mira que tenía esto pendiente, mirar pq no me funcionaba bien en mi portátil. De todas formas creo que ese flag me soluciona algunas cosas pero no las que tienen que ver con wpa_supplicant. A ti te lo ha arreglado?
sip, ahora mi portatil se
Enviado por aplatanado el 12 Septiembre, 2005 - 14:15.sip, ahora mi portatil se conecta sin problemas. ¿Qué problema tienes?
—
May the Free Software Force be with you…
El caso de la Ubutu Breezy
Enviado por aplatanado el 18 Octubre, 2005 - 10:10.Ahora que la Ubuntu Breezy tiene soporte de terminales se han añadido los módulos de la tarjeta de red en el
initrd.Por tanto
hotplugya no gestiona esos módulos y no puede llamar alifplugdpara las interfaces vinculadas a los mismo. Para queifplugdfuncione con esas interfaces debemos indicarlas en la variableINTERFACESdel fichero/etc/default/ifplugd:—
May the Free Software Force be with you…