WireGuard con Docker
Este tutorial muestra cómo levantar el lado del ISP de la VPN WireGuard en un contenedor Docker, usando la imagen linuxserver/wireguard, después de haber creado la VPN en Cpehub.
Requisitos previos
Marque los elementos a medida que los vaya confirmando — esto es solo un apoyo visual, así que recargar la página los desmarca de nuevo.
- La VPN ya fue creada en Cpehub (usted tiene la clave pública de Cpehub, el endpoint y las IPs del túnel).
- Docker y Docker Compose instalados en el host.
- El host tiene acceso a las redes internas del ISP (OLTs).
1. Estructura
wireguard-cpehub/
├── docker-compose.yml
└── config/
└── wg_confs/
└── wg-cpehub.conf
2. docker-compose.yml
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard-cpehub
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=America/Sao_Paulo
volumes:
- ./config:/config
- /lib/modules:/lib/modules
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
restart: unless-stopped
# Use host network si el contenedor necesita enrutar hacia la LAN del ISP:
# network_mode: host
3. config/wg_confs/wg-cpehub.conf
[Interface]
PrivateKey = <SU_CLAVE_PRIVADA>
Address = <IP_DEL_TUNEL_DEL_ISP>/32
[Peer]
PublicKey = <CLAVE_PUBLICA_DE_CPEHUB>
Endpoint = <ENDPOINT_DE_CPEHUB>:<PUERTO>
AllowedIPs = <RED_DE_CPEHUB>/32
PersistentKeepalive = 25
Genere el par de claves (si aún no lo tiene) con:
docker run --rm lscr.io/linuxserver/wireguard:latest sh -c 'wg genkey | tee /dev/stderr | wg pubkey'
La clave pública va en el registro de la VPN en Cpehub; la privada va en wg-cpehub.conf.
4. Levante el contenedor
docker compose up -d
5. Verifique
docker exec wireguard-cpehub wg show
Busque un latest handshake reciente.
Enrutamiento hacia la LAN
Para que Cpehub alcance las OLTs, el tráfico del túnel debe llegar a su red interna. En muchos escenarios es necesario usar network_mode: host (o publicar rutas del host), además de garantizar ip_forward. Ajuste según su topología.
Problemas comunes
| Síntoma | Causa probable | Solución |
|---|---|---|
| Sin handshake | Endpoint/clave incorrectos o puerto bloqueado | Revise Endpoint, claves y firewall |
| Handshake OK pero no alcanza la OLT | El contenedor no enruta hacia la LAN | Use network_mode: host / ajuste rutas |
Falta SYS_MODULE/módulo | Kernel sin el módulo wireguard | Instale wireguard en el host o use un kernel reciente |