WireGuard com Docker
Este tutorial mostra como subir o lado do ISP da VPN WireGuard em um contêiner Docker, usando a imagem linuxserver/wireguard, depois de ter criado a VPN no Cpehub.
Pré-requisitos
Marque os itens à medida que for conferindo — isso é só um apoio visual, então recarregar a página desmarca tudo de novo.
- A VPN já foi criada no Cpehub (você tem chave pública do Cpehub, endpoint e IPs do túnel).
- Docker e Docker Compose instalados no host.
- O host tem acesso às redes internas do ISP (OLTs).
1. Estrutura
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 se o contêiner precisar rotear para a LAN do ISP:
# network_mode: host
3. config/wg_confs/wg-cpehub.conf
[Interface]
PrivateKey = <SUA_CHAVE_PRIVADA>
Address = <IP_DO_TUNEL_DO_ISP>/32
[Peer]
PublicKey = <CHAVE_PUBLICA_DO_CPEHUB>
Endpoint = <ENDPOINT_DO_CPEHUB>:<PORTA>
AllowedIPs = <REDE_DO_CPEHUB>/32
PersistentKeepalive = 25
Gere o par de chaves (se ainda não tiver) com:
docker run --rm lscr.io/linuxserver/wireguard:latest sh -c 'wg genkey | tee /dev/stderr | wg pubkey'
A chave pública vai para o cadastro da VPN no Cpehub; a privada vai no wg-cpehub.conf.
4. Suba o contêiner
docker compose up -d
5. Verifique
docker exec wireguard-cpehub wg show
Procure por latest handshake recente.
Roteamento para a LAN
Para o Cpehub alcançar as OLTs, o tráfego do túnel precisa chegar à sua rede interna. Em muitos cenários é necessário usar network_mode: host (ou publicar rotas do host), além de garantir ip_forward. Ajuste conforme a sua topologia.
Problemas comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
| Sem handshake | Endpoint/chave errados ou porta bloqueada | Reconfira Endpoint, chaves e firewall |
| Handshake OK mas não alcança a OLT | Contêiner não roteia para a LAN | Use network_mode: host / ajuste rotas |
SYS_MODULE/módulo ausente | Kernel sem módulo wireguard | Instale wireguard no host ou use kernel recente |