Si algo tiene de malo Linux es la multiplicidad de comandos para hacer una determinada cosa, lo que lleva a una crónica falta de estandarización. La red inalámbrica es quizá el mejor de los ejemplos. Y más en una distribución compilada específicamente para los procesadores ARM que usa la familia Orange Pi, donde no se ha puesto mucho cuidado en facilitar las cosas ni en crear estrategias comunes.

En este artículo veremos como configurar la red wifi usando todas las herramientas a nuestra mano.

¿Qué «Wifi USB dongle» usar?

Ralink RT5730

Bien sabido es que la Orange Pi Lite viene con su propio chip wifi: el Realtek RTL8189FTV. Mi experiencia con él ha sido más bien desastrosa. En algunos casos me ha funcionado, en otros no conecta o lo hace aleatoriamente y en otros simplemente bloquea todo el sistema cuando en el arranque intenta levantar el interface.

Supongo que será por problema de alimentación, porque cuando el sistema se cae la placa está especialmente caliente.

Un chip muy bueno y muy barato es el Ralink RT5730 y además está soportado en Linux. Permite AP mode con un gran número de clientes, consume poco, es estable y es muy pequeño.

Otra opción es adquirir una Orange Pi sin Wifi, pero sale más caro.

Configurar la red desde armbian-config

La forma más cómoda y rápida es utilizar el script clónico de raspi-config en las Orange Pi, pero a la fecha de escribir este artículo el script se encuentra en una fase beta.

armbian-config

No es recomendable usar el script porque suele dar problemas a la hora de levantar el interface de red o de escanear las redes del entorno, posiblemente por problemas con el módulo del kernel para el driver de chip wifi que lleva incorporada la Orange Pi.

Configurar la red desde Network-manager

Desde el script armbian-config podemos conectarnos a una red wifi de manera persistente tras desbloquear el interface. No obstante, y a título ilustrativo, también podemos hacerlo desde la línea de comandos, utilizando para ello el demonio Network-manager, encargado de gestionar las conexiones de red en muchas distribuciones de Linux. Realmente el script armbian-config simplemente modifica los archivos de configuración de Network-manager.

Network-manager es en sí mismo el demonio network-manager, que se puede arrancar, reiniciar o parar con:

/etc/init.d/network-manager

El demonio busca la configuración en el archivo /etc/network/interfaces, donde está la configuración de cada dispositivo. Aquí vemos una configuración de ejemplo para la red wifi con IP fija:

vim /etc/network/interfaces

# armbian-config created
source /etc/network/interfaces.d/*
allow-hotplug wlan0
no-auto-down wlan0
iface wlan0 inet static
   address 192.168.1.103
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8
   wpa-conf /etc/wpa_supplicant.conf

En amarillo la orden para conectar a la red wifi y que echa mano del demonio wpa_supplicant. Estas órdenes no son nativas de Network-manager, siendo importadas del primero. Realmente no hay garantías de que funcionen.

A título informativo apuntaremos que las últimas distribuciones de Debian vienen con la posibilidad de conectarnos a la wifi desde el propio archivo de configuración de Network-manager:

vim /etc/network/interfaces

# armbian-config created
source /etc/network/interfaces.d/*
allow-hotplug wlan0
no-auto-down wlan0
iface wlan0 inet static
   address 192.168.1.103
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8
   wireless-essid [ESSID]
   wireless-mode [MODE]

Pero nada de esto está garantizado en Armbian. En nuestra distribución tenemos en teoría varios ficheros de configuración de ejemplo que podemos mirar.

/etc/network/interfaces.bonding
/etc/network/interfaces.default
/etc/network/interfaces.hostapd
/etc/network/interfaces.network-manager
/etc/network/interfaces.r1
/etc/network/interfaces.r1switch

Configurar la red desde la linea de comandos (network-manager)

Network-manager utiliza dos programas de línea de comandos para ayudar en la configuración e incluso para conectarnos a redes: nmtui nmcli. Obviamente además hay toda una pléyade de front-ends gráficos para cada escritorio, pero esos no nos interesan ahora.

nmtui es realmente un script de menús para configurar nuestras conexiones. En realidad, cuando ejecutamos el script armbian-config y entramos en la configuración de red, se llama a nmtui. El proceso vendría a ser primero añadir una conexión y activarla después.

nmcli es una utilidad de línea de comandos mucho más potente, creada con objeto de conectarnos bajo demanda a cualquier red.

Para listar las redes en nuestro rango:

nmcli dev wifi list

Y para conectarnos a cualquiera:

nmcli dev wifi connect SSID password ContraseñaEnAbierto

Con esto ya tendríamos lista nuestra conexión wifi en Orange Pi.

Configurar la red desde la linea de comandos (método ortodoxo)

Si prescindimos de los automatismos anteriores podemos personalizar mejor el inicio y configuración de la red, adaptándola mejor a dispositivos pequeños como la Orange Pi. Además, en esta placa, estos automatismos no siempre funcionan como debieran, dado el escaso soporte que hay detrás de ellas.

Creación de los interfaces de red (Ralink Rt5370)

En Linux los interfaces de red se crean automáticamente una vez cargado el módulo del kernel correspondiente a la tarjeta wifi. El nombre de la interface de red vendrá determinado por las reglas del gestor de dispositivos udev.

La Orange Pi Lite viene con la tarjeta wifi incorporada, la RTL8189FTV, que deberá tener asignado el interface wlan0. Este chip me ha dado múltiples problemas de configuración y estabilidad, por lo que el que quiera puede prescindir de ella descargando su módulo de memoria con rmmod. El interface wlan0 desaparecerá.

Yo he probado otro interface de red wifi conectada por USB: una Ralink Rt5370 de reconocido prestigio.

Al conectarla el kernel la reconoce y carga el módulo correspondiente (rt2x00lib) sin hacer nada más, creando a su vez una nueva interface de red de nombre indescriptible (wlx0013efb01b28 en mi caso). Si estamos interesados en ello, podemos cambiar el nombre a este interface siguiendo estas instrucciones: https://geekland.eu/cambiar-nombre-interfaz-de-red-linux/

Capa de enlace: wpa_supplicant

Para redes wifi sin autentificación o con autentificación WEP podemos usar el comando iw. Pero lo más normal es que queramos conectarnos a una red con autentificación WPA, por lo que seguro que tendremos que utilizar el wpa_supplicant.

Antes podemos escanear las redes a nuestro alcance con:

iwlist wlan0 scanning

Después generaremos un fichero de configuración para wpa_supplicant:

wpa_passphrase "SSID" "contraseña" > /root/wifi.conf

Que quedará así:

network={
        ssid="SSID"
        #psk="contraseña"
        psk=hashContraseña+SSID
}

Luego lanzamos el demonio que negociará con nuestro punto de acceso wifi la unión a la red:

killall wpa_supplicant # mata cualquier instancia anterior
wpa_supplicant -B -i wlan0 -c /root/wifi.conf -D nl80211

La opción -B se asegura que la orden sea ejecutada como demonio, devolviendo el control a la linea de comandos. Wpa_supplicant se quedará ejecutándose como un proceso durante toda la sesión.

La opción -D le pasa el nombre del controlador a utilizar. En Orange Pi es obligatorio pasarle nl80211, el wext está obsoleto y no funcionará.

Podemos comprobar si estamos conectados a una red wifi con:

iw wlan0 link

Capa de red y transporte

En este punto estaremos conectados a la red wifi (capa de enlace) pero no tendremos nada en la capa de red. Hay que configurar la IP y las rutas.

Tanto la IP como los DNS y las routas pueden ser configurados por DHCP así:

dhcpcd wlan0

Pero si queremos configurar todo a mano e incluso asignar una IP estática a nuestra wifi:

# Configuracmos la IP estática
ifconfig wlan0 192.168.1.105

# Añadimos la puerta de enlace
route add default gw 192.168.1.1

# Añadimos los DNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf 
echo "nameserver 8.8.4.4" >> /etc/resolv.conf