[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)
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:
- Escanear redes/*]
- Conectarnos a una red wifi (podemos prescindir de wpa_suppliacnt))/*]
- Obtener la IP por dhcp (podemos prescindir de isc-dhcp-client)/*]
- Crear un hotspot (podemos prescindir de hostapd) /*]
- 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!
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”
- Detenemos Network Manager
sudo systemctl stop NetworkManager
/*] - Paramos wpa_supplicant
sudo systemctl --now disable wpa_supplicant
/*] - 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
- Y entrar la llave WPA (2)
https://www.wifi-libre.com/img/members/3/iwd_7_20230221-1527.jpg
Nos conectamos al instante sin necesidad de invocar un demonio dhcp para tener una IP.
Podemos comprobar el estado de la conexión con
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.