dnsmasq configurado pelo NetworkManager não consegue encaminhar pedidos

5

Eu uso o Lubuntu 17.04, no qual o serviço NetworkManager (subsistema?) executa algumas ações de configuração quando me conecto a uma nova rede. Uma delas é (re) definir o arquivo /etc/resolv.conf para:

# Generated by NetworkManager
search some-local-domain-here
nameserver 127.0.1.1

pelo menos é o que recebo quando o DHCP é usado. Há uma instância de dnsmasq que escuta no host local (mais informações sobre isso são fornecidas abaixo).

Agora, em algumas redes, e consistentemente, os nomes não podem ser resolvidos nesse estado de coisas; mas se eu substituir a linha nameserver pelo endereço real do servidor de nomes que obtive da concessão do DHCP ( /var/lib/NetworkManager/dhclient-blah-blah.wlan0.lease ) - a resolução funciona bem.

Perguntas:

  • Qual poderia ser a causa desse problema?
  • Como posso forçar o dnsmasq configurado pelo NetworkManager a realmente encaminhar as solicitações de resolução de nomes para o servidor DNS fornecido pelo DHCP? (Observe que às vezes já faz isso - quando esse problema não se manifesta)

Informações adicionais:

O servidor DNS local é uma instância dnsmasq , com a seguinte linha de comando:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

O diretório de configuração /etc/NetworkManager/dnsmasq.d tem um único arquivo, cujo conteúdo é:

# Tell any system-wide dnsmasq instance to make sure to bind to interfaces
# instead of listening on 0.0.0.0
# WARNING: changes to this file will get lost if network-manager is removed.
bind-interfaces
    
por einpoklum 12.11.2017 / 12:11

1 resposta

2

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.

    
por 24.11.2017 / 07:01