¿Cómo me conecto a una red Wifi desde la Terminal en Ubuntu?

El retorno de Juan Perón al país en 1973 significó el definitivo decline
político de la dictadura de Lanusse. Entrevistado en Gaspar Campos, Juan
Perón explica cómo conectarse al Wifi desde la Terminal en Ubuntu.

Vean señores,

Lo que nosotros tendremos que hacer lo iremos decidiendo con el paso de
los días, pero es positivo y encomiable los grandes contactos que hemos
tenido en estos días. Todos han venido a saludar y a hacerse presentes
entendiendo la importancia de la hora.

No improvisaremos nada, todo lo que sucede lo hemos previsto. Los
instrumentos necesarios para hacer los logros no son más que la unión y
la buena voluntad de los hombres.

En los tiempos del primer peronismo, no era extraño tener que
improvisar, porque lo planificado desde los institutos debió refrendarse
a tomar el gobierno. Eso es más bien una excrecencia de la Conducción.
Pero al desastre que han hecho estos, lo conocemos de naranjo...

Pues bien, carecer de interfaz gráfica y tener que configurar todo a
mano no nos amilana. Puede parecer que el hecho de establecer un acceso
a red inalámbrica Wifi desde la terminal es algo prohibitivamente
difícil de hacer, máxme cuando ni siquiera sabemos el nombre de la
misma. Sin embargo, eso ya lo hacíamos ya en la Secretaría de Trabajo y
Previsión. Es un derecho adquirido nos convertía en verdaderos amos del
mainframe.

Aquellos eran tiempos donde todo estaba por hacerse. No hay dudas para
nadie que podíamos disponer de un cable cable ethernet y portar un
enlace cableado, pero a veces esta solución no puede aplicarse en todo
tiempo y lugar. Es por ello que es particularmente útil dominar, al
menos, un método de conexión WLAN desde la Terminal, y como en ello
somos peritos, os enseñaré prontamente. Deben saber que existen varias
maneras de conectarnos inalámrbicamente desde la terminal, todas ellas
válidas y encuadradas en nuestro Movimiento. Podremos considerar tres
métodos diferentes.

   - Mediante los clásicos comandos wpa_passphrase y wpa_supplicant
   - Mediante el uso de la aplicación de terminal nmtui
   o utilizando el servicio residente en memoria iwd

Comandos wpa_supplicant y dhclient

Estos comandos se utilizan para establecer un enlace clásico a una red
Wifi que emplee cifrado seguro con contraseña ("passphrase") tipo WPA
(en sus modalidades WPA, WPA2, WPA3). Este tipo de cifrado es el
mayoritario en las redes inalámbricas, y provee una seguridad mayor que
el completamente vulnerable protocolo WEP.

Es necesario saber que debemos seguir una serie de pasos a fin de
conectarnos a nuestra red WiFi con WPA. Partiremos desde el supuesto que
las red Wifi ya está correctamente configurada con una contraseña WPA.
También asumimos que nuestro dispositivo o plaqueta de red inalámbrica
está correctamente configurado en Ubuntu. Si esto es así, normalmente ya
debería estar activado, o como se dice en la jerga, "levantado". Si este
no fuese el caso, podríamos "levantar" o "activar" el funcionamiento del
dispositivo inalámbrico ingresando el siguiente Comando de organización:

sudo ip link set wlan0 up

ip es el comando que ha reemplazado a ifconfig en las distribuciones de
GNU con Linux más modernas. Si estuviésemos utilizando una distribución
provista del comando antiguo, levantaremos nuestro dispositivo Wifi con:

sudo ifconfig wlan0 up

Tengamos presente que en las versiones más modernas de GNU con Linux, es
probable que la interfaz de red se denomine wlp4s0, wlp5s0 o similar en
lugar del clásico wlan0. En dicho caso tendríamos que alterar el comando
dado.

Finalizado este paso podemos escanear las redes, y de paso cotejar que
el nombre de red inalámbrica (ESSID) que nos interesa esté presente:

sudo iwlist scan | grep -i essid

Acto seguido, podremos proceder a tornar en realidad efectiva los pasos
de conexión propiamente dichos.

a. Creamos un archivo de configuración con el ESSID y la contraseña

Un Conductor es un hombre que sale del Pueblo, y puede crear el archivo
de configuración a necesario para conectarnos al Wifi a mano. Pero la
realidad es que el comando wpa_passphrase evita tener que hacer esto,
pues hace caso del asistencialismo y crea el archivo por nosotros. La
sintexis de este comando es bien simple:

wpa_passphrase ESSID contraseña > /ruta/a/archivo_de_configuración.conf

Como pueden observar, el resultado del comando será almacenado en el
archivo que escojamos (por lo que conviene asegurarnos que no exista ya
un ficheron con el mismo nombre pues esta operatoria lo reemplazaría
inexorablemente.

Napoleón decía que a todo suele aclararlo un ejemplo. Si anheláramos
crear un archivo de configuración para una red Wifi con nombre
UNIDAD_BASICA cuya contraseña (en codificación ASCII) es VivaPeron
deberíamos ingresar:

sudo wpa_passphrase UNIDAD_BASICA VivaPeron > /etc/wpa.conf

El archivo generado será /etc/wpa.conf ya que /etc es el directorio que
suele preferirse para estos menesteres, pero bien podrían utilizar
directamente el directorio del administrador, con /root/wpa.conf, u otro
que se nos ocurra. En este caso, el archivo de configuración
/etc/wpa.conf generado por wpa_passphrase contendrá:

network={
ssid="UNIDAD_BASICA"
#psk="VivaPeron"
psk=9b9da308bae6990f0101f12463ff27869dbf22065d4117d28a846f80e1b60080
}

b, Nos conectamos mediante wpa_supplicant

La sintaxis que debemos seguir para opear con el comando wpa_supplicant
es la siguiente:

wpa_supplicant -B -i interfaz -c /ruta/a/archivo_de_configuración.conf -D controlador

Por ejemplo, podríamos utilizar:

wpa_supplicant -B -i wlan0 -c /root/wpa.conf

En este comando, el sufijo -B indica ejecutar en segundo plano
(background), además no he escogido ningún driver para que tal
predicamento sea resuelto por sí mismo por wpa_supplicant. Podremos
observar qué controladores que soporta la tarjeta de red ejecutando el
comando wpa_supplicant sin argumento alguno:

drivers:
   nl80211 = Linux nl80211/cfg80211
   wext = Linux wireless extensions (generic)
   wired = Wired Ethernet driver
   macsec_linux = MACsec Ethernet driver for Linux
   none = no driver (RADIUS server/WPS ER)


En este ejemplo se elige el controlador nl80211:

wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa.conf

c. Obtenemos una dirección IP mediante dhcpcd

Ya deberíamos habernos asociado a la red inalámbrica, pero para que la
misma opere como es debido tenemos que ser dados de alta en la lista de
dispositivos y recibir una dirección IP por parte del router. Ello lo
solicitaremos mediante el siguiente comando:

dhclient -v wlan0

Con esto, ya deberíamos estar conectados a la red WLAN (podremos verificarlo mediante el comando ping. Por ejemplo:

ping google.com.ar

Sintácticamente, los comandos podrían ser:

wpa_passphrase UNIDAD_BASICA VivaPeron > ~/wpa.conf
wpa_supplicant -B -i wlan0 -c ~/wpa.conf
dhclient -v wlan0

Podremos obtener más información ejecutando:

wpa_supplicant


Aplicación nmtui

El método tradicional de wpa_supplicant y dhclient es tal vez el más
conocido, pero no el más intuitivo. En cambi, la excelente aplicación
nmtui nos presentará con lo que escencialmente es una versión de
interfaz de texto para Terminal del Network Manager de toda la vida. Se
trata de una opción liviana, simple, y excesivamente útil para entornos
no-gráficos.

En caso de listar pocas redes inalámbricas, es probable que requiera
hacer un escaneo de redes previo con el comando:

sudo iwlist scan wlp4s0

..o bien:

sudo iwlist scan wlan0

Al ejecutar nmtui veremos que nos ofrece varias funcionalidades
incluidas en el Network Manager de la interfaz gráfica. Entre otras
podremos:

   seleccionar redes disponibles, tanto WiFi como cableadas.
   editar una redes existente: ethernet o inalámbricas.
   crear/eliminar una nueva red estática/dinámica.
   clonar MAC.
   configurar DNS.
   crear de redes puente, infiniband, Túnel IP, etc.


Listado de Redes:


Edición de una red existente:

Este es el método que prefiero para enlazar con redes telemáticas
inalámbricas con las distribuciones GNU con Linux más nuevas. Servicio
iwd (iNet wireless daemon)

Este método utiliza la conexión en forma de servicio (iwd) en lugar de
entablar el uso de aplicaciones. Opera como una buena alternativa al
veterano wpa_supplicant, y al igual que éste, funciona como demonio
quedando residente en memoria. La diferencia radica en que iwd cuenta
con su propia consola de intérprete de comandos que se ejecuta en la
terminal. Cabe destacar que - desde el punto de vista técnico - iwd es
compatible con connman y network-manager, estos pueden gestionar redes a
través de iwd como frontend.

La primera acción de esta metodología implica instalarlo. En el caso de
Ubuntu emplearemos el siguiente Comando de Organización:

sudo apt install iwd

Comnforme se haya instalado iwd detendremos el servicio wpa_supplicant a
fin de que no entren en conflicto entre sí. Luego verificamos que el
servicio iwd está corriendo:

sudo systemctl stop wpa_supplicant.service
sudo systemctl status iwd.service

De ahora en más podremos hacer uso de la consola de control que tiene
iwd por medio del siguiente comando de organización:

iwctl

El prompt de nuestro intérprete de comandos debería cambiar para
indicarnos que estamos dentro del iwd, adquiriendo la siguiente forma:


[iwd]#

A partir de ahora, todo comando que ingresemos será ejecutado por iwd.
Si ingresamos el comando help obtendremos una pantalla de ayuda de uso
para algunas tareas útiles, tales como listar nuestros dipositivos
inalámbricos, revisar las redes disponibles, etcétera. La consola de
control iwdctl dispone de la útil funcionalidad de autocompletado
mediante la tecla Tab.

a. Listamos los dispositivos inalámbricos

Recordemos que el nombre del dispositivo (wlan0/wlp4s0/wlp5s0) tienden a
variar de acuerdo a la distribución o al controlador inalámbrico
utilizado por nuestro sistema. Los revisamos con:


[iwd]# device list




b. Escaneamos/Listamos las redes

[iwd]# station device scan


[iwd]# station device get-networks


c. Nos conectamos a una red Wifi:


[iwd]# station device connect SSID


El sistema nos solicitará la contraseña de la red inalámbrica y la
almacenará en el archivo /var/lib/iwd/ bajo el formato ESSID.psk. En el
futuro recurrirá a este archivo para conectarse automáticamente sin
tener que volver a pedirnos la contraseña (naturalmente que si la misma
cambiase y no puediese establecer en enlace, la volverá a solicitar).

Suponiendo que el nombre del ESSID es UNIDAD_BASICA y la contraseña
fuese VivaPeron, el archivo de configuración
/var/lib/iwd/UNIDAD_BASICA.psk contendría lo siguiente:

:


[Security]
PreSharedKey=9b9da308bae6990f0101f12463ff27869dbf22065d4117d28a846f80e1b60080
Passphrase=VivaPeron


Lógicamente, las líneas PreSharedKey y Passphrase son obtenidas por iwd
a través del comando wpa_passphrase de wpa_supplicant que ya os he
mencionado anteriormente.

Debemos tener en cuenta que - si bien es poco probable en Ubuntu - al
hacer ping www.google.com.ar, la red podría no funcionar aunque iwd
informe que está conectado. En tal caso, basta con ejecutar sudo
dhclient -v para que se active la conexión. Luego se conectará con
normalidad, sin necesidad de este último requerimiento.

d. Nos desconectamos


[iwd]# station device disconnect


En la imagen de cabecera se detallan, como ejemplo, cada uno de los
pasos descriptos para la red UNIDAD_BASICA.

e. Asociarnos con WPS ("push-button") en iwd:

Este método de asociación al Wifi implica oprimir un botón llamado "WPS"
o "QSS" localizado en el dispositivo de conexión (router) a fin de
"abrir" el enlace y permitir - durante un minuto - establecer la
conexión al Wifi sin tener que mediar una contraseña. Si bien esta
opción puede ser utilizada en conjunción con el servicio iwd, no es un
método recomendable y debe evitarse por inherentemente inseguro. Aún
así, puede ser una opción para algunos casos (fiestas, eventos donde no
nos interesa la seguridad extrema).

Antes que nada tenemos que asegurarnos que nuestro router tenga la
función WPS/QSS, y que la misma esté habilitada. Eso se hace desde la
web de control del router, ya que la misma generalmente cuenta con un
casillero para habilitar la función WPS bajo el apartado de redes
inalámbricas. Acto seguido ejecutamos en el prompt ([iwd]#) el comando
destinado a "presionar el botón":


[iwd]# wsc device push-button


Lo más inmediatamente posible presionamos el botón WPS del router. La
conexión se hará efectiva en unos pocos segundos. Cabe mencionar que
cualquier dispositivo que esté en el rango de nuestro router, también
tendrá acceso en el momento que pulsamos el botón WPS y podrían también
asociarse. Este método tan práctico, al igual que la opción PIN mode, no
es seguro. Lo más conveniente es tener deshabilitada la función WPS en
el router.

Si no deseamos utilizar en este esquema al demonio iwd, podremos
deshabilitarlo —o eliminarlo—, para volver al viejo y peludo
wpa_supplicant. Todo ello lo haremos con:

sudo systemctl stop iwd.service
sudo systemctl disable iwd.service