Ejecutar este procedimiento en una VM con Debian/Ubuntu con el dongle WiFi attached/passthrough.
systemctl stop systemd-resolved
systemctl disable systemd-resolved
systemctl mask systemd-resolved
Actualizamos el sistema:
apt update && apt dist-upgrade -y && apt clean
Si se va a compilar el driver del dongle WiFi:
apt install mc net-tools iw git dkms \
build-essential dkms libelf-dev \
linux-headers-`uname -r`
De ser necesario utilitarios:
apt install dnsutils sudo rsync wget \
mc net-tools p7zip-full htop iftop \
telnet screen multitail lzma xz-utils \
rar unrar && apt clean
Agregar:
nano /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevnames=0"
Ejecutar:
update-grub2
Y reniciar.
De ser necesario, compilar el driver del dongle USB y ponerlo a funcionar. Si el driver está en el repo, perfecto. El dispositivo debe soportar el modo AP, si no, no va a funcionar:
iw wlan0 info
o:
iw phy0 info
Ver apartado:
- Supported interface modes:
* IBSS
* managed
* AP <------------ Este modo!!!
* monitor
* P2P-client
* P2P-GO
Configurar/ajustar la configuración de red:
auto eth0
iface eth0 inet static
address 10.0.0.251
netmask 255.255.255.0
gateway 10.0.0.10
allow-hotplug eth0
auto wlan0
iface wlan0 inet static
address 192.168.1.250
netmask 255.255.255.0
E instalar lo necesario:
apt install -y hostapd dnsmasq iptables-persistent
Diálogo: Save rules for iptables v4/6
Redirigir todo el trafico entrante por la interfaz wifi para eth0:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Salvar y aplicar las reglas:
iptables-save > /etc/iptables/rules.v4
Para habilitar el forwarding del kernel:
nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Aplicar los cambios:
sysctl -p
Habilitar los servicios:
systemctl unmask hostapd
systemctl enable hostapd
systemctl enable dnsmasq
Editar la config[hostapd]:
nano /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
DAEMON_OPTS="-dd -t -f /var/log/hostapd.log"
nano /etc/hostapd/hostapd.conf
driver=nl80211
country_code=US
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
auth_algs=1
beacon_int=100
channel=6
hw_mode=g
# If 40MHz supported
ht_capab=[SHORT-GI-40][HT40+][HT40-][DSSS_CCK-40]
interface=wlan0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
# SSID
ssid=AP_WIFI
# WiFi password
wpa_passphrase=112233*-+
# HiddenSSID
ignore_broadcast_ssid=1
# Isolate clients
ap_isolate=1
# Testing for 802.11n standard - WORKS
ieee80211n=1
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
Ahora vamos a configurar DNSMasq:
mv /etc/dnsmasq.conf{,.orig}
nano /etc/dnsmasq.conf
# Options
dhcp-authoritative
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
log-dhcp
#log-queries
# Use the require wireless interface - usually wlan0
interface=wlan0
dhcp-range=192.168.1.149,192.168.1.200,255.255.255.0,24h
# Allowed cients
dhcp-host=34:de:1a:0e:a0:e2,192.168.1.150,laptop_pepe
dhcp-host=84:2e:27:4b:f0:34,192.168.1.151,celular_pepe
dhcp-host=0a:0b:10:a4:bd:39,192.168.1.152,tablet_chicho
# All not listed before, GTFO!
dhcp-ignore=tag:!known
Y ahora reiniciar los servicios:
/etc/init.d/hostapd restart
/etc/init.d/dnsmasq restart
Y listo.
Notas y otros detalles:
Ver usuarios conectados
iw dev wlan0 station dump
o:
hostapd_cli all_sta
Si esta última opción le da error, es porque no tienen las siguientes dos directivas en la configuración:
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
Para ver los usuarios por IP/MAC:
arp -an | grep "192.168.1"
Siendo 192.168.1.x/24 el direccionamiento de la red wifi.
Des-autenticar y bloquear usuarios: Solo 3 líneas
hostapd_cli deauthenticate 00:11:22:AA:BB:CC
hostapd_cli disassociate 00:11:22:AA:BB:CC
iptables -A INPUT -m mac --mac-source 00:11:22:AA:BB:CC -j DROP
Filtrado de MAC directamente en el hostapd.conf:
Será necesario añadir un par de parámetros al archivo /etc/hostapd/hostapd.conf:
macaddr_acl=0
#deny_mac_file=/etc/hostapd/hostapd.deny
accept_mac_file=/etc/hostapd/hostapd.accept
Existe otro método, pero esta es el más común, donde se van a aceptar todas las direcciones físicas que aparezcan dentro del fichero /etc/hostapd/hostapd.accept y bloqueando las demás.
Un ligero detalle que se me pasó. Si desean que el dnsmasq haga forwarding de todas las encuestas dns a otro dns, debemos escribir lo siguiente en la config:
no-resolv
server=/localnet/192.168.1.1 # change ip for your ip-server
server=10.0.0.10
server=8.8.8.8