Problema com DNS e VPN

Bom dia!

Estou migrando meu laptop do Windows para Debian e as coisas estão indo bem. Trabalho remotamente e a empresa para a qual trabalho usa um cliente VPN personalizado (Fortinet) para se conectar à sua rede corporativa. Felizmente, há um cliente para Linux, até um arquivo deb que instalei. A configuração também correu bem, consigo conectar à rede remota sem problemas.

O que não está funcionando é o DNS. Quando ligo o computador, meu servidor DHCP local me fornece um IP com o servidor DNS local e consigo resolver nomes de domínio. O arquivo /etc/resolve.conf lista o DNS correto e a linha de comentários no topo diz que o arquivo é gerenciado pelo “NetworkManager”. Quando conecto à VPN, esse arquivo é alterado e os DNS da empresa são adicionados a ele. Nesse ponto, você já deve saber qual é o problema: não consigo resolver os nomes de domínio da empresa, pois meu servidor local ainda está listado primeiro em /etc/resolv.conf.

Não quero editar o arquivo toda vez que conecto à VPN. Meu objetivo é poder resolver domínios *.company.com usando seus servidores DNS, e qualquer outro domínio com meu servidor local. Li que o arquivo /etc/resolv.conf não tem opção para especificar qual servidor DNS usar para qual(s) domínio(s). Também li que devo usar dnsmasq (parece que já está instalado durante a instalação do Debian) para ouvir localmente as resoluções de DNS e “rotear” para cada servidor dependendo do domínio.

Mas antes de mudar qualquer coisa, gostaria de perguntar à comunidade se há uma solução mais simples que eu ainda não tenha encontrado. Não quero me aprofundar na configuração do dnsmasq, a menos que seja a melhor solução.

Obrigado por lerem e pelas dicas!

Ah, eu tinha esse problema exatamente assim, estou usando openfortivpn pessoalmente, supondo que você também esteja?

Tenho 99% de certeza de que instalei o systemd-resolved. Poderia usar o comando resolvectl depois disso, e o openfortivpn funcionaria automaticamente com ele e eu não tive problemas depois. O resolvectl também mostraria ambas as opções de DNS quando conectado, indicando que funcionou.
Espero que ajude, minha memória não é ótima.

Você tem alguma outra opção de cliente? Se o software VPN acrescenta ao resolv.conf ao invés de substituí-lo temporariamente, você terá problemas enquanto usar esse cliente.

Há duas maneiras de resolver o problema de DNS. Escolha a que preferir.

  1. Modifique o arquivo /etc/systemd/resolved.conf e reinicie o serviço systemd-resolved.

    vi /etc/systemd/resolved.conf
    [Resolve]

    Alguns exemplos de servidores DNS que podem ser usados para DNS= e FallbackDNS=:

    Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com

    Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google

    Quad9: 9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net

    DNS=10.1.1.4 8.8.8.8 8.8.4.4
    FallbackDNS=10.1.1.4

    ReadEtcHosts=yes

    sudo systemctl restart systemd-resolved.service

  2. Crie o seguinte script e execute-o após conectar-se com sucesso à VPN.

    vi /usr/local/bin/fortinect_dns_fix.sh
    #!/bin/bash

    export VPN_INTERFACE=$(resolvectl | grep fctvpn | sed ‘s/[()]//g’ | cut -d’ ’ -f3)

    sudo resolvectl domain $VPN_INTERFACE ~.
    sudo resolvectl dns $VPN_INTERFACE <IP(s) do servidor DNS separado por espaço>

    chmod 755 /usr/local/bin/fortinect_dns_fix.sh
    Faça login no Forticlient VPN normalmente
    #Em um terminal execute:
    /usr/local/bin/fortinect_dns_fix.sh

resolvectl deve mostrar algo como:

...
Link 11 (fctvpn6b5ab556)
Escopos Atuais: DNS
Protocolos: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=não/não suportado
DNS atual: 
Servidores DNS: 10.1.1.4 10.1.1.5 8.8.8.8 8.8.4.4
Domínio DNS: ~.10.1.1.4

Fonte:

https://community.fortinet.com/t5/Support-Forum/DNS-settings-on-Ubuntu-22-04-and-FortiClient-VPN-7-0-0-0018/td-p/209184/page/4

HTH