O WireGuard é uma ótima VPN para o futuro?


Chegou o momento em que a VPN não é mais um tipo de ferramenta exótica para administradores de sistemas barbudos. Os usuários têm tarefas diferentes, mas o fato é que todos precisam de uma VPN.


O problema das soluções VPN atuais é que elas são difíceis de configurar corretamente, caras de manter e também possuem muitos códigos herdados de qualidade duvidosa.


Alguns anos atrás, o especialista canadense em segurança da informação Jason A. Donenfeld decidiu que tinha que suportar isso e começou a trabalhar no WireGuard . Agora o WireGuard está se preparando para ser incluído no kernel do Linux, e até recebeu elogios de Linus Torvalds e do Senado dos EUA .


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


  • Fácil de usar.
  • Utiliza criptografia moderna: estrutura de protocolo de ruído, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Código legível compacto, mais fácil de investigar quanto a vulnerabilidades.
  • Alto desempenho.
  • Especificação clara e detalhada.

É encontrada uma bala de prata? É hora de cavar no OpenVPN e IPSec? Decidi lidar com isso e, ao mesmo tempo, criei um script para instalar automaticamente um servidor VPN pessoal .


Princípios de trabalho


Os princípios de operação podem ser descritos da seguinte maneira:


  • Uma interface WireGuard é criada, é atribuída uma chave privada e um endereço IP. As configurações de outros pares 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 entregues com segurança a outros pares.
  • Os clientes definem o endereço IP público do servidor nas configurações. O servidor reconhece automaticamente os endereços externos dos clientes quando dados autenticados corretamente vêm deles.
  • O servidor pode alterar o endereço IP público sem interromper o trabalho. Ao mesmo tempo, ele enviará um alerta aos clientes conectados e eles atualizarão sua configuração em tempo real.
  • O conceito de roteamento Cryptokey é usado . O WireGuard recebe e envia pacotes com base na chave pública do par. Quando o servidor descriptografa um pacote autenticado corretamente, seu campo src é verificado. Se corresponder à allowed-ips autenticado, o pacote será recebido pela interface do WireGuard. Ao enviar um pacote de saída, ocorre o procedimento correspondente: o campo dst do pacote é obtido e o par correspondente é selecionado com base nele, o pacote é assinado com sua própria chave, criptografado com a chave do par e enviado para o terminal remoto.

Toda a lógica central do WireGuard ocupa menos de 4 mil linhas de código, enquanto o OpenVPN e o IPSec têm centenas de milhares de linhas. Para oferecer suporte a algoritmos criptográficos modernos, propõe-se incluir a nova API criptográfica Zinc no kernel do Linux. No momento, há uma discussão de quão boa é essa ideia.


Desempenho


A vantagem máxima de desempenho (comparada ao OpenVPN e IPSec) será notável nos sistemas Linux, pois o WireGuard é implementado como um módulo do kernel. Além disso, são suportados macOS, Android, iOS, FreeBSD e OpenBSD, mas o WireGuard é executado no espaço do usuário com todas as implicações de desempenho resultantes. O Windows promete adicionar suporte em um futuro próximo.


Resultados de referência do site oficial :



Minha experiência de uso


Não sou especialista em configuração de VPN. Uma vez eu configurei o OpenVPN com alças e ficou muito triste, mas o IPSec nem tentou. Muitas decisões precisam ser tomadas; é muito fácil dar um tiro no próprio pé. Portanto, sempre usei scripts prontos para configurar o servidor.


Portanto, o WireGuard, do meu ponto de vista, geralmente é ideal para o usuário. Todas as decisões de baixo nível são tomadas na especificação, portanto, o processo de preparação de uma infraestrutura VPN típica leva apenas alguns minutos. É quase impossível acumular na configuração.


O processo de instalação é descrito em detalhes no site oficial. Gostaria de mencionar um excelente suporte ao OpenWRT .


As chaves de criptografia são geradas pelo utilitário 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, você precisa criar o servidor config /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 eleve o túnel com o script wg-quick :


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

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


Na máquina cliente, crie 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  PersistentKeepalive = 25 

E levante o túnel da mesma maneira:


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

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


Essa facilidade de uso e compactação da base de código foram alcançadas devido à rejeição da funcionalidade de distribuição de chaves. Não existe um sistema de certificação complicado e todo esse horror corporativo: chaves curtas de criptografia são distribuídas aproximadamente como chaves SSH. Mas, em conexão com isso, surge um problema: o WireGuard não será tão fácil de implementar em algumas redes existentes.


Entre as deficiências, vale ressaltar que o WireGuard não funcionará por meio de um proxy HTTP, pois existe apenas o protocolo UDP como transporte. A questão é: é possível ofuscar o protocolo? Obviamente, essa não é uma tarefa direta da VPN, mas para o OpenVPN, por exemplo, existem maneiras de se disfarçar de HTTPS, que ajuda os residentes de países totalitários a usarem totalmente a Internet.


Conclusões


Resumindo, este é um projeto muito interessante e promissor, agora você pode usá-lo em servidores pessoais. Qual é o lucro? Alto desempenho em sistemas Linux, facilidade de configuração e suporte, base de código compacta e legível. No entanto, ainda é muito cedo para transferir uma infraestrutura complexa para o WireGuard, vale a pena esperar pela inclusão no kernel do Linux.


Para economizar meu (e seu) tempo, desenvolvi o instalador automático do WireGuard . Com isso, você pode criar uma VPN pessoal para você e seus amigos sem nem mesmo entender nada.

Source: https://habr.com/ru/post/pt432686/


All Articles