Este repositório contém tudo o necessário para implantar um serviço VPN WireGuard dentro de um container Docker. O WireGuard é uma VPN extremamente simples, porém rápida e moderna, que utiliza criptografia de última geração. Ele visa ser mais rápido, mais simples, mais enxuto e mais útil do que o IPSec, otimizando a execução de VPN com chaves públicas, minimizando o ataque à superfície. O seu desempenho é consideravelmente melhor e mais consistente, mesmo em redes instáveis, tornando-o uma escolha popular para segurança, simplicidade e velocidade.
WireGuard funciona estabelecendo uma conexão de rede segura ponto a ponto ou site a site usando criptografia de última geração. Ele é projetado para ser executado em interfaces virtuais ou físicas para conectar diferentes segmentos de rede. O WireGuard utiliza UDP para a transmissão de dados, o que contribui para sua simplicidade e eficiência.
As portas UDP podem ser alteradas conforme a necessidade, dificultando a descoberta do serviço, o que ocorre com outras tecnologias de tunelamento que utilizam portas e protocolos específicos.
A segurança é uma prioridade máxima no design do WireGuard, que utiliza algoritmos criptográficos reconhecidos por sua força e eficácia, como o Curve25519 para ECDH, ChaCha20 para criptografia simétrica, Poly1305 para autenticação de mensagens, entre outros. Essas escolhas garantem uma conexão segura e privada entre os pontos da rede.
WireGuard está sendo amplamente adotado devido à sua simplicidade de configuração, desempenho superior e robustez de segurança. Ele é adequado tanto para pequenos projetos pessoais quanto para implantações empresariais complexas, fornecendo uma solução VPN moderna que é tanto acessível quanto poderosa.
Para começar, utilize o arquivo docker-compose.example como um ponto de partida. Certifique-se de ajustar as variáveis de ambiente conforme necessário, incluindo chaves privadas e públicas, endereços IP, entre outros.
Para gerar chaves, basta rodar o container sem nenhuma configuração que o container irá gerar um conjunto de chaves privadas/públicas para realizar a configuração das variáveis de ambiente do docker-compose:
user$ docker run --rm cpehub/wireguard
Cpehub - VPN Wireguard
Repositório: https://github.com/cpehub/wireguard
Fatal error: Local private key not found
Generating key:
Local Private Key:
IFB8pqfq0e1r1XS6XisA4YFIP4zXIYWaUEj+E0l7aGo=
Local Public Key (Configure this in the remote peer):
4yzZzqswt81XBiVA9cOiV6/AgCXUUhWwtq24kC2pCRI=
Utilize a chave privada para realizar a configuração do docker-compose, lembre-se que você deve fazer o processo em ambos os peers (ter duas chaves privadas/públicas) para realizar a configuração.
docker-compose.yamlversion: '3.8'
services:
wireguard:
image: cpehub/wireguard
restart: on-failure
network_mode: host
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- LOCAL_PRIVATE_KEY=your_local_private_key
- LOCAL_ADDRESS=192.168.120.1/32
- PEER_PUBLIC_KEY=your_peer_public_key
- PEER_ENDPOINT=peer_ip:peer_port
- PEER_ALLOWED_IPS=192.168.120.2/32,192.168.50.0/24
- LISTEN_PORT=51820
volumes:
- /lib/modules:/lib/modules
healthcheck:
#change the IP here (use peer ip to check connectivity)
test: ["CMD", "sh", "-c", "ping -c 1 -W 10 192.168.120.2"]
interval: 15s
timeout: 8s
retries: 4
start_period: 2m
Substitua os valores de variáveis de ambiente pelos seus próprios valores antes de iniciar o container. Após a configuração, inicie o serviço com:
docker-compose up -d
Para configurar o serviço VPN WireGuard dentro do container, as seguintes variáveis de ambiente podem ser definidas:
LOCAL_PRIVATE_KEY: A chave privada do peer local. Essencial para a autenticação e segurança da conexão VPN.
LOCAL_ADDRESS: O endereço IP (com máscara de rede) atribuído à interface WireGuard no container. Este endereço é usado para comunicação interna na VPN.
PEER_PUBLIC_KEY: A chave pública do peer remoto (outro lado da VPN). Usada para estabelecer uma conexão segura entre os peers.
PEER_ENDPOINT: O endereço IP e a porta do peer remoto. Formato: IP:porta. Especifica como o container deve alcançar o outro lado da VPN.
PEER_ALLOWED_IPS: Uma lista de IPs ou sub-redes separadas por vírgulas que são roteadas através da VPN para o peer remoto. Isso pode incluir IPs individuais (192.168.50.1) ou sub-redes (192.168.50.0/24).
LISTEN_PORT: A porta na qual a interface WireGuard vai escutar por conexões de entrada. Isso é relevante se o container atua como um servidor VPN.
KEEPALIVE: (Opcional) Especifica a frequência, em segundos, com que as mensagens keepalive são enviadas para manter a conexão ativa. Útil em redes que podem fechar conexões inativas.
DNS: (Opcional) Especifica o(s) servidor(es) DNS que devem ser usados pelo peer local. Pode ser útil para resolver nomes de domínio através da VPN.
INTERFACE_NAME: (Opcional) O nome da interface WireGuard, como wg0
Estas variáveis são usadas pelo script de entrada para configurar dinamicamente a interface WireGuard no container, permitindo uma personalização flexível da conexão VPN.
Contribuições para este projeto são bem-vindas. Por favor, abra uma issue ou um pull request com suas sugestões ou melhorias.
Content type
Image
Digest
sha256:446b064d1…
Size
8.5 MB
Last updated
over 2 years ago
docker pull cpehub/wireguard