Pular para o conteúdo principal

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

SintomaCausa provávelSolução
Sem handshakeEndpoint/chave errados ou porta bloqueadaReconfira Endpoint, chaves e firewall
Handshake OK mas não alcança a OLTContêiner não roteia para a LANUse network_mode: host / ajuste rotas
SYS_MODULE/módulo ausenteKernel sem módulo wireguardInstale wireguard no host ou use kernel recente

Veja também