Canal WiFi 13 y 14 en Alpine Linux aka no puedo conectarme a mi router aka crda configuración

router inalámbrico

Resumen

Mientras desarrollaba un sistema de prueba embebido y de sólo lectura para una modificación del puerto WLAN de la Pi Zero W que hemos hecho para un cliente, me encontré con un problema interesante.

La Pi Zero W de repente dejó de conectarse a nuestro router.

Después de investigar un poco, logré encontrar la razón, y arreglar.

La razón: Los dominios reglamentarios de la WLAN

En diferentes países, hay diferentes "canales" (= frecuencias) de WiFi disponibles para su uso. 

La Wikipedia tiene un buen resumen:

https://en.wikipedia.org/wiki/List_of_WLAN_channels#2.4_GHz_(802.11b/g/n)

Los canales 12 y 13 de 2,4 GHz no están disponibles en Estados Unidos, pero sí en la mayoría de los demás países.

Si dejas tus dispositivos WLAN / Raspberry Pi's en la configuración por defecto, asumirán que no pueden conectarse a estos canales. No tienen forma de saber dónde están hasta que se lo digas, y por lo tanto eligen la opción segura "mundial" en su interés.

Si su router, por otro lado, está configurado en el canal 12 o 13, su Raspberry Pi Zero W (o cualquier otra Pi, incluyendo la Pi 3 B+) no podrá ver su router.

Pero no he configurado mi router para utilizar este canal

Tampoco yo. Todo funcionaba bien hasta las 4 de la mañana, cuando el router decidió de repente que quería cambiar a este canal, ya que hay menos interferencias de los vecinos.

Su router puede cambiar repentinamente, y usted se encontrará investigando un problema difícil.

¿Cómo puedo determinar si este es mi problema?

Utilice una herramienta de exploración de WLAN.

Yo uso inSSIDer para el hogar. Lamentablemente ya no parece ser gratuito, pero hay alternativas por ahí.

imagen

Como puede ver en esta captura de pantalla, nuestra red utiliza canales 13 y 9. (Porque es una red 802.11 n que utiliza la unión de canales para dos canales de 20 MHz de ancho).

El canal 13 no está disponible en los Estados Unidos, y por lo tanto no está en la Raspberry Pi por defecto.

La solución: CRDA

Tienes que instalar algunos paquetes, y configurarlos adecuadamente, para poder establecer el país WiFi.

En Raspbian, esto es muy fácil y sencillo, ya que todos los paquetes necesarios han sido preinstalados para usted.

Utilice sudo raspi-config como herramienta para establecer el país WiFi.

En Alpine Linux, es necesario trabajar un poco más. Te guiaré paso a paso en este blogpost, para compartir lo que he aprendido, y lo que me tomó cerca de un día completo de trabajo para aprender. Con suerte, usted habrá terminado en 20 minutos o menos.

Habrá más entradas en el blog sobre Alpine Linux en la Raspberry Pi, por ahora nos centramos en este problema específico de conectividad WiFi para los ciudadanos europeos.

Ejecutar como root

En el siguiente tutorial, asumo que ejecutas las operaciones como usuario raíz.

Si no eres root, conviértete en root según corresponda.

Una nota sobre el sistema de archivos sólo en RAM de Alpine

Alpine Linux tiene la gran ventaja de poder ejecutarse completamente de sólo lectura desde su tarjeta SD. Esto significa, por ejemplo, que puedes desconectar la Raspberry Pi durante su funcionamiento sin corromper el sistema de archivos.

Por supuesto, debe existir la posibilidad de aplicar sus cambios al sistema base durante el desarrollo.

El comando es:

lbu commit -d

Importante: lbu commit podría necesitar para que se configure para guardar subdirectorios específicos que se modifican (utilizando lbu include - consulte el enlace de abajo para más detalles).

Consulte la siguiente página para obtener más detalles:

Configurar los repositorios

nota: por defecto sólo está instalado vi en Alpine Linux. Si quieres añadir nano, utiliza el siguiente comando:

apk añadir nano

Edita los repositorios (cambia vi por nano si lo tienes instalado):

vi /etc/apk/repositorios

Añade / sustituye lo siguiente (lee el comentario al final para más información):

/media/mmcblk0p1/apks
http://dl-3.alpinelinux.org/alpine/edge/testing

http://dl-3.alpinelinux.org/alpine/edge/main

http://dl-3.alpinelinux.org/alpine/edge/community

Los tres repositorios de borde son necesarios, ya que diferentes paquetes residen en diferentes repositorios.

Instalar los paquetes necesarios

Ejecute el siguiente comando:

apk add wireless-regdb crda iw

Explicación:

  • wireless-regdb contiene los binarios de la base de datos de regulación inalámbrica.
  • crda es la herramienta de espacio de usuario que actualiza la información reglamentaria para el kernel
  • iw son utilidades de configuración inalámbrica, que utilizará para establecer el dominio normativo (país)

Comprobar el dominio reglamentario actual

Corre:

iw reg get

Esto mostrará el dominio actual (probablemente el país 00: DFS-UNSET). Aquí hay una captura de pantalla de lo que estamos buscando (en nuestro caso DE para Alemania):

imagen

Editar las reglas de mdev

A continuación, la posición de la nueva entrada es muy importante: debe estar en la parte superior, justo antes de la línea $MODALIAS. De lo contrario, ¡no funcionará!

vi /etc/mdev.conf

inserte la siguiente línea nueva justo antes de la línea $MODALIAS:

$COUNTRY=. root:root 0660 */sbin/crda

Aquí hay una captura de pantalla del archivo editado:

imagen

Referencia:

Crear una nueva entrada en modprobe.d

Corre:

tocar /etc/modprobe.d/cfg80211.conf

vi /etc/modprobe.d/cfg80211.conf

Inserte la siguiente línea (si es necesario, ajuste la DE a su país - código de dos letras):

opciones cfg80211 ieee80211_regdom=DE

Guarda el archivo.

Este archivo asegurará que su dominio regulador se aplique correctamente al arrancar.

Referencia:

Alternativa: iw

Alternativamente, se puede establecer el dominio regulador mediante iw (¿podría ser necesario además de lo anterior? Sin embargo, mi prueba muestra que esto no se pega).

iw reg set DE

Aquí tienes una captura de pantalla:

imagen

Finalizar

Ejecutar (si es necesario):

lbu commit -d

Reinicie. Su Pi Zero W debería ahora ser capaz de conectarse al canal 12 y al canal 13.

Una nota sobre la crda

crda es no se supone que debe ser ejecutado por usted, el usuario. Se ejecuta como una aplicación de ayuda por iw.

A continuación, un burdo truco que "podría" funcionar al depurar. A veces funciona. Rara vez, en realidad.

iw reg set DE ; COUNTRY=DE /sbin/crda

A menudo me fallaba con la siguiente salida:

fallo en la fijación del dominio regulador -22

Incluso ahora, después de que puedo establecer el país correctamente, este comando falla la mayoría de las veces... Supongo que se debe a condiciones de carrera.

Según tengo entendido, iw establece ciertas variables de entorno, que a su vez hacen que mdev ejecute /sbin/crda, para enviar estos cambios al kernel.

iw no es la única herramienta que puede cambiar el dominio regulatorio del kernel; se supone que wpa-supplicant también puede hacerlo.

Y, como has visto, cfg80211.conf también es capaz de hacerlo.

El archivo regulatory.bin se instala en /usr/lib/crda.

NO necesita el paquete crda-dev para la solución descrita en esta entrada del blog.

Una nota sobre el archivo del repositorio

Si elimina / comenta las fuentes del repositorio que se añadieron al principio, los paquetes "desaparecen" de su sistema.

Tendré que investigarlo más a fondo, ya que acabo de empezar a trabajar con Alpine Linux.

Por ahora, no elimine las líneas de repositorio de los paquetes que ha instalado en su sistema.