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.

