Admin Libre - Administración de sistemas y redes

Punto de acceso tonto con OpenWrt
Por Francisco Gaitán el 1 de Abril de 2022

Tabla de Contenidos

Un punto de acceso tonto o dumb AP hace un puente de red entre la interfaz inalámbrica y la interfaz cableada sin realizar enrutado ni servicios como DHCP o DNS. Así, además de ahorrar memoria y recursos, los dispositivos conectados inalámbricamente no necesitarán NAT doble para salir a Internet y, salvo la propia red inalámbrica, todo lo demás se configurará en el router principal.

He usado un router TP Link TL-WR1043ND v1.8 que tiene solamente una interfaz cableada (LAN); si usas otro router el proceso no es exactamente el mismo. En el Huawei HG556a y en el WD8970 V1.2 también funciona, aunque he probado en un TL-WR1043-ND versión 3 con VLANs y pierdo el acceso al router. Para este router se hace así:

  • Se conecta por la boca LAN1 tanto para configurarlo como para futuro puerto WAN
  • Se desactiva la opción Bring up on boot para las dos interfaces WAN
  • Se configura LAN como cliente DHCP y se activa la opción de deshabilitar DHCP Server
  • No se toca la configuración del dispositivo br-lan

Topología de la red

El router principal que sale a Internet es un EdgeRouter Lite configurado de la siguiente forma:

  • Va conectado al cablemodem por eth0 en modo cliente DHCP
  • eth1 y eth2 se configuran como puente de red
  • Hace de servidor DNS y DHCP
  • eth1 va a un ordenador por cable
  • eth2 va al puerto WAN del router wifi

Configuración de OpenWrt

Parto de un OpenWrt 21.02.2 recién instalado sin ningún ajuste y conectado por cable UTP a un ordenador. Para el nombre de host usaré el dominio de uso especial home.arpa. para redes residenciales.

Accediendo a la dirección http://192.168.1.1 configuraré la interfaz LAN (conexión por cable) como cliente DHCP. Prefiero hacerlo así asignándole la IP desde el servidor DHCP del router para facilitar futuros cambios de configuración.

Una vez cambiada la contraseña y configurada la zona horaria y el nombre de la máquina (en este caso plutonium.home.arpa) voy a Network y selecciono Interfaces. Ahora pulso Edit en la interfaz LAN que aparece y en Protocol elijo la opción DHCP Client:

Configuración de OpenWrt con LAN en modo cliente DHCP

Ahora se pulsa Save y Save & Apply, y se conecta por cable al router principal con cable ethernet a la boca LAN1. Observo en los logs del router que ofrece DHCP que el punto wifi se ha conectado con una determinada IP que es asignada en función de la MAC y configurable desde el servidor DHCP del router principal.

Mar 18 13:28:57 uranium dhcpd[41734]: DHCPREQUEST for 192.168.10.107 from 64:16:f0:db:fa:2b via vether0
Mar 18 13:28:57 uranium dhcpd[41734]: DHCPACK on 192.168.10.107 to 64:16:f0:db:fa:2b via vether0

Deshabilitar lo innecesario

Una vez que se prueba la conectividad y todo va correctamente hago lo siguiente:

  • Deshabilitar odhcpd (servidor DHCP)
  • Deshabilitar uhttpd (servidor HTTP y HTTPS)
  • Deshabilitar dnsmasq (servidor DNS)
  • Deshabilitar firewall
  • Deshabilitar login por contraseña para SSH

Para ello accedo por SSH y ejecuto estos comandos:

iron$ ssh root@plutonium.home.arpa
BusyBox v1.33.2 (2022-02-16 20:29:10 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 21.02.2, r16495-bf0c965af0
 -----------------------------------------------------

# /etc/init.d/odhcpd disable 
# /etc/init.d/odhcpd stop 
# /etc/init.d/dnsmasq disable 
# /etc/init.d/dnsmasq stop 
# /etc/init.d/uhttpd disable 
# /etc/init.d/uhttpd stop 
# /etc/init.d/firewall disable
# /etc/init.d/firewall stop

O, mejor aún, este bucle que desactiva y para cada servicio sólo si está activo:

# these services do not run on dumb APs
for i in uhttpd firewall dnsmasq odhcpd; do
  if /etc/init.d/"$i" enabled; then
    /etc/init.d/"$i" disable
    /etc/init.d/"$i" stop
  fi
done

Para evitar que se reactiven al actualizar OpenWrt añade eso al archivo /etc/rc.local antes de la línea exit 0 tal y como explica la documentación oficial.

Desactivar login por contraseña para SSH

Para ello primero copio la clave pública de mi ordenador (~/.ssh/id_rsa.pub) al archivo /etc/dropbear/authorized_keys de OpenWrt, y una vez hecho esto editando el archivo /etc/config/dropbear cambio esto:

  option PasswordAuth \'on\'
  option RootPasswordAuth \'on\'

Por esto:

  option PasswordAuth \'off\'
  option RootPasswordAuth \'off\'

Y luego reinicio el programa para que lea la nueva configuración:

# /etc/init.d/dropbear restart

Activar el punto de acceso

Olvidé configurar el punto de acceso inalámbrico, y ahora Luci no funciona porque el servidor web está deshabilitado... no es problema, se puede volver a poner en funcionamiento:

# /etc/init.d/uhttpd start

Accediendo al router por web voy a Network, Wireless y le doy a editar la interfaz llamada Master. Configuro a mi gusto (incluyendo el país donde opera el router en la sección Avanzada) y luego le doy a guardar cambios como de costumbre y a Enable. Ya debe funcionar el punto inalámbrico, y los clientes conectados deben obtener IP de forma dinámica del router principal mediante DHCP.

Una vez configurado paro el servidor web:

# /etc/init.d/uhttpd stop

Aislando clientes entre sí

Con la opción Isolate clients se evita que los clientes de la red wifi se puedan comunicar entre sí.

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org