Configura una Raspberry Pi o cualquier Linux como router Wi-Fi

Cualquier sistema operativo basado en Linux, se puede configurar como si fuera un router WiFi de verdad con unos sencillos pasos. Por ejemplo, si utilizamos una Raspberry Pi con el sistema operativo Raspbian (que no deja de ser un sistema operativo basado en Linux), lo podemos configurar para utilizar sus diferentes interfaces de red y crear un router WiFi con un rendimiento bastante decente, aunque también debemos tener en cuenta sus limitaciones de puertos. En este tutorial os vamos a enseñar cómo configurar una Raspberry Pi, o cualquier sistema operativo basado en Linux, para funcionar como un router Wi-Fi.

Pasos iniciales

Lo primero que debemos hacer es instalar el sistema operativo en nuestro Raspberry Pi. En nuestro caso hemos utilizado la última versión de Raspbian, aunque se puede utilizar cualquier otro sistema (aunque los comandos podrían variar). Una vez instalado el sistema operativo en nuestro micro SD lo ejecutamos por primera vez para completar la instalación y configuración del mismo (por ejemplo, en el caso de Raspbian, completar el asistente de «sudo raspi-config«).

Una vez configurado y con el dispositivo funcionando y conectado a Internet mediante RJ-45 actualizamos las fuentes de software, las aplicaciones y el sistema tecleando:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Una vez que hayamos actualizado nuestro sistema operativo, podemos seguir con el tutorial para configurar nuestro Raspberry Pi para funcionar como un router.

Comprobar que nuestra tarjeta USB Wi-Fi es detectada y funciona en modo AP

Lo primero que tendremos que hacer es comprar una tarjeta USB WiFi para conectarla directamente a la Raspberry Pi y proporcionar conectividad inalámbrica. Las últimas versiones de Raspberry Pi incorporan internamente un chipset de WiFi, por lo que no sería del todo necesario comprar una tarjeta de red WiFi USB para conectarla al dispositivo, no obstante, nuestra recomendación es que compréis una tarjeta WiFi con dos o tres antenas externas, para proporcionar la mejor cobertura y velocidad posible. Además, debemos tener en cuenta qué chipset utiliza para conocer si existen drivers compatibles con este modelo.

Lo primero que haremos será comprobar que el dispositivo detecta la tarjeta. Para ello tecleamos:

lsusb

Y nos debería aparecer allí listada. Una vez que aparece ejecutaremos otro comando para comprobar que la tarjeta Wi-Fi puede funcionar en modo AP:

iw list

Si en el resultado que nos aparece en pantalla podemos ver la línea: Mode: AP, la tarjeta es compatible para realizar esta configuración, de lo contrario, debemos buscar otra tarjeta cuyo chipset permita configurarla como punto de acceso, o AP. En el caso de que no soporte el modo AP, entonces podríamos mirar si existen unos drivers específicos que sí permita esta funcionalidad. Para realizar esta tarea deberemos buscar por Internet y en diferentes foros a alguien que haya hecho lo mismo que nosotros hemos realizado.

Instalar software necesario y dependencias

La mayor parte del software necesario viene por defecto instalado en Raspbian, aunque los únicos que podrían darnos problemas son el servidor DHCP y el servicio de creación de puntos de acceso, que podemos instalar manualmente (en caso de no estar disponible) tecleando:

sudo apt-get install isc-dhcp-server hostapd

El software isc-dhcp-server es fundamental para montar un servidor DHCP en nuestra Raspberry Pi. Normalmente la Raspberry Pi con Raspbian o el sistema operativo que hayas instalado, viene con un cliente DHCP para obtener el direccionamiento IP privado de manera automática, tal y como ocurre con cualquier PC, smartphone o tablet. Sin embargo, lo que no viene preinstalado es un servidor DHCP, con el objetivo de que sea la Raspberry Pi quien proporcione direcciones IP privada a los clientes inalámbricos que vayan a conectarse al adaptador WiFi.

Por supuesto, también es completamente necesario instalar el software hostapd, un software totalmente gratuito que nos permitirá configurar y levantar un punto de acceso WiFi con la tarjeta de red WiFi USB que hemos comprado o utilizado previamente. Gracias a este software, podremos configurar un SSID, tipo de seguridad y también una contrasaseña WPA2 o WPA3 de paso, un detalle muy importante es la compatibilidad con protocolo de seguridad WPA3. Es posible que muchas tarjetas no soporten este protocolo, por lo que deberías primero configurar WPA2 con el objetivo de no tener problemas en la primera instalación del software.

Una vez llegados a este punto podemos reiniciar nuestro Raspberry para empezar con la configuración.

Configuración

Todas las configuraciones se realizan desde el terminal, a modo texto. Nosotros vamos a utilizar el editor nano y siempre antes de editar algún archivo crearemos una copia del mismo de manera que si ocurre algún error lo podamos restaurar.

Configurar el servidor DHCP

Lo primero que configuraremos será el servidor DHCP. Para ello editaremos el siguiente archivo:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
sudo nano /etc/dhcp/dhcpd.conf

En este archivo debemos buscar una serie de líneas. Las siguientes están por defecto sin comentar, las comentamos con una almohadilla # delante de manera que dejen de estar habilitadas quedando de la siguiente manera:

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

Buscaremos el elemento #authoritative; que por defecto estará comentado y lo descomentamos para activarlo, quedando:

authoritative;

Para finalizar configuraremos la red en la que funcionará el servidor DHCP (en nuestro ejemplo en la red 192.168.2.0). Para ello nos situamos al final del documento y añadimos:

subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.30;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Guardamos los cambios y cerramos el archivo.

Abriremos un nuevo archivo de configuración del servidor, tecleando:

sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.orig
sudo nano /etc/default/isc-dhcp-server

En este documento buscaremos (al final) la línea INTERFACES=»» y la cambiamos por:

INTERFACES="wlan0"

El servidor DHCP ya está configurado. Seguimos con el tutorial.

Configurar la conexión WLAN y Ethernet

Lo primero que haremos será desconectar la tarjeta Wi-Fi. Para ello tecleamos:

sudo ifdown wlan0

A continuación abriremos el fichero «interfaces»:

sudo cp /etc/network/interfaces /etc/network/interfaces.orig
sudo nano /etc/network/interfaces

Y lo configuraremos de la siguiente manera:

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.2.1
netmask 255.255.255.0

Comentamos o borramos las demás líneas. Guardamos los cambios y cerramos el documento. Para aplicar los cambios al momento debemos teclear:

sudo ifconfig wlan0 192.168.2.1

Configurar el punto de acceso

Una vez más, editaremos otro fichero tecleando:

sudo cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.orig
sudo nano /etc/hostapd/hostapd.conf

Y en este archivo borramos lo que haya (si hay algo) y pegamos:

interface=wlan0
ssid=RaspiAP
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Podemos cambiar tanto el SSID por el nombre que queramos dar a nuestra red como el canal en channel y la wpa_passphrase con la contraseña, en texto plano, que queramos utilizar para conectarnos.

Para finalizar con la configuración abrimos un nuevo archivo de configuración tecleando:

sudo cp /etc/default/hostapd /etc/default/hostapd.orig
sudo nano /etc/default/hostapd

Descomentamos y cambiamos la línea #DAEMON_CONF=»» por:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Guardamos y cerramos el archivo para finalizar. Ya casi hemos finalizado, sólo quedan unos ajustes menores y configurar Raspbian para que todo esto se ejecute al inicio del sistema de forma automática.

Configuraciones finales

Aunque nuestro router-punto de acceso ya está configurado y es funcional, no podemos conectarnos a Internet a través de él ni se ejecutan las configuraciones de forma automática al iniciar. Para que esto funcione debemos seguir unos últimos pasos que listamos a continuación.

Configurar reenvío de paquetes

Para que Raspberry Pi reenvíe los paquetes desde él mismo hasta el router para poder salir a Internet debemos configurar los siguientes elementos:

Abrimos y editamos el fichero sysctl:

sudo cp /etc/sysctl.conf /etc/sysctl.conf.orig
sudo nano /etc/sysctl.conf

En este documento buscaremos la línea «# net.ipv4.ip_forward=1» y la descomentaremos, quedando:

net.ipv4.ip_forward=1

Guardamos y cerramos el documento. Para que los cambios tengan efecto al momento teclearemos:

sudo sysctl -p /etc/sysctl.conf

Habilitamos la NAT tecleando:

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Y guardamos las reglas iptables para que los cambios persistan (instalamos el siguiente paquete: sudo apt-get install iptables-persistent y seguimos el asistente).

Configurar arranque automático

Para que el punto de acceso y el servidor DHCP arranquen de forma automática con nuestro dispositivo debemos indicarlo específicamente y habilitar los servicios para que se activen junto a Raspbian. Para ello desde el terminal tecleamos:

sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable

Último ajuste

Antes de finalizar, hay un fichero de WPAsupplicant que puede dar problemas en algunas ocasiones, por lo que para asegurarnos de que esto no ocurre lo movemos a una ruta segura tecleando:

sudo mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service /home/pi

Nuestro Raspberry Pi ya funciona como un router Wi-Fi

Una vez llegados a este punto ya podemos reiniciar nuestro Raspberry Pi. Cuando este vuelva a arrancar automáticamente creará el punto de acceso, podrá asignar direcciones IP a los hosts que se conecten a él y enrutará todo el tráfico procedente de la tarjeta Wi-Fi a través de la tarjeta de red hacia el router, siempre y cuando estemos conectados a uno.

Es recomendable configurar apropiadamente el firewall iptables de nuestra Raspberry Pi, de esta forma, podremos permitir o denegar el tráfico local desde la LAN al WiFi y viceversa, además, podríamos levantar varios puntos de acceso WiFi, por ejemplo, podríamos configurar una red WiFi para invitados que esté totalmente aislada de la red principal. En los routers WiFi domésticos, los fabricantes suelen crear WiFi de invitados aisladas de dos formas diferentes:

  • Creando una VLAN específica para los invitados, proporcionando una nueva subred que esté aislada de la red principal, y que solamente tenga conexión a Internet. Esta forma de configurar las redes WiFi de invitados es la mejor, al más elegante y la más eficiente, porque todos los clientes invitados estarán en una subred y podrán comunicarse (o no) entre ellos, pero lo que no podrán hacer nunca es comunicarse con la red principal que está totalmente separada. Por ejemplo, un fabricante que hace uso de esto es AVM con sus FRITZ!Box, gracias a esto, tendremos una subred específica para los invitados, ya sea vía WiFi o cable. En este caso, a través de iptables (capa de red) podremos permitir o no la comunicación entre las diferentes subredes configuradas en el router.
  • Haciendo uso de ebtables a nivel de capa de enlace. En este modo de configuración los clientes inalámbricos invitados usarán exactamente la misma subred que la red principal, por tanto, compartirán direccionamiento con los equipos de la red LAN. Gracias al uso de ebtables podremos limitar la comunicación de estos invitados a la red principal, permitiendo o denegando el acceso.

En el caso de que estés interesado en levantar un punto de acceso WiFi para invitados, nuestra recomendación es hacer uso del primer método, poner un AP específico para invitados, crear una VLAN en la red y asignarles un nuevo direccionamiento IP completamente diferente al direccionamiento de la red principal, de esta forma, estarán aislados correctamente.