iwd;¿El demonio WiFi Linux qué lo cambiara todo?

[h]iwd;¿El demonio WiFi Linux qué lo cambiara todo? [/h]
iNet wireless daemon es un demonio de redes WiFi para Linux con características muy interesantes
Es una propuesta innovadora iniciada por Intel y que tiene mucho potencial,
He hablado de Intel pero olvidaros inmediatamente de este nombre: No es para tarjetas Intel, es para cualquier dispositivo Wifi en Linux.
Un demonio universal que podría llegar a ser un “game changer” en el ecosistema GNU-Linux.
El proyecto está estampillado “kernel.org”, o sea: Está desarrollado en el seno de la mismísima fundación linux.
Ha llegado a madurez y forma ahora parte de los repositorios estables de Debian (desde debian 11 - aka bookworm)

Lo primero a destacar sobre iwd es la solidez del concepto base: iwd no depende de ninguna librería extra y utiliza únicamente (casi) elementos del núcleo linux (el kernel)

wiki iwd - “Start” @ kernel.org

Tenemos a un programa increíblemente liviano tanto por su tamaño (menos de 2MB en debian - incluye la cli ) que por el uso de recursos

Lo segundo a destacar, y lo más asombroso, es todo lo que pueden hacer estos chiquitos 2 MB.
Señoras y señores, con iwd y su cli podemos:

  1. Escanear redes/*]
  2. Conectarnos a una red wifi (podemos prescindir de wpa_suppliacnt))/*]
  3. Obtener la IP por dhcp (podemos prescindir de isc-dhcp-client)/*]
  4. Crear un hotspot (podemos prescindir de hostapd) /*]
  5. Hotspot que tiene su propio servicio casero para dhcp (podemos prescindir de dnsmasq)/*]

Tiene soporte WPA3, WPS, ipv4y6…
…¡Lo único que podemos echar en falta es el soporte modo monitor! :smiley:

Lo tercero a destacar, y es lo que vamos a ver ahora, es que usarlo es muy simple.

[h]Instalación y configuración[/h]

Está en los repositorios de debian

[quote]Package: iwd
Version: 2.3-1
Priority: optional
Section: net
Maintainer: Jonas Smedegaard dr@jones.dk
Installed-Size: 2.002 kB
Depends: init-system-helpers (>= 1.51), libc6 (>= 2.34), libell0 (>= 0.56), libreadline8 (>= 6.0)
Recommends: dbus | dbus-system-bus, wireless-regdb
Breaks: orphan-sysvinit-scripts (<< 0.11)
Homepage: https://iwd.wiki.kernel.org/
Download-Size: 491 kB
APT-Manual-Installed: yes
APT-Sources: https://deb.debian.org/debian sid/main amd64 Packages
Description: wireless daemon for Linux
iNet Wireless Daemon (iwd) is a minimalistic wireless daemon
that uses modern Linux interfaces
like cfg80211 and nl80211 (netlink).
The daemon provides a D-Bus API.
.
The daemon can be controlled from the command line
with the included iwctl client utility.
.
The included iwmon utility can be used
to monitor the 802.11 subsystem generic netlink commands and events.
It uses the nlmon kernel driver from Linux 3.10 and later.
.
Note that the package defaults
to relying on dbus activation to start.
If you want to use iwd standalone without any manager,
then you’ll need to manually enable the system service.
[/quote]
Se instala con:

sudo apt install iwd

Si prefieres compilarlo tu mismo;

git clone https://git.kernel.org/pub/scm/network/wireless/iwd.git

Instrucción instalación manual

Instalando el paquete apt tendremos a un directorio /etc/iwd que aloja un fichero de configuración (main.conf)
Lo vamos a editar ahora para que iwd negocie la asignación automática de IP

sudo nano /etc/iwd/main.conf

“Des-comentamos” (quitamos la almohadilla en inicio de linea) la variable EnableNetworkConfiguration que quedará declarada con valor “true”.

Guardamos con <Ctrl + O> , confirmamos el nombre del fichero con y salimos de nano con <Ctrl + X>.

Esto hecho y antes de conectarnos con iwd, debemos detener wpa_supplicant y NetworK Manager para evitar conflictos.
Existe la opción de usar Network Manager con iwd en lugar de wpa_supplicant (fijaros en la primera imagen) pero se considera aún un poco “experimental”

iwd wiki “Network Manager” @ kernel.org

  1. Detenemos Network Manager sudo systemctl stop NetworkManager/*]
  2. Paramos wpa_supplicant sudo systemctl --now disable wpa_supplicant/*]
  3. Arrancamos iwd sudo systemctl --now enable iwd/*]


[h]Conexión WPA[/h]
Ahora lanzamos la consola interactiva de iwd: iwctl.

sudo iwctl


Podemos ver las opciones con help

[code] iwctl version 2.3

Usage

iwctl --options] [commands]

                           Available options                               

Options Description

–username Provide username
–password Provide password
–passphrase Provide passphrase
–dont-ask Don’t ask for missing
credentials
–help Display help

                           Available commands                              

Commands Description

Adapters:
adapter list List adapters
adapter show Show adapter info
adapter set-property Set property

Ad-Hoc:
ad-hoc list List devices in Ad-hoc mode
ad-hoc start <“network name”> Start or join an existing
Ad-Hoc network called “network
name” with a passphrase
ad-hoc start_open <“network name”> Start or join an existing open
Ad-Hoc network called “network
name”
ad-hoc stop Leave an Ad-Hoc network

Access Point:
ap list List devices in AP mode
ap start <“network name”> Start an access point called
“network name” with a
passphrase
ap start-profile <“network name”> Start an access point based on
a disk profile
ap stop Stop a started access point
ap show Show AP info
ap scan Start an AP scan
ap get-networks Get network list after
scanning

Devices:
device list List devices
device show Show device info
device set-property Set property

Known Networks:
known-networks list List known networks
known-networks <“network name”> forget Forget known network
known-networks <“network name”> show Show known network
known-networks <“network name”> set-property Set property

WiFi Simple Configuration:
wsc list List WSC-capable devices
wsc push-button PushButton mode
wsc start-user-pin PIN mode
wsc start-pin PIN mode with generated 8
digit PIN
wsc cancel Aborts WSC operations

Station:
station list List devices in Station mode
station connect <“network name”> [security] Connect to network
station connect-hidden <“network name”> Connect to hidden network
station disconnect Disconnect
station get-networks [rssi-dbms/rssi-bars] Get networks
station get-hidden-access-points Get hidden APs
[rssi-dbms]
station scan Scan for networks
station show Show station info

Device Provisioning:
dpp list List DPP-capable devices
dpp start-enrollee Starts a DPP Enrollee
dpp start-configurator Starts a DPP Configurator
dpp stop Aborts DPP operations
dpp show Shows the DPP state

Station Debug:
debug connect Connect to a specific BSS
debug roam Roam to a BSS
debug get-networks Get networks
debug autoconnect on|off Set AutoConnect property

Miscellaneous:
version Display version
quit Quit program [/code]

Voy a ver si mi interfaz está detectada:

device list

Ups,
Cómo de costumbre, Network Manager ha “apagado” la interfaz cuando lo hemos parado. Es un mal educado de primera…

Abro otra consola y tecleo

sudo rfkill unblock wifi

Y de paso levanto la interfaz para estar seguro.

sudo ip l s wlan0 up

Notar en la captura anterior “Auto-refresh is disabled. Enlarge window width to at least 80 to enable
Si queremos refrescar la vista en consola debemos tener una consola con una anchura superior a 80 caracteres.

  • Empezamos con el Escaneo. Se hace con
station wlan0 scan
  • Para ver los resultados
station wlan0 get-networks

  • Para conectarnos a nuestra red debemos indicar su essid (1)
station wlan0 connect Nombredemired
station wlan0 show

La salida es agradable y limpia.
Además los datos se actualizan (calidad señal y tasa de transmisión) cada segundo.

Las sintaxis de iwd y iwctl me parecen lógicas y bien pensadas.
Por ejemplo hemos usado “show” para ver la información de nuestra conexión cómo cliente (station)
Si quiero ver la información sobre los drivers de la interfaz, usaré “show” pero esta vez sobre “adapter”,

Para pasar la interfaz de un modo a otro lo haremos con “set-property”. Si quiero hacer un soft ap:

device wlan0 set-property Mode ap

Una vez hecho configuraremos el repetidor wifi invocando esta vez ap:
A ver si lo adivinas:

ap wlan0 start "MyWiFi"  12345678

Es para crear una red llamada “MyWifi” con llave WPA 12345678.

exit wpa_supplicant, exit hiostapd, exit demonio dhcp…
¿A qué esperamos para pasarse del todo a iwd?
Para un usuario que quiere experimentar y quiere el poder total sobre sus interfaces wifi, iwd se queda corto,
No tiene ni la mitad de las opciones de wpa_supplicant o hostapd.
De momento está bien para operaciones básicas y es más eficaz que usar tres demonios diferentes.
Es perfecto para un pequeño dispositivo IOT linux o para una distribución “light”,
O si hacemos un programa en un contenedor que no requiere funcionalidades wifi adelantadas
Habrá de seguir de cerca el tema de la compatibilidad con Network Manager porque sobre papel iwd es la mejor opción.