Un Raspberry Pi que só precisa protexer o seu propio tráfico de saída ten dous deseños realistas: deixar que o xestor de rede sexa dono do túnel, ou manter un script que o sexa. Ambos poden transportar tráfico. Fallan en lugares distintos, e o fallo que pode diagnosticar en remoto ás dúas da mañá é o que paga a pena escoller. Compáreos en propiedade, en que significa túnel completo cando entran IPv6 e DNS, e en que ocorre no momento en que cae o túnel.

Dous donos para un túnel

O deseño A é un perfil dentro do xestor de rede do sistema: un perfil OpenVPN importado ou unha conexión WireGuard nativa, activada no arranque polo mesmo servizo que levanta Ethernet e Wi-Fi. O deseño B é unha unidade propia que executa o cliente directamente, edita a configuración do resolvedor e instala as súas propias rutas e regras de cortafogos. Ambos son deseños lexítimos; difiren en quen ten permiso para cambiar a táboa de encamiñamento.

Os fallos difiren porque os donos difiren. Con A, un perfil que non se activa deixa a interface arriba e o túnel abaixo, e os rexistros do xestor din por que. Con B, un script que ten éxito a medias deixa rutas que sobreviven ao proceso que as creou. Executar ambos é o peor resultado: dous procesos escribindo a ruta por defecto, dúas edicións do resolvedor competindo no arranque e dous conxuntos de segredos que rotar.

Escolla un dono por túnel e desactive o outro antes de probar nada. Dous donos tamén significan dous lugares onde mirar cando o túnel está levantado e nada se resolve. Esa única regra evita a maioría dos estados confusos descritos nos fíos de Pi VPN.

Que crea unha importación e que non

En Raspberry Pi OS Bookworm e posteriores, a ferramenta de configuración de rede por defecto é NetworkManager, así que un perfil é o fogar natural para un túnel de cliente. A importación necesita o complemento correspondente instalado; sen el a importación falla cunha mensaxe sobre un tipo de conexión non admitido, que é o sinal honesto para deter o proceso e instalar o complemento.

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

Importar garda un perfil. Non demostra que o outro extremo sexa alcanzable, e non garante que cada directiva do ficheiro sobrevivise á conversión. Volva ler a conexión resultante e revise as partes que levan identidade e confianza: o certificado, o host remoto e o porto, e se se pide ou se almacena un contrasinal.

A activación con --ask mantén unha frase de paso fóra do historial do intérprete nunha máquina compartida. Para un Pi sen supervisión, co tempo quererá que o perfil se levante no arranque, o que é unha decisión aparte de levantarllo unha vez á man.

Túnel completo, comparado nos dous deseños

Un túnel completo é unha afirmación sobre rutas, non sobre intencións, e os dous deseños exprésano de forma distinta. O enfoque con perfil pide ao xestor que instale unha ruta por defecto e os seus axustes de resolvedor; o enfoque con script fai o que di o script, incluído nada. Ningún dos deseños cobre IPv6 a menos que se lle diga, e unha ruta por defecto IPv6 intacta levará alegremente tráfico fóra do túnel mentres IPv4 parece perfecto.

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

Use un enderezo de documentación para a consulta de ruta e substitúa un host que teña permiso para sondar. O primeiro comando mostra que interface usaría o Pi para un destino corrente; o segundo mostra se aínda existe unha ruta por defecto IPv6; o terceiro demostra que resolvedor respondeu. Lea os tres antes de crer calquera afirmación sobre un túnel completo.

Se as instrucións do provedor prometen un túnel completo pero a ruta por defecto IPv6 sobrevive, o Pi ten unha fuga. Desactive IPv6 na ligazón ascendente ou pídalle ao perfil que o reclame, e decida deliberadamente en lugar de descubrilo máis tarde.

Fallo aberto contra fallo pechado

Cando o túnel cae, unha táboa de encamiñamento que perde a súa ruta por defecto simplemente volve á ligazón ascendente física, e o tráfico continúa en claro. Iso é fallo aberto, e é o comportamento por defecto dos dous deseños a menos que algo o impida. A maioría da xente descóbreo semanas despois lendo un rexistro do cortafogos.

O fallo pechado custa o acceso remoto cando o túnel está abaixo, así que necesita unha excepción deliberada para o camiño de xestión. Unha forma é unha regra que só permita o enderezo do par de VPN fóra 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 operativo con honestidade. Un perfil normalmente non pode expresar esta regra, así que o fallo pechado empúxao cara ao deseño con script ou cara a unha unidade pequena que instala a regra independentemente do túnel. En calquera caso, rexistre os rexeitamentos durante unha semana: un rexeitamento silencioso parece idéntico a un servizo roto, e quererá o contador cando un usuario informe de que un sitio deixou de cargar.

Escoller para un Pi sen pantalla

Se a imaxe xa executa NetworkManager, o túnel non necesita nada exótico e quere que siga a ligazón ascendente automaticamente, colla o perfil. Se necesita encamiñamento por políticas, varios túneles escollidos por destino, ou unha regra de fallo pechado que deba existir antes de que o túnel suba, colla o script e posúa cada parte del, incluídos a orde de arranque e a limpeza. Mesturar os dous deseños custa máis que calquera deles por separado.

Migrar entre eles é sobre todo cuestión de orde: desactive o dono antigo, confirme que non sobrevive ningunha ruta nin entrada de resolvedor obsoleta, despois active o novo e reinicie dúas veces. Un só reinicio pode ocultar unha carreira que un segundo expón. Remate probando o Pi en lugar do túnel: resolva un nome, descargue algo por IPv4, descargue por IPv6 se o conservou, logo tire o túnel e confirme que o comportamento que escolleu ocorre de verdade. Unha interface en ip link é o principio da proba, non o final.

Artigos relacionados