wifi·por dentro
7 · Laboratorio

El laboratorio: wifi sin moverte de la silla

Todo lo de esta web se practica en un Linux normal con tarjetas wifi virtuales que crea el propio kernel. Tu wifi de verdad no se toca.

Las piezas

HerramientaPara qué
mac80211_hwsimMódulo del kernel que crea tarjetas wifi de mentira que se "oyen" entre ellas
ip netnsCrea "cajas" de red aisladas: una para los APs y otra para el PC
hostapd / hostapd_cliConvierte una tarjeta en punto de acceso y le da órdenes (cambiar de canal, echar clientes, 802.11v…)
wpa_supplicant / wpa_cliEl cliente wifi de Linux: decide a qué AP conectarse y cuándo cambiar
iwEscanear, ver la señal, cambiar la potencia y las velocidades
bridgeEl "switch" que une los APs por cable
tc netemAñade pérdidas y retardo para imitar la distancia (parte 1)

Cómo queda montado

netns "aps" br0 · 192.168.50.1 wifi_ap1 · canal 1 02:11:11:11:11:11 wifi_ap2 · canal 6 02:22:22:22:22:22 wifi_ap3 · canal 11 02:33:33:33:33:33 vecino canal 3 )))) aire simulado: se oyen las radios del mismo canal (((( netns "pc" wifi_pc · 192.168.50.10 wpa_supplicant · 02:aa:aa:aa:aa:aa

Las guías

GuíaQué se haceEn esta web
01-04Un AP y un PC: montar, potencia, distancia con tc netem, limpiarSeñal
05Teoría con númerosToda la web
06Montar 3 APs + vecino + PC con wpa_supplicantEsta página
07Analizar el aire, cambiar de canal en caliente (CSA), cocanal contra adyacenteCanales
08MCS, cliente lento, enlace desequilibradoVelocidad
09El paseo por el pasillo y el cliente pegajosoRoaming
10Echar, rechazar y 802.11vRoaming
11Tamaño de celda, reutilizar canales, velocidades básicasPotencia
12Analizadores con tu wifi realAnalizador
13Limpiar

Chuleta de comandos

Montar

# 5 tarjetas wifi virtuales (AP1, AP2, AP3, vecino y PC)
sudo modprobe mac80211_hwsim radios=5
# Las dos cajas
sudo ip netns add aps
sudo ip netns add pc
# Mover una radio a una caja (usa tus números de phy)
sudo iw phy phy1 set netns name aps
# Arrancar los 4 APs de una vez (terminal 2)
sudo ip netns exec aps hostapd hostapd_ap1.conf hostapd_ap2.conf hostapd_ap3.conf hostapd_vecino.conf
# Arrancar el cliente (terminal 3)
sudo ip netns exec pc wpa_supplicant -i wifi_pc -c wpa_pc.conf

Mirar

# A qué AP está conectado el PC y en qué frecuencia
sudo wpa_cli -p /run/wpa_lab -i wifi_pc status
# Señal y velocidad del enlace
sudo wpa_cli -p /run/wpa_lab -i wifi_pc signal_poll
# Clientes de un AP
sudo hostapd_cli -p /run/hostapd_lab -i wifi_ap1 all_sta
# Escanear y analizar
sudo wpa_cli -p /run/wpa_lab -i wifi_pc scan
sudo ip netns exec pc iw dev wifi_pc scan dump | python3 analizador_wifi.py LAB_WIFI

Tocar

# "Mover" el PC: cambiar la potencia de un AP (en mBm: 1000 = 10 dBm)
sudo ip netns exec aps iw dev wifi_ap1 set txpower fixed 1000
# Cambiar de canal sin desconectar a nadie (frecuencia = 2407 + 5 × canal)
sudo hostapd_cli -p /run/hostapd_lab -i wifi_ap2 chan_switch 5 2437 ht
# Roaming a mano
sudo wpa_cli -p /run/wpa_lab -i wifi_pc roam 02:33:33:33:33:33
# El AP echa al PC
sudo hostapd_cli -p /run/hostapd_lab -i wifi_ap1 deauthenticate 02:aa:aa:aa:aa:aa
# 802.11v: "vete al AP2, por favor"
sudo hostapd_cli -p /run/hostapd_lab -i wifi_ap1 bss_tm_req 02:aa:aa:aa:aa:aa pref=1 abridged=1 neighbor=02:22:22:22:22:22,0x0000,81,6,7

Limpiar

sudo ip netns del pc
sudo ip netns del aps
sudo modprobe -r mac80211_hwsim

Límites del simulador

Lo que el simulador NO haceCómo se suple
No hay metros: la señal es siempre potencia − 50 (de -30 a -50 dBm)La distancia se imita cambiando la potencia de cada AP; mapa_aps.py da las potencias para cada metro
No simula canales solapados ni que el aire se lleneSe calcula con mapa_aps.py y calculadora_velocidad.py (el mismo modelo que esta web)
El AP oye al PC igual desde todos los APsSe baja la potencia del PC y se configura el rechazo solo en un AP
Nunca baja de -50 dBm, así que Linux nunca hace roaming soloEs justo el cliente pegajoso: se fuerza con roam, deauthenticate o 802.11v

El siguiente paso, si quieres simular posiciones e interferencias de verdad, es wmediumd: un "medio de radio" para mac80211_hwsim con coordenadas, pérdidas por distancia e interferencias.