Modos de Operación en wpasupplicant para Debian

Debido a la complejidad de la ley, sidux solamente proveerá software dfsg-free en el liveCD, por favor verifica este enlace para información adicional sobre fuentes no-libres de firmware

El paquete Debian wpasupplicant provee dos (2) modos convenientes de funcionamiento que están bien integrado al núcleo de la infraestructura de la red; "ifupdown".

¿Qué esta cubierto?

1. Especificando el administrador del driver wpasupplicant

* Tabla de drivers (Drivers) apoyados
* Recomendaciones Común de Drivers

2. Mode #1: Managed Mode

* Examples
* Table of Common Options
* Important Notes About Managed Mode
* How It Works

3. Modo #2: Modo Roaming

* wpa_supplicant.conf
* /etc/network/interfaces
* Controlling the Roaming Daemon with wpa_action
* Fine Tuning the Roaming Setup
* The Logfile
* Using External Mapping Scripts (e.g. guessnet)
* /etc/network/interfaces with external mapping

4. Búsqueda de averías

* ssids escondido

5. Consideraciones de seguridad

* Configuración de permiso de archivos

1. Especificando el administrador del driver wpasupplicant

El driver administrador wext, será usado para todo tipo de interfaz que no explícitamente configura el 'wpa-driver' como el tipo de driver requerido para este driver. Usuarios de Linux kernels 2.4 ó 2.6, menor que el 2.6.14 sera requerido de especificar un tipo de driver-wpa.

Tabla de drivers apoyados

Driver Descripción
wext Linux extensiones inalámbrica (genérica)

Recomendaciones de drivers comunes

El adaptador Intel Pro Inalámbrico (ipw2100, ipw2200 y ipw3945) todos usa el administrador 'wext', a menos que el kernel es mayor que el 2.6.14

Madwifi apoya tanto los drivers 'wext' y 'madwifi' administrador. 'wext' es preferido, sin embardo, 'madwifi' puede funciona mejor en algunas circunstancias.

Ndiswrapper YA NO SOPORTA el driver administrador 'ndiswrapper' desde la versión 1.16. Entonces, 'wext' tiene que ser usado a meno que usas una versión antigua de ndiswrapper.

Fija el tipo del driver en la estrofa interfaces(5) para su dispositivo con la opción 'wpa-driver'. Por ejemplo:

iface eth0 inet dhcp
	wpa-driver wext
	. . . . . Más opciones

2. Modo #1: Modo Administrado

Este modo provee la habilidad de establecer una conexión a través del wpa_supplicant a un red conocido. Funciona similarmente como una paquete de herramienta inalámbrica. Cada elemento requerido para establecer una conexión via wpa_supplicant es prefijado con 'wpa-' y seguido por el valor que sera utilizado para este elemento.

Ejemplo de un wpa.conf file de Modo #1 - Ejemplo 1.
Ejemplo de un wpa.conf file de Modo #1  - Ejemplo 1.
NOTA: el valor 'wpa-psk' es solamente valido si:

   1. Es una cadena de texto (ascii) entre 8 y 63 caracteres en largo
   2. Si es una cadena hexadecimal de 64 caracteres.

# Conecta a la punto de acceso del ssid 'NETBEER' con un tipo de encriptación de
# WPA-PSK/WPA2-PSK. Asume que el driver usará el trasera del driver 'wext'
# de wpa_supplicant porque ningún opción del driver-wpa ha sido especificado.
# El pase (passphrase) es dado como una cadena de texto ASCII. Se usa DHCP para
# obtener una dirección de red.
#
iface wlan0 inet dhcp

        wpa-ssid NETBEER
        # pase (passphrase) en texto puro
        wpa-psk Secreto_Texto_Puro

# Conecta a un punto de acceso de ssid 'homezone' con un tipo de encartación
# EPA-PSI/EPA2-PSI, utilizando el driver trasera del 'ext' del epa_supleción.
# El psi es dado como una cadena encarpetado en hexadecimal. Se usa DHCP para
# obtener una dirección de red.
#
afiche Wlan0 net DHCP
        epa-driver ext
        epa-sid comezón
        # El psi en hexadecimal es encarpetado de un pase (passphrase) en texto ASCII.
        wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

# Conecta a un punto de acceso de ssid 'HotSpot1' y bssid del '00:1a:2b:3c:4d:5e'
# con un tipo de encriptación de WPA-PSK/WPA2-PSK, utilizando el driver 'madwifi'
# como trasera del wpa_supplicant. El pase (passphrase) es dado como una cadena en puro texto.
# Una dirección estático de red esta utilizado.
#
iface ath0 inet static

        wpa-driver madwifi
        wpa-ssid HotSpot1
        wpa-bssid 00:1a:2b:3c:4d:5e
        # pase (passphrase) en texto puro
        wpa-psk madhotspot
        wpa-key-mgmt WPA-PSK
        wpa-pairwise TKIP CCMP
        wpa-group TKIP CCMP
        wpa-proto WPA RSN
        # configuraciones estático de ip
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

# Suministrado por el usuario, wpa_supplicant.conf esta usado por eth1. Todo información
# esta contenido dentro del wpa_supplicant.conf suministrado por el usuario.
Ningún tipo de wpa-driver # es especificado, entonces el wext es utilizado.
Se usa DHCP para obtener una dirección de red.
#
iface eth1 inet dhcp
wpa-conf /path/to/wpa_supplicant.conf

Tabla de opciones comúnes

Un breve resumen de opciones 'wpa-' comunes, que puede ser utilizado en la estrofa de /etc/network/interfaces para un dispositivo inalámbrico. Ver la sección de los 'Notas Importantes acerca del Modo Gerenciada para información acerca de valores valido y invalido de 'wpa-'.

NOTA: TODOS los valores distinguen entre mayúsculas y minúsculas; están "SeNsIBle a maYUScula"

Elemento        Valor Ejemplo          Descripción
=======         =============          ===========
wpa-ssid	plaintextstring        fjia el ssid de su red
wpa-bssid	00:1a:2b:3c:4d:5e      el bssid de su AP
wpa-psk           0123456789......     su clave pre-definido wpa. Usa:
                                       wpa_passphrase(8) para generar su psk
                                       de una phrase (passphrase) y pareja ssid
wpa-key-mgmt  NONE, WPA-PSK, WPA-EAP, lista de claves autenticados y aceptados
                IEEE8021X              protocolos de manejar
wpa-group    CCMP, TKIP, WEP104,     lista de cifras de grupo aceptado para WPA, WEP40
wpa-pairwise    CCMP, TKIP, NONE        lista de cifras de pares aceptados para WPA
wpa-auth-alg    OPEN, SHARED, LEAP      lista de algoritmos permitido por IEEE 802.11
wpa-proto       WPA, RSN                lista de protocolos aceptados
wpa-identity    myplaintextname         claves de usuario provisto por el administrador
          	(EAP authentication)
wpa-password    myplaintextpassword     clave personal (autenticación EAP)
wpa-scan-ssid   0 or 1                  Conmutar el escaneo de ssid con marcos especifica de Probe Request
wpa-ap-scan     0 or 1 or 2             ajusta la lógica de escaneo de 
					wpa_supplicant





La completa funcionalidad del wpa_cli(8) debe ser implementado. Cualquier cosa que falta se considera un error y debe ser reportado como tal. Parches siempre están bien recibidos.

Notas Importantes acerca del Modo Gerenciado

Casi todos los opciones de 'wpa-' requiere que por lo menos hay una ssid especificado. Solamente unas pocos opciones tiene un efecto global. Estos son: 'wpa-ap-scan' y 'wpa-preauthenticate'.

Cualquier opción 'wpa-' dado por una dispositivo en el archivo interfaces(5) es suficiente de llamar en acción el wpa_supplicant daemon.

El script ifupdown de wpasupplicant hace un suposición acerca de tipo de entrada que es valido para cada opción. Por ejemplo, el asume que algunas entradas están en texto puro y lo encero con comillas antes de pasarlo a wpa_cli, lo cual agregue la entrada al bloque de la red siendo formado via el socket wpa_supplicant ctrl_interfaz.

Ejecutando el ifup manualmente con la opción '--verbose' se muestra todos los comandos utilizados para formar el bloque de la red via wpa_cli. Si el valor que pusiste para cualquier opción wpa-* en /etc/network/interfaces es encerrado por comillas dobles, entonces las entradas están asumidos de ser de puro texto o de tipo "ascii".

Algunas entradas están asumido de ser una cadena en hexadecimal (por ejemplo, wpa-wep-key*). Sin embargo, el tipo de valor del opción wpa-psk es determinado a través de un simple verificación para más de una carácter que no es hexadecimal.

Como funciona

Como mencionarán, cada elemento especifico de wpa_supplicant se prefija con 'wpa-'. Cada elemento esta correlacionado a un propiedad de wpa_supplicant como descrito en los páginas man de wpa_supplicant.conf(5), wpa_supplicant(8) y wpa_cli(8).

El supplicant esta lanzada sin cualquier pre-configuración, y el wpa_cli se forma una configuración en red desde la entrada proviso por los líneas de 'wpa-*'. Inicialmente, el wpa_supplicant/wpa_cli no se fija directamente las propiedades del dispositivo (como especificar un essid con iwconfig, por ejemplo), sino se informa el dispositivo de cuales puntos de accesos son apropiado con que asociar. Una vez que el dispositivo ha escaneado la área, y encontrado que el punto apropiado de acceso está disponible para su uso, estos propiedades están fijados.

El script que hace todo el trabajo está ubicado en:

/etc/wpa_supplicant/ifupdown.sh
/etc/wpa_supplicant/functions.sh

ifupdown.sh este está ejecutado por run-parts, lo cual, a su vez, es invocado por ifupdown durante los fases 'pre-up', 'pre-down' y 'post-down'.

En el fase 'pre-up', un daemon de wpa_supplicant es lanzado, seguido por una series de comandos wpa_cli que configura una red según los opciones 'wpa-' estaban utilizados en /etc/network/interfaces para el dispositivo físico.

Si el wpa-roam esta utilizado, un daemon de wpa_cli esta lanzada en el fase 'post-up'.

En el fase 'pre-down', el daemon wpa_cli esta terminado, si está activo.

En el fase 'post-down', el daemon wpa_supplicant daemon está terminado, esta terminada.

3. Modo #2: Modo Roaming

Un mecanismo roaming, auto suficiente y sencillo esta provisto por este paquete. Esta en la forma de un script de acción wpa_cli, /sbin/wpa_action, y se asuma el control de ifupdown una vez activado. El página man wpa_action(8) describe los detallas técnicas muy a fondo.

Para activar un interfaz roaming, adapta el siguiente estrofa como ejemplo del interfaces(5):

iface eth1 inet manual
	wpa-driver wext
        wpa-roam /path/to/wpa_supplicant.conf

Dos daemones están creado del ejemplo arriba wpa_supplicant y wpa_cli. Es una requerimiento de proveer el wpa_supplicant.conf. Un buen punto de comienzo está suministrado por el archivo ejemplo de configuración:

 # copy the template to /etc/wpa_supplicant/
        cp /usr/share/doc/wpasupplicant/examples/wpa-roam.conf \
                /etc/wpa_supplicant/wpa_supplicant.conf
        # allow only root to read and write to file
        chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf

NOTE: it is critical that the used wpa_supplicant.conf defines the location of
      the 'ctrl_interface' so that a communication socket is created for the 
      wpa_cli (wpa-roam daemon) to attach. The mentioned example configuration,
      /usr/share/doc/wpasupplicant/examples/wpa-roam.conf, has been set to a
      sane default.

Es requerido editar esta archivo de configuración, y agregue los bloques de redes para todos los redes conocidos. Si no entiende lo que esta significa, empezar ahora leyendo la página man wpa_supplicant.conf(5).

Para cada red, puede especificar una opción especial, 'id_str'. Este debe ser una sencilla cadena de texto. Este cadena de texto forma la bases para perfilar la red; se correlaciona al interfaz lógica definido en el archivo interfaces(5). Cuando ningún 'id_str' es dado por un red, wpa_action asume que debe usar el interfaz lógica pre-seleccionada en su lugar. El interfaz pre-seleccionada puede ser escogida a través de la opción 'wpa-default-iface'.

¿Entonces qué quiere decir todo esto? Vamos a ilustrar con una pequeño ejemplo tomado de la página man de wpa_action(8).

wpa_supplicant.conf ejemplo
wpa_supplicant.conf example:
network={
        ssid="foo"
        key_mgmt=NONE
        # this id_str will notify /sbin/wpa_action to 'ifup uni'
        id_str="uni"
}

network={
        ssid="bar"
        psk=123456789...
        # this id_str will notify /sbin/wpa_action to 'ifup home_static'
        id_str="home_static"
}

network={
        ssid=""
        key_mgmt=NONE
        # no 'id_str' parameter is given, /sbin/wpa_action will 'ifup default'
}
/etc/network/interfaces ejemplo
/etc/network/interfaces ejemplo:
# el interfaz roaming TIENE que usar el método manual de inet
# 'allow-hotplug' o 'auto' asegura que el daemon arranca automáticamente
allow-hotplug eth1
iface eth1 inet manual

        wpa-driver wext
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf


# si no id_str, el 'default' es utilizado como el blanco de mapping pre-seleccionada
iface default inet dhcp


# id_str="uni"
iface uni inet dhcp

# id_str="home_static"
iface home_static inet static

        address 192.168.0.20
        netmask 255.255.255.0
        network 192.168.0.0

        broadcast 192.168.0.255
        gateway 192.168.0.1

Un interfaz lógica es arrancada por via ifup, y bajado por ifdown, mientras el wpa_supplicant asocia y desasocia con el red asociado a el por la opción 'id_str' utilizado en el archivo de configuración wpa_supplicant.conf.

Un registro de acciones de /sbin/wpa_action's actions es creado en /var/log/wpa_action.log, por favor anexa ese registro cuando reporta algún problema.

Interacting with wpa_supplicant with wpa_cli and wpa_gui

The wpa_supplicant process can be interacted with by members of the "netdev" group if the example roaming configuration was used as is (or by whatever group or gid specified by the GROUP= crtl_interface parameter).

# the default ctrl_interface option used in the example file
	# /usr/share/doc/wpasupplicant/examples/wpa-roam.conf
        ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

To interact with the supplicant, the wpa_cli (command line) and wpa_gui (QT)
have been provided. With these you may connect, disconnect, add/delete new
network blocks, provide required interactive security information and so on.

Controlando el Daemon Roaming con wpa_action

Una vez comenzada el daemon roaming, el asuma control de ifupdown. Eso es; wpa_cli llama a ifup cuando el wpa_supplicant ha asociado exitosamente con un punto de acceso, y llamas a ifdown cuando la conexión esta perdido o terminado. Mientras el daemon roaming es activo, ifupdown no debe ser controlado directamente por comandos manuales, sino, el /sbin/wpa_action esta provisto para para y recargar el daemon roaming. Por ejemplo, para parar el daemon roaming en el dispositivo 'eth1':

wpa_action eth1 stop

Cuando esta requerido de actualizar el daemon roaming con nuevas detallas sobre la red, esté puede ser realizado sin pararlo. Editar el archivo wpa_supplicant.conf que esta siendo utilizado por el daemon con las nuevas detallas del red, agregue configuraciones opcionales a /etc/network/interfaces que están especifica a la nueva red (enlazada por 'id_str') y entonces, recargar (reload) el daemon así:

wpa_action eth1 reload

Para detalles técnicas completas de lo que el wpa_action puede hacer, lee la página man de wpa_action(8).

Afinando la configuración Roaming

Puede encontrar situaciones donde puntos múltiples de acceso están en proximidad cercana. Puede escoger cual esta preferido, manualmente, con el wpa_cli o wpa_gui, o puede dará a cada red su prioridad. Este es provisto con la opción 'prioridad' de wpa_supplicant.conf.

El afiche del registro

Todo actividad del daemon roaming es recordado en el /var/log/wpa_action.log. Lo siguiente información esta registrado:

*hora y fecha
* nombre del interfaz y el evento de acción
*valores de variables del ambiente (WPA_ID, WPA_ID_STR, WPA_CTRL_DIR)
*si el ifupdown comando fue ejecutado
*estatus del wpa_cli (basado en WPA-PSK, red puede mostrar info. diferente)
*bssid
*ssid
*id
*id_str
*pairwise_cipher
*group_cipher
*key_mgmt
*wpa_state
*ip_address

Usando los scripts de Mapping External (por ejemplo, guessnet)

En adición al mapeo interno de interfaces lógicas via el 'id_str', el wpa_action puede llamar scripts externo de mapeo. Un script de mapeo debe regresar el nombre del interfaz lógica que debe ser levantada. Cualquier script de mapeo que funciona desde el mecanismo de mapeo ifupdowns (ver páginas man interfaces) debe también funcionar cuando llamado desde el wpa_action.

Para llamar un script de mapeo agregue una línea al 'wpa-mapping-script name-of-the-script' a la estrofa de interfaces del dispositivo físico de roaming. (Puede que tener que especificar la ruta absoluta al script de mapeo.)

La contenido de las líneas empezando con wpa-map están pasado al stdin del script de mapeo. En vista de que el ifupdown sólo permite una línea de wpa-map, puede adjuntar cualquier número a wpa-map para líneas adicionales. Por ejemplo:

iface wlan0 inet manual
        wpa-driver wext
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
        wpa-mapping-script guessnet-ifupdown
        wpa-map0 home
        wpa-map1 work
        wpa-map2 school
        # ... adicional líneas wpa-mapX según requerimiento

Por pre-selección, el script de mapeo será sólo utilizado cuando ningún 'id_str' es disponible para la red corriente. Si deseas desactivar completamente el pre-seleccionado de 'id_str', y utilizar solamente un script externo de mapeo, utilizar la opción 'wpa-mapping-script-priority 1' para anular el comportamiento pre-seleccionado.

Si el script de mapeo regresa una cadena vació el wpa_action recurrió al interfaz 'default' (preseleccionada), a menos que hay una alternativa definida por la opción 'wpa-roam-default-iface'.

Por debajo hay un ejemplo más avanzada, utilizando el guessnet-ifupdown como el script externo de mapeo.

/etc/network/interfaces con ejemplo de mapeo externo
/etc/network/interfaces con ejemplo de mapeo externo:
allow-hotplug wlan0
iface wlan0 inet manual

        wpa-driver wext
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
        wpa-roam-default-iface default-wparoam
        wpa-mapping-script guessnet-ifupdown
        wpa-map default: default-guessnet
        wpa-map0 home_static
        wpa-map1 work_static


# school solamente puede ser escogido via un igual, 'id_str':
iface school inet dhcp

        # resolvconf
        dns-nameservers 11.22.33.44 55.66.77.88

iface home_static inet static

        address 192.168.0.20
        netmask 255.255.255.0

        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        test peer address 192.168.0.1 mac 00:01:02:03:04:05


iface work_static inet static

        address 192.168.3.200
        netmask 255.255.255.0
        network 192.168.3.0
        broadcast 192.168.3.255

        gateway 192.168.3.1
        test peer address 192.168.3.1 mac 00:01:02:03:04:05

iface default-guessnet inet dhcp

iface default-wparoam inet dhcp

En este ejemplo el wpa_action utilizará el guessnet para la selección de un interfaz lógica apropiada solamente cuando ningún opción 'id_str' ha sido provisto para la red corriente en el wpa_supplicant.conf suministrado.

Los líneas 'wpa-map' provea a guessnet con el interfaz lógica que es de ser probado tanto como el interfaz pre-seleccionada que será utilizada cuando todas las pruebas fallan. Los líneas 'test' de cada interfaz lógica están utilizado para determinar si estamos actualmente conectado a esa red. Por ejemplo, el guessnet escoja el interfaz lógica 'home_static' si existe un dispositivo con una dirección IP de 192.168.0.1 y un MAC de 00:01:02:03:04:05 en la red corriente. Si todos las pruebas fallan, el interfaz 'default-guessnet' será configurado.

Por favor, lea la página man de guessnet(8) para más información.

4. Búsqueda de averías

Para depurar problemas de conexión, asociación y autenticación, sugerimos iniciar el `wpa_cli -i <interface>` en una consola diferente, antes de iniciar el interfaz. Usa el nivel '0' de comando primero, para recibir todos los mensajes de depuración. Entonces, usa `ifup --verbose <interface>` para recibir mensajes más completos del script que inicio el wpasupplicant.

* ssids escondido

Para referencia, ver #358137. Para poder asociar los ssids escondidos, por favor intenta fijar la opción 'ap_scan=1' en la sección global, y 'scan_ssid=1' en la sección del bloque de red (network block) sección del archivo de configuración de wpa_supplicant.conf. Si están utilizando el modo gerenciado, puedo realizarlo con estas estrofas:

iface eth1 inet dhcp
wpa-conf managed
wpa-ap-scan 1
wpa-scan-ssid 1
# ... opciones adicionales para configuraciones

Según el #368770, asociación puede llevar un largo tiempo para asociar a redes seguro WEP. En algunas casos, fijando el parámetro 'ap_scan=2' en el archivo de configuración, (o utilizando una estrofa 'wpa-ap-scan 2', que es lo equivalente) puede ayudar mucho en acelerar el asociación.

Please note that setting ap_scan to the value of 2 also requires that all networks have a precisely defined security policy for for key_mgmt, pairwise, group and proto network policy variables.

5. Consideraciones de seguridad

Permisos de archivos de configuración

Es importante mantener privado los PSK's y otra información sensible acerca de los configuraciones privado de su red, entonces, asegurar que todos los archivos de configuraciones, que contiene datos importantes, están leíbles solamente para su dueño. Por ejemplo:

chmod 0600 /etc/network/interfaces
# sustituir la ruta de su archivo wpa_supplicant.conf
chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf

Por pre-selección, /etc/network/interfaces es leíble por todo el mundo, y así no es apropiado para contener claves secretos y pases.

Page last revised Content last revised 30/04/2008 1100 UTC