Algum serviço privado responde pela VPN enquanto o tráfego comum de internet se comporta de maneira completamente diferente da máquina de um colega, e a tentação é concluir que o cliente Ubuntu está quebrado. Essa conclusão pula uma etapa. Uma operação privada que funciona e um caminho público diferente são duas observações, e a diferença normalmente está na política de tráfego que cada cliente instalou, não no cliente em si.

Comparar a configuração salva com o estado efetivo da rede leva três comandos e responde à pergunta que o chute tentava responder.

Primeiro o perfil salvo, depois o estado efetivo

Uma conexão OpenVPN importada se torna um perfil próprio do NetworkManager. O arquivo .ovpn de origem deixa de ser a fonte da verdade no momento em que a importação termina, então editar esse arquivo depois não muda nada na conexão que você está usando. É o primeiro ponto em que a comparação dá errado, e dá errado em silêncio.

nmcli -f connection.id,connection.uuid,ipv4.never-default,ipv4.routes,ipv4.dns connection show office-vpn

Leia o UUID quando os nomes colidirem; nomes duplicados sobrevivem a reinstalações e restaurações de perfil, e você pode perder uma hora editando a cópia que não está em uso. Os valores que você vê descrevem a intenção salva: se o perfil pode assumir a rota padrão, quais rotas foram armazenadas e quais resolvedores e domínios de busca ele pede. Eles não descrevem o que aconteceu quando a conexão foi ativada, porque um plugin ou um push do servidor pode adicionar estado que o perfil não menciona. É por isso que o próximo comando importa.

Depois veja o que o sistema realmente fez com essa intenção, incluindo regras de política e todas as tabelas, não apenas a principal. Propriedades salvas são entradas, e as tabelas instaladas são o resultado.

ip -4 rule show
ip -4 route show table all

Dois destinos, uma comparação

Escolha um destino privado que funcione e um destino público comum, depois pergunte ao kernel qual caminho cada um tomaria. Fazer isso nas duas máquinas é o que transforma uma diferença vaga em uma diferença específica.

ip -4 route get 10.40.0.20
ip -4 route get 203.0.113.20

Os endereços são exemplos para substituir pelos seus; o ponto é o par, não os números. Compare a interface, o endereço de origem e a tabela indicada em cada saída. Quando a consulta privada indica o túnel e a consulta pública também indica o túnel, você tem um túnel completo e o outro cliente pode ter um dividido, ou o contrário.

Não exija que os dois clientes imprimam texto idêntico. Um redirect-gateway def1 do OpenVPN costuma ser expresso como duas rotas de meio prefixo em vez de uma padrão, e um gerenciador que as exibe de forma diferente não é por isso errado. Julgue a cobertura, que é o que as consultas mostram, e não a formatação.

Onde os dois clientes diferem legitimamente

Os padrões dos clientes são escolhas de política, e é permitido que discordem. Um produto pode preferir um túnel completo, outro pode manter o padrão local e rotear apenas os prefixos privados, e um terceiro pode seguir o que o servidor enviou. Uma diferença só é defeito quando contradiz o requisito que você recebeu.

Então compare cada cliente com a intenção aprovada de túnel dividido ou completo, não um com o outro. Se o requisito é que o tráfego privado use o túnel e o caminho local de internet permaneça local, então o túnel completo é o bug e o túnel dividido está correto, independentemente de qual cliente fez o quê. Anote a intenção antes de olhar qualquer uma das configurações, ou o primeiro cliente que você inspecionar se tornará silenciosamente o padrão.

O DNS é um segundo eixo e falha de forma independente. Uma rota correta ainda pode enviar consultas a um resolvedor que não consegue responder pela zona privada, e um resolvedor correto não conserta uma rota errada. Verifique os dois, e trate um nome privado que resolve enquanto um endereço privado não resolve como evidência de que as duas camadas estão sendo resolvidas separadamente.

Mantenha a comparação limpa

Execute um único dono de conexão por vez. Uma sessão OpenVPN de linha de comando rodando ao lado do perfil importado instala suas próprias rotas e seu próprio estado de resolvedor, e a mistura resultante não é o comportamento de nenhum dos clientes. Derrube uma antes de medir a outra. Reinicie se não tiver certeza do que ainda mantém estado, porque uma rota velha de uma hora atrás vai parecer exatamente um problema de política.

Mantenha todo o resto fixo também: o mesmo endpoint, a mesma conta, as mesmas versões de software, a mesma rede. Um sucesso no notebook Windows de um colega testa um cliente diferente, uma integração de resolvedor diferente e possivelmente um perfil de servidor diferente, então não é evidência sobre o gerenciador Ubuntu.

A referência de configurações IPv4 do NetworkManager define com precisão never-default e as propriedades de rota salvas, o que vale a pena ler antes de alterar um valor gerenciado. E lembre-se do escopo desta comparação: ela cobre IPv4 e não diz nada sobre a política IPv6 correspondente, que tem seus próprios padrões e seu próprio jeito de surpreender você.

Artigos relacionados