O WireGuard no kernel está a caminho do FreeBSD e do roteador pfSense

Captura de tela do terrível logotipo da WireGuard.
Prolongar /. O FreeBSD terá seu próprio módulo WireGuard no kernel em um futuro próximo, graças a uma contribuição de código patrocinada da Netgate, seguida por um código adicional e uma revisão por Jason Donenfeld e vários desenvolvedores FreeBSD e OpenBSD.

Esta manhã, a WireGuard fundou o fundador Jason Donenfeld anunciado uma implementação in-core funcional de seu protocolo VPN WireGuard para o kernel do FreeBSD 13. Esta é uma ótima notícia para o pessoal do BSD – e usuários de dispositivos de roteamento baseados em BSD e distribuições como PfSense e opnSense.

Se você não estiver familiarizado com o WireGuard, as conexões serão estabelecidas mais rápido do que VPNs tradicionais como o OpenVPN. Em nossa experiência pessoal, é extremamente mais confiável, mesmo quando gerenciando um grande número de conexões. Seu autor passou várias horas por mês bombardeando máquinas e até reconstruindo manualmente túneis OpenVPN quebrados depois disto Ao escrever scripts de watchdog para tentar detectá-los e recuperá-los automaticamente, tudo é retirado e essa rede para monitorar centenas de máquinas é substituída por uma infraestrutura baseada em WireGuard que é reduzida a “zero horas por mês”.

Além de desempenho e confiabilidade, o WireGuard oferece protocolos modernos, criptografia versionada que literalmente não pode ser configurada incorretamente e uma base de código muito mais limpa e mais leve do que a maioria de seus concorrentes – Linus Torvalds uma vez declarou que é uma “obra de arte” em comparação com o OpenVPN e IPSec.

Política no kernel

Embora WireGuard pousado No kernel do Linux, a inclusão no kernel do FreeBSD está há muito tempo no roteiro geral. Em fevereiro de 2020, o desenvolvedor do FreeBSD Matt Macy empurrou a primeira compra do WireGuard comprometer-se para o FreeBSD. O trabalho da Macy foi encomendado diretamente da Netgate, a empresa por trás da distribuição de roteadores pfSense com base em BSD.

Depois de quase um ano de trabalho, o porto de Macy’s estava importado ao kernel planejado para o FreeBSD 13.0-RELEASE, que deve ser lançado em 15 dias. Infelizmente, houve um problema – após Jason Donenfeld da WireGuard analisá-lo com vários desenvolvedores FreeBSD e OpenBSD, ele foi avaliado ainda não horário nobre:

Eu imaginei vozes estranhas da internet zombando: “Isso faz com que C seja uma fama!” Estados de hibernação aleatórios foram adicionados para “consertar” as condições de corrida, funções de validação que acabaram de retornar reais, vulnerabilidades criptográficas catastróficas, partes inteiras do protocolo que não foram implementadas, kernel panic, desvios de segurança, overflows, instruções printf aleatórias profundas no Criptocódigo, os estouros de buffer mais espetaculares e toda a ladainha de coisas horríveis que dão errado quando as pessoas não tomam cuidado ao escrever C.

Compreensivelmente, esse foi um grande problema para Dönfeld – embora o protocolo WireGuard em si seja de código aberto, um projeto contém mais do que apenas código. Muito do que alimentou a ascensão meteórica do WireGuard foi sua brevidade e correção de código, que foi avaliada pelo fundador do Linux, Linus Torvalds, e se reflete na confiabilidade do projeto e na falta de grandes falhas desde sua popularidade. Uma implementação menos do que excelente no FreeBSD poderia danificar a marca WireGuard – possivelmente irrevogavelmente.

Isso deixou o porte do FreeBSD preso entre uma rocha e um lugar difícil – Donenfeld acreditava que o código patrocinado pelo Netgate não estava pronto para consumo público, mas o Netgate estava anunciado Suporte do WireGuard no próximo pfSense 2.5.

Dada a posição exposta do Netgate, Donenfeld procurou os desenvolvedores principais do FreeBSD Kyle Evans e Matt Dunwoodie, e os três partiram em uma corrida insana de uma semana para atualizar o código problemático. Dönfeld descreve parte do processo:

… 40.000 linhas de implementações criptográficas otimizadas foram retiradas do módulo compatível com o kernel do Linux, mas não foram devidamente conectadas e irreparavelmente distorcidas com labirintos de Linux → FreeBSD ifdefs. Substituí isso por um arquivo de 1.800 linhas. crypto.cContém todos os elementos criptográficos básicos necessários para implementar o WireGuard.

Isso corresponde em grande parte à codificação usual de Dönfeld Modo de operação– A razão pela qual o WireGuard tem 4.000 linhas de código no Linux em cima das 400.000 do OpenVPN tem muito a ver com a remoção de Cruft herdado e sua substituição por código focado apenas o suficiente para fazer o trabalho.

Infelizmente para o Netgate, nem o código patrocinado nem o sprint de uma semana de Donenfeld, Dunwoodie e Evans parecem chegar ao FreeBSD 13.0. A equipe do FreeBSD provavelmente desativará completamente o módulo WireGuard para 13.0-RELEASE e revisitará para 13.1-RELEASE com uma porta inválida e outra revisão massiva.

Controvérsia passada e desenvolvimento atual

Essa colaboração claramente não estava indo bem. Dönfeld expressou frustração com a falha da Netgate em contatá-lo diretamente e – depois de descobrir sua porta comissionada – uma falta de interesse em trabalhar com ele:

Eles não se preocuparam em terminar o projeto. Tudo bem, pensei, vou ver se posso ajudar e coordenar. O que se seguiu no ano seguinte foi uma série de comunicações ruins – mensagens sem resposta, revisões de código ignoradas, esse tipo de coisa. […] Em algum ponto, o código que estava por aí foi adicionado à árvore do FreeBSD e o desenvolvedor encarregado de escrevê-lo seguiu em frente.

Este é um típico conflito de interesse de código aberto – o Projeto A contrata o Desenvolvedor B para fazer x horas de trabalho, mas o Projeto C relacionado diz que leva x * 2 horas de trabalho para acertar. Com boas linhas de comunicação e um mínimo de ego, geralmente há alguma maneira de resolver este tipo de conflito – mas um história problemática como acontece com o Netgate, esses canais de comunicação podem ser facilmente danificados.

Apesar das idas e vindas, esse porte deve ser visto como uma clássica história de sucesso para o desenvolvimento de software de código aberto. A comissão inicial de desenvolvedor da Netgate deu início a uma adição extremamente valiosa ao kernel do FreeBSD. Esta comissão, por sua vez, gerou interesse e acompanhamento importante de ambos os desenvolvedores principais do WireGuard e do FreeBSD e, no final das contas, resultará em uma porta WireGuard confiável e de alta qualidade para usuários do FreeBSD e também do Netgates.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top