VPN & WireGuard
Rud1 usa WireGuard para proporcionar conectividad segura y de baja latencia entre los dispositivos y tu infraestructura, sin necesidad de IPs públicas en los dispositivos.
Arquitectura VPN de Rud1
Cuando un dispositivo se registra en rud1-es, la plataforma puede gestionar su configuración WireGuard de forma centralizada. El flujo es:
- rud1-es genera la configuración WireGuard para el dispositivo (par de claves, IP asignada, endpoint del servidor)
- La configuración se envía al dispositivo mediante
POST /api/vpn/configen la API local del agente - El agente escribe el fichero
/etc/wireguard/wg0.confy activa la interfaz - El dispositivo incluye el estado VPN (conectado/desconectado, IP) en cada heartbeat
- rud1-es muestra el estado VPN en tiempo real en el dashboard
ℹ️ El servidor WireGuard actúa como hub central (topología hub-and-spoke). Los dispositivos establecen conexión saliente hacia el servidor, por lo que no necesitan una IP pública.
Requisitos del servidor VPN
Necesitas un servidor WireGuard accesible desde internet (hub). Las opciones habituales son:
- VPS propio: cualquier servidor Ubuntu/Debian con WireGuard instalado. Necesita IP pública y puerto UDP 51820 abierto.
- Servicio gestionado: cualquier servicio compatible con WireGuard (Tailscale, Headscale, etc.).
Configurar el servidor WireGuard
Instalación en Ubuntu/Debian
# Instalar WireGuard sudo apt install wireguard -y # Generar claves del servidor wg genkey | sudo tee /etc/wireguard/private.key sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key sudo chmod 600 /etc/wireguard/private.key
Archivo de configuración del servidor
[Interface] PrivateKey = <SERVER_PRIVATE_KEY> Address = 10.0.0.1/24 ListenPort = 51820 # Habilita el reenvío de paquetes (NAT para acceso a internet desde dispositivos) PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # Los peers (dispositivos) se añaden a continuación # [Peer] # PublicKey = <DEVICE_PUBLIC_KEY> # AllowedIPs = 10.0.0.2/32
# Activar WireGuard e iniciar con el sistema sudo wg-quick up wg0 sudo systemctl enable wg-quick@wg0 # Verificar que está corriendo sudo wg show
⚠️ Recuerda habilitar el reenvío de paquetes IP en el servidor: echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Añadir peer para un dispositivo
Por cada Raspberry Pi que quieras conectar a la VPN, debes añadir un peer al servidor. Primero obtén la clave pública del dispositivo (generada por rud1-fw o por ti) y luego añade el peer:
# Añadir peer dinámicamente (sin reiniciar WireGuard) sudo wg set wg0 peer <DEVICE_PUBLIC_KEY> allowed-ips 10.0.0.2/32 # O edita /etc/wireguard/wg0.conf y añade: [Peer] PublicKey = <DEVICE_PUBLIC_KEY> AllowedIPs = 10.0.0.2/32 # Luego recarga la configuración sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
Configuración WireGuard en el dispositivo
El archivo /etc/wireguard/wg0.conf en la Raspberry Pi es escrito automáticamente por el agente rud1-fw cuando rud1-es le envía la configuración. El contenido típico es:
[Interface] PrivateKey = <DEVICE_PRIVATE_KEY> Address = 10.0.0.2/24 DNS = 1.1.1.1 [Peer] PublicKey = <SERVER_PUBLIC_KEY> Endpoint = vpn.tuempresa.com:51820 AllowedIPs = 0.0.0.0/0 # Recomendado para mantener la conexión detrás de NAT: PersistentKeepalive = 25
💡 AllowedIPs = 0.0.0.0/0 enruta todo el tráfico del dispositivo a través de la VPN (full-tunnel). Si solo quieres acceso a la red privada del servidor, usa AllowedIPs = 10.0.0.0/24 (split-tunnel).
Verificar la conexión VPN
# Ver estado de WireGuard sudo wg show # Debe mostrar el peer del servidor con "latest handshake" reciente (< 2 minutos) # Probar conectividad al servidor ping 10.0.0.1 # Ver desde rud1-app # VPN → debe mostrar "VPN Conectada" # Ver desde rud1-es # Pestaña VPN del dispositivo → connected: true
Solución de problemas VPN
Alerta "VPN Down" en rud1-es
Primero verifica que el dispositivo tiene conexión a internet: ping 8.8.8.8. Si hay internet, comprueba que el archivo /etc/wireguard/wg0.conf existe y es correcto. Prueba a reconectar manualmente:
sudo wg-quick down wg0 && sudo wg-quick up wg0
No hay handshake (latest handshake vacío)
- Verifica que el servidor está corriendo:
sudo wg showen el servidor - Comprueba que el puerto UDP 51820 está abierto en el firewall del servidor:
sudo ufw allow 51820/udp - Verifica que la IP/dominio del servidor en
Endpointes correcta y resoluble - Comprueba que la clave pública del dispositivo está añadida como peer en el servidor
IP incorrecta en el dispositivo
Verifica que la Address en la config del dispositivo y los AllowedIPs en el servidor coinciden. Cada dispositivo debe tener una IP única en el rango de la VPN.
Desconexiones frecuentes
Añade PersistentKeepalive = 25 en la sección [Peer] del archivo de configuración del dispositivo. Esto envía un paquete keepalive cada 25 segundos para mantener la conexión a través de NAT.