viernes, 17 de abril de 2020

¿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 momentos. 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 realizar los logros que nos esperan no son más que la unión y la buena voluntad de los Argentinos.

En los tiempos del primer peronismo, no era extraño tener que improvisar, porque lo planificado desde los institutos debió refrendarse a la hora de tomar el gobierno. Eso era 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 ni un poco. Podría parecer que el hecho de establecer un acceso a red inalámbrica Wifi desde la terminal es algo prohibitivo y difícil, máxime cuando ni siquiera conocemos el nombre de la misma. Sin embargo, esto ya lo hacíamos de taquito en la Secretaría de Trabajo y Previsión. Era 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 ethernet y portar un enlace cableado, pero 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.
Han de saber que existen varias maneras de conectarnos inalambicadamente 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 presentes 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.servic

No hay comentarios:

Publicar un comentario