Respostas:
dnsmasq
os pacotes ainda estão disponíveis nas versões 16.10 e 17.04.
Instale dnsmasq
e dependências (ou pelo menos baixe seus pacotes) antes de desativarsystemd-resolved
:
sudo apt-get install dnsmasq
Desabilite systemd-resolved
e verifique se dnsmasq
está em execução:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Tempere dnsmasq
a gosto. Após aplicar suas configurações, reinicie dnsmasq
:
sudo systemctl stop dnsmasq
sudo systemctl start dnsmasq
Após a etapa 2, você pode ficar sem um resolvedor do sistema em funcionamento até a etapa 3 ser concluída. Pode ser necessário reiniciar o subsistema de rede (ou simplesmente reiniciar) para começar a dnsmasq
funcionar com as configurações padrão. Nos meus testes, adicionar um servidor DNS conhecido /etc/dnsmasq.conf
e reiniciá-lo dnsmasq
foi suficiente para fazê-lo funcionar em um ambiente de liveCD.
dns=dnsmasq
config para/etc/NetworkManager/NetworkManager.conf
Além da resposta de @quixotic:
Verifique se você possui /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
se você precisar adicioná-lo, reinicie o NetworkManager assim:
sudo systemctl restart NetworkManager
e /etc/resolv.conf
precisa ser um link simbólico para /var/run/NetworkManager/resolv.conf
. poderia ser feito assim
sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
dns=default
e funciona bem porque tenho os servidores de nomes definidos pelo NetworkManager em vez de serem definidos no dnsmasq; isso funciona para mim - o NM obtém os servidores de nomes das configurações definidas na configuração do NM do KDE através da bandeja do sistema. Eu uso IP fixo na minha rede doméstica FWIW.
De acordo com o manual do systemd-resolved , o systemd-resolved fornece serviços de resolução de nomes por meio de três interfaces diferentes:
A API glibc getaddrinfo (3), conforme definida pelo RFC3493 e suas funções relacionadas ao resolvedor, incluindo gethostbyname (3). Essa API é amplamente suportada, inclusive além da plataforma Linux. No seu formato atual, ele não expõe as informações de status de validação DNSSEC no entanto, e é apenas síncrono. Essa API é suportada pelo glibc Name Service Switch (nss (5)). O uso do módulo NSS da glibc nss-resolve (8) é necessário para permitir que as funções do resolvedor NSS da glibc resolvam os nomes de host via resolvido pelo sistema.
Parece que as duas primeiras interfaces não interferem na resolução normal do DNS e, para mim, o problema provavelmente residirá na terceira.
No manual do nss-resolve :
Para ativar o módulo NSS, adicione "resolve" à linha que começa com "hosts:" em /etc/nsswitch.conf. Especificamente, é recomendável colocar "resolve" no início da linha "hosts:" do /etc/nsswitch.conf (mas após as entradas "arquivos" ou "minhas máquinas"), logo antes da entrada "dns", se existir, seguida de "[! UNAVAIL = return]", para garantir que as consultas DNS sempre sejam roteadas via systemd-resolved (8) se estiver em execução, mas sejam roteadas para nss-dns se este serviço não estiver disponível
Portanto, o que é necessário é fazer com que "dns" preceda "resolve" no "host:" linha de /etc/nsswitch.conf . E então getaddrinfo
deve simplesmente aderir ao /etc/resolv.conf .
Essa solução evita apenas que o sistema resolvido processe todas as solicitações de resolução de DNS e não se restringe a um gerenciador de rede específico. E também garante que o serviço LLMNR e mDNS esteja funcionando normalmente.
(Não estou familiarizado com o funcionamento da resolução de nomes no Linux e também não tenho certeza sobre o que entendi nestes manuais. Por favor, indique se eu entendi algo errado. Thx :))
Para o (X) Ubuntu 18.04 (veja minha resposta em stackexchange ).
Aqui está uma cópia (devo fazer uma cópia?)
Aqui está a solução para (X) Ubuntu 18.04 Bionic.
Instale o dnsmasq
sudo apt install dnsmasq
Desative o ouvinte resolvido pelo sistema na porta 53 (não toque em /etc/systemd/resolved.conf, pois pode ser substituído na atualização):
$ cat /etc/systemd/resolved.conf.d/noresolved.conf
[Resolve]
DNSStubListener=no
e reinicie
$ sudo systemctl restart systemd-resolved
(alternativamente, desative-o completamente por $ sudo systemctl disable systemd-resolved.service
)
Exclua /etc/resolv.conf e crie novamente. Isso é importante, porque resolv.conf é um link simbólico para /run/systemd/resolve/stub-resolv.conf por padrão. Se você não excluir o link simbólico, o arquivo será substituído pelo systemd na reinicialização (mesmo que tenhamos desabilitado o systemd-resolved!). O NetworkManager (NM) também verifica se é um link simbólico para detectar a configuração resolvida pelo sistema.
$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf
Desative a substituição do /etc/resolv.conf pelo NM (também existe uma opção rc-manager, mas ela não funciona, apesar de ser descrita em um manual):
$ cat /etc/NetworkManager/conf.d/disableresolv.conf
[main]
dns=none
e reinicie-o:
$ sudo systemctl restart NetworkManager
Diga ao dnsmasq para usar o resolv.conf do NM:
$ cat /etc/dnsmasq.d/nmresolv.conf
resolv-file=/var/run/NetworkManager/resolv.conf
e reinicie-o:
$ sudo systemctl restart dnsmasq
Use dnsmasq para resolver:
$ cat /etc/resolv.conf
# Use local dnsmasq for resolving
nameserver 127.0.0.1