Access Point con una RPI

Si la RPI es 1 o 2, no tiene módulo wifi incluido, puedes usar cualquier dongle compatible, como por ejemplo los Edimax[1].

[1] Ver enlace

Nota: Para mantener los nombres de las interfaces de red[wlan0 y eth0] en una RaspberryPi, debemos editar el archivo /boot/cmdline.txt y agregar:

net.ifnames=0

Justo antes del:

rootwait

Y después reiniciar la RPI.

Fijarse bien que el dongle permita crear AP en las propiedades, ejecutar:

iw wlan0 info

o

iw phy0 info

Ver apartado:

Supported interface modes:
                 * IBSS
                 * managed
                 * AP <------------ Este modo!!!
                 * monitor
                 * P2P-client
                 * P2P-GO

Si no tiene AP, no funcionará

Instalando…

apt install hostapd dnsmasq

Modifica y adapta tus configuraciones[red, hostapd y dnsmasq] basándote en los del ejemplo adjunto.

Si desea seguir indagando las opciones de configuración de hostapd, sólo échele una ojeada a su fichero de configuración extendido.

En la config de dnsmasq está anclado IP-MAC de los dispositivos, si no machea, no podrán navegar. Además, está oculto el SSID del AP.

Edita

/etc/sysctl.conf

Para habilitar el forwarding del firewall descomenta:

net.ipv4.ip_forward=1

Ejecuta sysctl -p y reinicia la RPI. Para aceptar acepta el forwarding de la wifi para la eth0:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Salva la regla:

iptables-save > /etc/iptables/iptables.nat

Y habilítala en rc.local para cuando inicie el sistema, justo antes del «exit 0»:

iptables-restore < /etc/iptables/iptables.nat

Habilita e inicia servicios:

systemctl unmask hostapd
systemctl enable hostapd
systemctl start hostapd

systemctl enable dnsmasq
systemctl start dnsmasq

Y por último reinicia la RPI. Con eso debería funciona OK!!!

Ahora algunos detalles del AP

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, jejeje.

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

Loguear info de conexión de todos los usuarios:

Revisar la configuración, en /etc/default/hostapd, la línea:

DAEMON_OPTS

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

Siendo esta la 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.

Y la explicación, por supuesto:

# Station MAC address -based authentication
# Please note that this kind of access control requires a driver 
that uses hostapd to take care of management frame processing 
and as such, this can be used with driver=hostap or 
driver=nl80211, but not with driver=atheros.
# 0 = accept unless in deny list
# 1 = deny unless in accept list
# 2 = use external RADIUS server (accept/deny lists are searched first)
#macaddr_acl=0
# Accept/deny lists are read from separate files 
(containing list of MAC addresses, one per line). Use absolute 
path name to make sure that the files can be read on SIGHUP configuration reloads.
#accept_mac_file=/etc/hostapd.accept
#deny_mac_file=/etc/hostapd.deny

Filtrado de MAC en dnsmasq:

Revisar en la configuración, en /etc/dnsmasq.conf, las directivas:

dhcp-host

y

dhcp-ignore

Un ligero detalle que se me pasó. Si desean que el dnsmasqhaga 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 IP which RPI will ask server=10.0.0.10 server=8.8.8.8

 

Con esto debería ser suficiente. Nos vemos en la próxima.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *