A maioria das distribuições modernas relacionadas ao Debian tendem a usar a ferramenta /sbin/resolvconf
para configurar o /etc/resolv.conf
em vez de editá-lo diretamente. Essa ferramenta manterá o controle das informações do servidor DNS recebidas para cada interface e priorizará as configurações do servidor DNS de acordo com a ordem especificada no arquivo /etc/resolvconf/interface-order
.
Dessa forma, você pode obter um conjunto de configurações do servidor DNS ao ativar o Wi-Fi, outro ao conectar um cabo de rede, um terceiro ao iniciar uma conexão VPN ... e não acabar com uma confusão configuração quando você a encerra em uma ordem não estritamente reversa. Além disso, nessa situação, você pode obter dois mecanismos diferentes (por exemplo, NetworkManager e dnsmasq
) disputando o controle do real /etc/resolv.conf
, que pode ser
No entanto, resolvconf
é um pacote opcional. Se /sbin/resolvconf
não existir em seu sistema, seu /etc/resolv.conf
pode estar sob controle direto do NetworkManager. Mas parece que a maior parte do script no pacote dnsmasq
está escrito supondo que /sbin/resolvconf
existe - portanto, sem isso, você está contando com fallbacks que podem não cobrir adequadamente todas as situações. Você pode querer tentar instalá-lo com apt-get install resolvconf
ou algo semelhante e ver como as configurações de DNS se comportam com ele instalado.
Se você não tiver o pacote resolvconf
instalado, temo que o NetworkManager faça tudo sozinho - e, nesse caso, a solução de problemas exigiria a leitura do código-fonte do NetworkManager para ver como ele realmente decide quais configurações DNS usar. resolvconf
é bem menos opaco.
Após o dnsmasq
ser iniciado no (L) Ubuntu Zesty (17.04), seus scripts de inicialização executarão este comando (assumindo que o pacote resolvconf
esteja instalado):
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.dnsmasq
Isso diz a /sbin/resolvconf
que um novo servidor de nomes DNS se tornou disponível na interface lo
e atualizará o% real/etc/resolv.conf
.
Enquanto esta (ou qualquer) atualização de /etc/resolv.conf
estiver acontecendo, /sbin/resolvconf
executará todos os scripts localizados em /etc/resolvconf/update.d
. Um deles é /etc/resolvconf/update.d/dnsmasq
, que deve levar uma lista de todos os servidores DNS não locais conhecidos por resolvconf
no momento, e enviá-los para /run/dnsmasq/resolv.conf
, que aparentemente é a lista de servidores DNS que dnsmasq
deve estar usando.
A cada segundo, dnsmasq
deve verificar o tempo de modificação de /run/dnsmasq/resolv.conf
e atualizar sua configuração.
No entanto, sua linha de comando do dnsmasq indica que você pode ter feito algumas alterações nas configurações padrão: você pode querer substituir a opção dnsmasq --no-resolv
por --resolv-file=/run/dnsmasq/resolv.conf
... ou apenas remover qualquer NetworkManager ou resolv.conf- personalizações relacionadas, já que parece que as configurações padrão de dnsmasq
foram projetadas para integrar com o NetworkManager e resolvconf
de maneira apropriada.
Se a ferramenta resolvconf
estiver em uso, você encontrará as configurações do servidor DNS fornecidas por todas as várias origens possíveis no diretório /run/resolvconf/interface/
. O conteúdo de cada arquivo será semelhante ao real /etc/resolv.conf
. O nome do arquivo se referirá à origem das informações do servidor DNS, seja uma configuração estática ou DHCP de uma determinada interface de rede, ou NetworkManager em geral, ou os scripts de inicialização de um servidor DNS local.
Anteriormente, mencionei uma linha de comando que será executada em dnsmasq
start-up se /sbin/resolvconf
estiver instalado. Se você quiser desfazer temporariamente isso (para testar se o DNS funciona se o local dnsmasq
for ignorado), você poderá fazê-lo com este comando:
resolvconf -d lo.dnsmasq
Quando você faz isso, as configurações de DNS da sua interface de rede ativa de prioridade mais alta devem assumir o /etc/resolv.conf
real.
Se você quiser que os scripts de inicialização dnsmasq
parem de substituir as configurações de DNS ativas pela linha "nameserver 127.0.0.1" (para solução de problemas ou por outros motivos), aparentemente, adicionar DNSMASQ_EXCEPT=lo
a /etc/default/dnsmasq
conseguirá .
Mas como sua linha de servidor de nomes tem valor 127.0.1.1, provavelmente é escrita diretamente pelo NetworkManager, e não tenho idéia de como corrigir isso se resolvconf
estiver fora de cena.