Um Raspberry Pi que só precisa de proteger o seu próprio tráfego de saída tem dois desenhos realistas: deixar o gestor de rede possuir o túnel, ou manter um script que o possua. Ambos conseguem transportar tráfego. Falham em locais diferentes, e a falha que consegue diagnosticar remotamente às duas da manhã é a que vale a pena escolher. Compare-os na propriedade, no que significa túnel completo quando entram IPv6 e DNS, e no que acontece no momento em que o túnel cai.

Dois donos para um túnel

O desenho A é um perfil dentro do gestor de rede do sistema: um perfil OpenVPN importado ou uma ligação WireGuard nativa, ativada no arranque pelo mesmo serviço que levanta o Ethernet e o Wi-Fi. O desenho B é uma unidade sua que executa o cliente diretamente, edita a configuração do resolvedor e instala as suas próprias rotas e regras de firewall. Ambos são desenhos legítimos; diferem em quem tem permissão para alterar a tabela de encaminhamento.

As falhas diferem porque os donos diferem. Com A, um perfil que não ativa deixa a interface em cima e o túnel em baixo, e os registos do gestor dizem porquê. Com B, um script que tem sucesso a meio deixa rotas que sobrevivem ao processo que as criou. Executar os dois é o pior resultado: dois processos a escrever a rota predefinida, duas edições do resolvedor a competir no arranque e dois conjuntos de segredos a rodar.

Escolha um dono por túnel e desative o outro antes de testar o que quer que seja. Dois donos significam também dois locais onde olhar quando o túnel está em cima e nada se resolve. Essa única regra evita a maioria dos estados confusos descritos nos fios de Pi VPN.

O que uma importação cria e o que não cria

No Raspberry Pi OS Bookworm e posteriores, a ferramenta de configuração de rede predefinida é o NetworkManager, pelo que um perfil é a casa natural para um túnel de cliente. A importação exige o plugin correspondente instalado; sem ele, a importação falha com uma mensagem sobre um tipo de ligação não suportado, que é o sinal honesto para parar e instalar o plugin.

nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name

Importar guarda um perfil. Não prova que o outro lado está acessível, nem garante que cada diretiva do ficheiro sobreviveu à conversão. Releia a ligação resultante e verifique as partes que transportam identidade e confiança: o certificado, o anfitrião remoto e a porta, e se é pedida ou guardada uma palavra-passe.

A ativação com --ask mantém a frase-passe fora do histórico da shell numa máquina partilhada. Para um Pi sem supervisão, ao fim de algum tempo vai querer que o perfil suba no arranque, o que é uma decisão separada de o levantar uma vez à mão.

Túnel completo, comparado nos dois desenhos

Um túnel completo é uma afirmação sobre rotas, não sobre intenções, e os dois desenhos exprimem-no de forma diferente. A abordagem com perfil pede ao gestor que instale uma rota predefinida e os seus parâmetros de resolvedor; a abordagem com script faz o que o script diz, incluindo nada. Nenhum dos desenhos cobre IPv6 a menos que lhe seja dito, e uma rota predefinida IPv6 intacta levará alegremente tráfego para fora do túnel enquanto o IPv4 parece perfeito.

ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org

Use um endereço de documentação para a consulta de rota e substitua-o por um anfitrião que tenha permissão para sondar. O primeiro comando mostra que interface o Pi usaria para um destino comum; o segundo mostra se ainda existe uma rota predefinida IPv6; o terceiro prova que resolvedor respondeu. Leia os três antes de acreditar em qualquer afirmação sobre um túnel completo.

Se as instruções do fornecedor prometem um túnel completo mas a rota predefinida IPv6 sobrevive, o Pi tem uma fuga. Desative o IPv6 na ligação ascendente ou peça ao perfil que a reclame, e decida deliberadamente em vez de o descobrir mais tarde.

Falha aberta contra falha fechada

Quando o túnel cai, uma tabela de encaminhamento que perde a sua rota predefinida volta simplesmente à ligação ascendente física, e o tráfego continua em claro. Isso é falha aberta, e é o comportamento predefinido dos dois desenhos a menos que algo o impeça. A maioria das pessoas descobre-o semanas depois ao ler um registo da firewall.

A falha fechada custa-lhe o acesso remoto quando o túnel está em baixo, por isso precisa de uma exceção deliberada para o caminho de gestão. Uma forma é uma regra que só permite o endereço do par de VPN fora do túnel:

sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject

Compare o custo operacional com honestidade. Um perfil normalmente não consegue exprimir esta regra, por isso a falha fechada empurra-o para o desenho com script ou para uma unidade pequena que instala a regra independentemente do túnel. Em qualquer caso, registe as rejeições durante uma semana: uma rejeição silenciosa parece idêntica a um serviço avariado, e vai querer o contador quando um utilizador relatar que um site deixou de carregar.

Escolher para um Pi sem ecrã

Se a imagem já executa o NetworkManager, o túnel não precisa de nada exótico e quer que siga a ligação ascendente automaticamente, fique com o perfil. Se precisa de encaminhamento por políticas, de vários túneis escolhidos por destino, ou de uma regra de falha fechada que tem de existir antes de o túnel subir, fique com o script e possua cada parte dele, incluindo a ordem de arranque e a limpeza. Misturar os dois desenhos custa mais do que qualquer um deles sozinho.

Migrar entre eles é sobretudo uma questão de ordem: desative o dono antigo, confirme que não sobrevive nenhuma rota ou entrada de resolvedor obsoleta, depois ative o novo e reinicie duas vezes. Um único reinício pode esconder uma corrida que um segundo expõe. Termine testando o Pi em vez do túnel: resolva um nome, vá buscar algo por IPv4, vá buscar por IPv6 se o manteve, depois derrube o túnel e confirme que o comportamento escolhido acontece de facto. Uma interface em ip link é o início do teste, não o fim.

Artigos relacionados