Tratar o tun0 e um protocolo VPN como uma só coisa leva as pessoas ao registo errado. A interface é uma fronteira local onde um programa no espaço do utilizador troca pacotes IP com o kernel. O protocolo é o que esse programa faz com os pacotes depois de os ter: transporte, autenticação, cifragem e um par. Criar o dispositivo não escolhe nada disso.

Dois componentes, um único caminho de pacotes

O kernel escreve um pacote IP no dispositivo e o programa lê-o de um descritor de ficheiro. Na direção oposta o programa escreve um pacote de volta e o kernel encaminha-o como se tivesse chegado a uma interface real. O TUN transporta IP, enquanto o TAP transporta tramas Ethernet. Ler um pacote nessa fronteira mostra o enquadramento, que é exatamente para isso que o dispositivo serve.

Tudo o que está para lá dessa fronteira é assunto do programa. Dois programas podem usar o mesmo conceito de interface e fazer coisas completamente diferentes com os pacotes. O dispositivo em si não tem opinião sobre o que acontece a seguir. O descritor de ficheiro é a única pega que o programa tem do lado do kernel.

Crie o dispositivo e depois observe a fronteira

Crie um dispositivo de propósito quando testar a fronteira. Um dispositivo persistente sobrevive ao processo que o criou, o que é útil para experiências e uma fonte comum de confusão depois. Verifique as bandeiras e o proprietário antes de culpar a VPN.

sudo ip tuntap add dev tun9 mode tun user alice
ip -d link show tun9

O detalhe da ligação mostra o tipo de dispositivo e o proprietário associado. Se nenhum processo o tiver aberto, os pacotes escritos nele não vão a lado nenhum. Um dispositivo sem processo associado pode parecer saudável numa lista de ligações enquanto não deixa passar nada.

O que o nome da interface não pode prometer

O nome da interface não diz nada sobre cifragem ou autenticação. Um programa pode envolver os pacotes em TLS, num protocolo próprio, em IPsec ou em nada. Escolher TUN em vez de TAP muda o enquadramento na fronteira, não o desenho de segurança. A escolha do enquadramento é real e é muito menor do que a questão de segurança.

A deteção funciona da mesma maneira: um observador vê o protocolo exterior no cabo, não uma etiqueta que diga qual dispositivo local o produziu. Um túnel que parece outra coisa fá-lo por causa do seu protocolo exterior, não por causa do nome da sua interface. Um observador não pode ver qual dispositivo local produziu um pacote, apenas como o pacote é. Mantenha estas duas perguntas separadas quando comparar produtos, porque uma resposta nunca implica a outra.

Ajuste a correção ao estágio que falha

Separe os estágios de falha quando algo se avaria. Um dispositivo em falta, um erro de permissões e um início de sessão recusado produzem provas e correções diferentes. Leia primeiro o estado local, depois o registo do próprio programa, depois a perspetiva do par. Leia os três antes de mudar alguma coisa.

ip -d link show tun0
journalctl -u openvpn-client@corp --since '10 min ago'

Se o dispositivo existe e um processo o segura, a fronteira local funciona e o problema está mais longe. Se o dispositivo faltar, nenhuma verificação de credenciais ajudará. Um estágio que consegue nomear é um estágio que consegue testar. A documentação do TUN/TAP descreve a fronteira e o modelo do dispositivo.

Artigos relacionados