WireGuard — o VPN promissor do futuro?

WireGuard — o VPN promissor do futuro?

Chegou a hora em que uma VPN já não é mais uma ferramenta exótica usada apenas por administradores de sistemas com barbas. As necessidades dos usuários são diversas, mas o fato é que a VPN se tornou necessária para todos.

O problema das soluções VPN atuais é que elas são difíceis de configurar corretamente, caras de manter e estão repletas de códigos legados de qualidade duvidosa.

Há alguns anos, o especialista canadense em segurança da informação Jason A. Donenfeld decidiu que era hora de acabar com isso e começou a trabalhar em WireGuard. Neste momento, o WireGuard está se preparando para ser incorporado ao núcleo do Linux, recebendo até mesmo elogios de Linus Torvalds e no Senado americano.

As vantagens declaradas do WireGuard sobre outras soluções VPN:

  • Fácil de usar.
  • Utiliza criptografia moderna: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Código compacto e legível, mais fácil de pesquisar por vulnerabilidades.
  • Alta performance.
  • Clareza e planejamento especificação.

Será que finalmente encontramos a solução ideal? É hora de enterrar o OpenVPN e o IPSec? Eu decidi investigar isso e, aproveitando a oportunidade, criei um script para instalação automática de um servidor VPN pessoal.

Princípios de funcionamento

Os princípios de funcionamento podem ser descritos da seguinte forma:

  • Uma interface WireGuard é criada, um chave privada e um endereço IP são atribuídos a ela. As configurações de outros peers são carregadas: suas chaves públicas, endereços IP, etc.
  • Todos os pacotes IP que chegam à interface WireGuard são encapsulados em UDP e são entregues com segurança para outros peers.
  • Os clientes definem o endereço IP público do servidor em suas configurações. O servidor automaticamente descobre os endereços externos dos clientes quando recebe dados corretamente autenticados.
  • O servidor pode mudar seu endereço IP público sem interromper o funcionamento. Nesse caso, ele enviará uma notificação aos clientes conectados, e eles atualizarão sua configuração em tempo real.
  • Utiliza o conceito de roteamento Cryptokey Routing. O WireGuard aceita e envia pacotes com base na chave pública do peer. Quando o servidor descriptografa um pacote corretamente autenticado, ele verifica seu campo src. Se corresponder à configuração allowed-ips do peer autenticado, o pacote é aceito pela interface do WireGuard. Ao enviar um pacote de saída, ocorre um procedimento correspondente: o campo dst do pacote é usado para selecionar o peer correspondente, o pacote é assinado com sua chave, criptografado com a chave do peer e enviado ao ponto remoto.

Toda a lógica principal do WireGuard ocupa menos de 4 mil linhas de código, enquanto o OpenVPN e IPSec têm centenas de milhares de linhas. Para suportar os algoritmos criptográficos modernos, propõe-se incluir um novo API criptográfico no núcleo do Linux. Zinc. Atualmente, está em discussão quão boa é essa ideia.

Desempenho

O máximo benefício de desempenho (em comparação com OpenVPN e IPSec) será notado em sistemas Linux, pois o WireGuard é implementado como um módulo do núcleo. Além disso, é suportado em macOS, Android, iOS, FreeBSD e OpenBSD, mas nesses sistemas, o WireGuard é executado no espaço do usuário, com todas as consequências para o desempenho. O suporte para Windows promete ser adicionado em breve.

Resultados de benchmarks com site oficial:

WireGuard — o VPN promissor do futuro?

Minha experiência de uso

Eu não sou um especialista na configuração de VPN. Uma vez configurei o OpenVPN manualmente e foi muito complicado, e não tentei sequer o IPSec. Muitas decisões precisam ser tomadas, é muito fácil se machucar. Portanto, sempre usei scripts prontos para configurar o servidor.

Portanto, o WireGuard, na minha opinião, é ideal para o usuário. Todas as decisões de baixo nível foram tomadas na especificação, por isso o processo de preparação de uma infraestrutura típica de VPN leva apenas alguns minutos. É praticamente impossível cometer um erro na configuração.

não foi fácil. detalhado no site oficial, quero destacar a excelente suporte ao OpenWRT.

As chaves de criptografia são geradas pela ferramenta wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Em seguida, é necessário criar a configuração do servidor /etc/wireguard/wg0.conf com o seguinte conteúdo:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

e levantar o túnel com o script wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

Em sistemas com systemd, pode-se usar sudo systemctl start wg-quick@wg0.service.

No computador cliente, criar a configuração /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # IP externo do servidor
PersistentKeepalive = 25 

E exatamente da mesma forma levantar o túnel:

sudo wg-quick up /etc/wireguard/wg0.conf

Resta configurar o NAT no servidor, para que os clientes possam acessar a Internet, e tudo estará pronto!

Essa simplicidade de uso e a compactação do código foram alcançadas ao abrir mão da funcionalidade de distribuição de chaves. Não há um sistema complexo de certificados e todo esse horror corporativo; chaves de criptografia curtas são distribuídas de forma semelhante às chaves SSH. No entanto, surge uma questão: o WireGuard não será tão fácil de implementar em algumas redes já existentes.

Entre as desvantagens, vale mencionar que o WireGuard não funcionará através de proxy HTTP, pois o transporte é exclusivamente pelo protocolo UDP. Surge a dúvida: seria possível ofuscar o protocolo? Claro, essa não é uma tarefa direta para VPNs, mas, por exemplo, existem formas de mascarar o OpenVPN sob HTTPS, o que ajuda residentes em países totalitários a usarem a Internet plenamente.

Como resultado, obtemos um serviço de "monitoramento como serviço", automatizado na linha de produção de integração contínua. O desenvolvedor ou testador precisa apenas definir a lista de métricas em um arquivo JSON, e tudo o mais acontece automaticamente. Obtemos um controle de qualidade transparente dos lançamentos: todas as notificações sobre desempenho, consumo de recursos ou regressões arquitetônicas.

Em resumo, este é um projeto muito interessante e promissor, que já pode ser utilizado em servidores pessoais. Qual é a vantagem? Alta performance em sistemas Linux, simplicidade na configuração e manutenção, e uma base de código compacta e legível. Contudo, é cedo demais para migrar uma infraestrutura complexa para o WireGuard; é melhor aguardar sua inclusão no núcleo do Linux.

Para economizar meu (e seu) tempo, eu desenvolvi um instalador automático do WireGuard. Com ele, é possível configurar uma VPN pessoal para você e seus conhecidos mesmo sem entender muito do assunto.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster