VPN con Wireguard en Docker: Acceso seguro a servicios internos sin exponer puertos
Etiquetas: wireguard,docker,vpn,seguridad,servidor-domésticoPor qué necesitas esto
Hace unos meses me enfrenté a un problema común: quería acceder a mis servicios internos (Jellyfin, Home Assistant, etc.) desde fuera de casa, pero no quería exponerlos directamente en internet. Abrir puertos es un riesgo innecesario. La solución fue montar una VPN con Wireguard en Docker. Fue la mejor decisión que tomé para mi infraestructura casera.
Ventajas de Wireguard
- Ligero: consume menos recursos que OpenVPN
- Rápido: protocolo moderno y eficiente
- Fácil de configurar: comparado con otras alternativas
- Seguro: criptografía de última generación
- Docker-friendly: hay imágenes oficiales excelentes
Preparación
Necesitas:
– Un servidor con Docker instalado
– El archivo docker-compose.yml
– Un dominio o IP pública (para conectarte desde fuera)
– Los clientes Wireguard en tus dispositivos
Instalación paso a paso
1. Crear el directorio de configuración
mkdir -p ~/wireguard/config
cd ~/wireguard
2. Docker Compose
Crea el archivo docker-compose.yml:
version: '3.8'
services:
wireguard:
image: linuxserver/wireguard:latest
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
- SERVERURL=tu-dominio-o-ip-publica.com
- SERVERPORT=51820
- PEERS=telefono,laptop,tablet
- PEERDNS=auto
ports:
- "51820:51820/udp"
volumes:
- ./config:/config
- /lib/modules:/lib/modules:ro
networks:
- mi-red
restart: unless-stopped
networks:
mi-red:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24
Reemplaza:
– tu-dominio-o-ip-publica.com con tu dirección real
– Los PEERS con los nombres de tus dispositivos
– La zona horaria según tu ubicación
3. Iniciar el contenedor
docker-compose up -d
Los archivos de configuración se generarán automáticamente en ./config. Espera unos segundos y verifica:
ls -la config/peer_*/
4. Obtener los códigos QR
Para conectar tus dispositivos:
docker exec wireguard cat /config/peer_telefono/peer_telefono.conf
O directamente los QR:
docker exec wireguard qrencode -t ansiutf8 < /config/peer_telefono/peer_telefono.conf
Escanea con tu cliente Wireguard en cada dispositivo.
Conectar servicios internos
Aquí viene lo importante. Quiero acceder a servicios en mi red interna. Para esto, modifico el docker-compose.yml y añado rutas:
environment:
- ALLOWEDIPS=10.0.0.0/24,192.168.1.0/24
Esto permite que desde la VPN accedas a la red 192.168.1.0/24 (tu red local).
En el servidor, habilita el forwarding:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Acceso desde clientes
Una vez conectado a la VPN, accedes a tus servicios usando sus IPs internas:
http://192.168.1.100:8096para Jellyfinhttp://192.168.1.50:8123para Home Assistant- Lo que necesites en tu red
Mantenimiento
Renovar certificados (cada 6 meses aproximadamente):
docker exec wireguard /app/wireguard-tools/show-peer peer_nombre
Añadir un nuevo dispositivo:
docker-compose down
# Edita PEERS en docker-compose.yml
docker-compose up -d
Notas finales
- Abre solo el puerto 51820/UDP en tu router
- Usa firewall en el servidor para bloquear acceso innecesario
- Verifica que el forwarding de IPs está activo
- Monitoriza el tráfico de la VPN regularmente
Llevo varios meses con esta configuración y es totalmente estable. Accedo a mis servicios desde cualquier parte sin nervios de seguridad. Definitivamente, recomiendo este setup a cualquiera que quiera mantener su infraestructura doméstica privada pero accesible.
Equipamiento recomendado
- Raspberry Pi 3 B+ — Servidor ligero de bajo consumo para empezar tu homelab
- Raspberry Pi 4 (4GB) — La base perfecta para homelab, Docker y monitorización
- TECLAST T65 Tablet 13.4″ Android 16 con teclado y lápiz — Cliente WireGuard portable: gestiona tus servicios desde cualquier lugar
Enlaces de afiliado. Sin coste extra para ti.