Si buscas acceder de forma segura a la red de tu casa cuando estás fuera para conectarte a un NAS, a un ordenador o cualquier otro dispositivo local, puede que te convenga crear un servidor VPN en una Raspberry Pi.
Una Raspberry Pi consume muy poca energía y puede estar encendida las 24 horas del día. Además, cuenta con potencia suficiente para mantener una VPN activa.
Para ello vamos a utilizar el WireGuard, un protocolo VPN bastante sencillo, y Raspberry Pi OS, además de una Raspberry Pi 3, Raspberry Pi 4 o Raspberry Pi 5 y una tarjeta microSD u otra unidad desde la que arrancar Raspberry Pi OS.
Por otro lado, no olvides contar con una conexión permanente al router y acceso a su configuración. Siempre será mejor poder conectar la Raspberry Pi mediante Ethernet en vez de con WiFi.
Instala y prepara Raspberry Pi OS
Si la Raspberry Pi todavía no tiene un sistema operativo instalado, lo más recomendable es utilizar Raspberry Pi Imager para así preparar un medio de arranque desde el que instalarlo.
Como vamos a usarlo solo como servidor VPN, no será necesario instalar la parte gráfica. Podemos utilizar mismamente Raspberry Pi OS Lite, que consume menos recursos y permite realizar lo que queremos utilizando menos energía.
Cuando hayas iniciado el sistema, te recomendamos que actualices los paquetes escribiendo:
sudo apt update
sudo apt full-upgrade -y
Ten en cuenta que es posible que Raspberry Pi OS te pida tu contraseña cada vez que ejecutes este comando u otros que vamos a ver en esta guía.
Asigna una IP local a la Raspberry Pi
Ten en cuenta que el router tendrá que enviar las conexiones VPN que entren siempre a la misma Raspberry Pi, por lo que la dirección IP no puede cambiar.
Para hacer que sea una IP estable, lo más fácil es entrar en la configuración del router y crear una reserva DHCP para la Raspberry Pi.
También puedes hacerlo de forma manual desde Raspberry Pi OS:
- Comprueba la IP actual con ip addr
- Revisa qué interfaz usa la Raspberry Pi para salir a Internet con ip route
Por ejemplo, puede aparecerte algo como default via 192.168.1.1 dev eth0. En ese caso, la interfaz es eth0. Si estás conectado por WiFi, es probable que veas algo como wlan0. Apunta ese nombre porque te será útil más tarde.
Instala WireGuard y crea las claves
Puedes hacerlo escribiendo:
sudo apt install wireguard iptables -y
A continuación, genera las claves de la Raspberry Pi. Primero crea un directorio de trabajo y restringe los permisos con:
sudo mkdir -p /etc/wireguard
cd /etc/wireguard
sudo umask 077
El siguiente paso es generar la clave privada del servidor y derivar su clave pública con:
sudo sh -c 'wg genkey | tee server_private.key | wg pubkey > server_public.key'
Puedes consultar la clave pública con:
sudo cat /etc/wireguard/server_public.key
Y la privada con:
sudo cat /etc/wireguard/server_private.key
Nunca compartas la clave privada con nadie.
Activa el reenvío de paquetes
La Raspberry Pi no reenvía por defecto paquetes de una interfaz de red a otra, así que tenemos que decírselo nosotros.
Para que reciba tráfico a través de wg0 y después lo envíe mediante eth0 o wlan0, hay que activar la opción IP Forwarding. Para ello, vamos a comenzar creando un archivo con el siguiente comando:
sudo nano /etc/sysctl.d/99-wireguard.conf
Luego escribe:
net.ipv4.ip_forward=1
Y después guarda el archivo y aplica los cambios con:
sudo sysctl --system
Puedes verificar que todo ha quedado bien hecho con:
sysctl net.ipv4.ip_forward
El resultado debería ser:
net.ipv4.ip_forward = 1
Crea la configuración del servidor WireGuard
Para que la explicación no sea demasiado abstracta, vamos a utilizar estos datos de ejemplo:
| Red doméstica | 192.168.1.0/24 |
|---|---|
| Raspberry Pi | 192.168.1.50 |
| Red VPN | 10.8.0.0/24 |
| Servidor VPN | 10.8.0.1 |
| Primer dispositivo cliente | 10.8.0.2 |
| Puerto | 51820/UDP |
Solo tienes que adaptar las instrucciones que te vamos a dar a continuación a los datos de tu instalación.
Abre el archivo de configuración con:
sudo nano /etc/wireguard/wg0.conf
Ahora escribe:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = CLAVE_PRIVADA_DEL_SERVIDOR
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE.
Recuerda cambiar CLAVE_PRIVADA_DEL_SERVIDOR por tu clave privada. Por otro lado, si la Raspberry Pi se conecta al router mediante WiFi, cambia eth0 por wlan0.
Por último, protege el archivo con:
sudo chmod 600 /etc/wireguard/wg0.conf
Crea las claves del primer dispositivo cliente
Es mejor que cada dispositivo tenga su propia pareja de claves, ya que si necesitaras quitar un dispositivo concreto, no podrías si todos tienen la misma.
Vamos a generar las del primer cliente en la Raspberry Pi con:
cd /etc/wireguard
sudo sh -c 'wg genkey | tee client1_private.key | wg pubkey > client1_public.key'
Consulta su clave pública con:
sudo cat client1_public.key
y añade el cliente al final del archivo /etc/wireguard/wg0.conf con este comando:
[Peer]
PublicKey = CLAVE_PUBLICA_CLIENTE
AllowedIPs = 10.8.0.2/32
Crea la configuración de tu PC o móvil
Puedes hacerlo con:
[Interface]
PrivateKey = CLAVE_PRIVADA_CLIENTE
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = CLAVE_PUBLICA_SERVIDOR
Endpoint = IP_PUBLICA_DE_CASA:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Abre el puerto de WireGuard en el router
Con todo lo que hemos hecho, el servidor funcionaría, pero solamente dentro de la red doméstica. Para que reciba conexiones desde Internet, el router tiene que saber a qué equipo debe enviar los paquetes de datos.
Para ello, entra en el panel de administración del router y busca una sección que se llame algo como "Port Forwarding", "NAT", "Redirección de puertos", "Virtual server" o algo así, y crea una regla con estos datos:
| Protocolo | UDP |
|---|---|
| Puerto externo | 51820 |
| IP interna | 192.168.1.50 |
| Puerto interno | 51820 |
Instala WireGuard en el móvil u ordenador
WireGuard cuenta con cliente para Windows, macOS, Android e iOS. En un ordenador simplemente puedes importar el archivo .conf que tenga la configuración anterior.
En un teléfono es muy cómodo porque puedes hacerlo mediante un código QR. Para generarlo desde la Raspberry Pi, escribe primero:
sudo apt install qrencode -y
Luego guarda la configuración del cliente en un archivo, por ejemplo, cliente1.conf, y después ejecuta:
qrencode -t ansiutf8 < client1.conf
Aparecerá entonces un código QR en el terminal que podrás escanear desde la aplicación de WireGuard.
Con todos estos pasos podrás tener un servidor VPN ejecutándose en una Raspberry Pi. Si quieres saber qué más hacer con una Raspberry Pi, te recomendamos que revises los mejores usos para una Raspberry Pi.
La VPN gratuita de Firefox ya está disponible en España
¿Desde cuándo no cambias de móvil?
- Ver Comentarios

