Chegou a hora em que a VPN não é mais uma ferramenta exótica de administradores de sistema barbudos. Os usuários têm tarefas diferentes, mas o fato é que todos precisam de uma VPN.
O problema com as soluções VPN atuais é que elas são difíceis de configurar corretamente, caras para manter e estão cheias de código legado de qualidade questionável.
Vários anos atrás, o especialista canadense em segurança da informação Jason A. Donenfeld decidiu que já estava farto e começou a trabalhar em WireGuard. O WireGuard agora está sendo preparado para inclusão no kernel Linux e até recebeu elogios de Linus Torvalds e Senado dos EUA.
Vantagens reivindicadas do WireGuard sobre outras soluções VPN:
Fácil de usar.
Usa criptografia moderna: estrutura de protocolo de ruído, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
Código compacto e legível, mais fácil de investigar vulnerabilidades.
Os princípios operacionais podem ser descritos mais ou menos assim:
Uma interface WireGuard é criada e uma 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 entregue com segurança outros pares.
Os clientes especificam 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 são recebidos deles.
O servidor pode alterar o endereço IP público sem interromper seu trabalho. Ao mesmo tempo, enviará um alerta aos clientes conectados e eles atualizarão suas configurações instantaneamente.
O conceito de roteamento é usado Roteamento de criptomoeda. WireGuard aceita e envia pacotes com base na chave pública do peer. Quando o servidor descriptografa um pacote autenticado corretamente, seu campo src é verificado. Se corresponder à configuração allowed-ips peer autenticado, o pacote é recebido pela interface WireGuard. Ao enviar um pacote de saída, ocorre o procedimento correspondente: o campo dst do pacote é tomado e, com base nele, o peer correspondente é selecionado, o pacote é assinado com sua chave, criptografado com a chave do peer e enviado ao endpoint remoto .
Toda a lógica central do WireGuard ocupa menos de 4 mil linhas de código, enquanto OpenVPN e IPSec possuem centenas de milhares de linhas. Para suportar algoritmos criptográficos modernos, propõe-se incluir uma nova API criptográfica no kernel Linux zinco. Atualmente há uma discussão em andamento sobre se isso é uma boa ideia.
Desempenho
A vantagem máxima de desempenho (em comparação com OpenVPN e IPSec) será perceptível em sistemas Linux, uma vez que o WireGuard é implementado como um módulo de kernel. Além disso, macOS, Android, iOS, FreeBSD e OpenBSD são suportados, mas neles o WireGuard é executado no espaço do usuário com todas as consequências de desempenho resultantes. Espera-se que o suporte do Windows seja adicionado em um futuro próximo.
Não sou um especialista em VPN. Certa vez, configurei o OpenVPN manualmente e foi muito tedioso, e nem tentei o IPSec. Há muitas decisões a tomar, é muito fácil dar um tiro no próprio pé. Por isso, sempre usei scripts prontos para configurar o servidor.
Então, 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 trapacear na configuração.
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 eliminando a funcionalidade de distribuição de chaves. Não existe um sistema de certificados complexo e todo esse horror corporativo; chaves de criptografia curtas são distribuídas de forma semelhante às chaves SSH. Mas isto representa um problema: o WireGuard não será tão fácil de implementar em algumas redes existentes.
Entre as desvantagens, vale destacar que o WireGuard não funcionará via proxy HTTP, pois apenas o protocolo UDP está disponível como transporte. Surge a pergunta: será possível ofuscar o protocolo? É claro que esta não é tarefa direta de uma VPN, mas para o OpenVPN, por exemplo, existem maneiras de se disfarçar como HTTPS, o que ajuda os residentes de países totalitários a usar plenamente a Internet.
Descobertas
Resumindo, este é um projeto muito interessante e promissor, você já pode utilizá-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. Porém, ainda é cedo para se apressar na transferência de uma infraestrutura complexa para o WireGuard, vale a pena aguardar sua inclusão no kernel Linux.
Para economizar meu (e seu) tempo, desenvolvi Instalador automático WireGuard. Com sua ajuda, você pode configurar uma VPN pessoal para você e seus amigos, mesmo sem entender nada sobre isso.