Como configurar a pesquisa de DNS local no Ubuntu 16.10?

9

Eu instalei recentemente o Ubuntu 16.10 e rsync'd um backup do meu diretório pessoal anterior do kubuntu 16.04 para minha nova instalação. As coisas funcionam bem, mas não consegui resolver os endereços locais, apesar de muitas tentativas e erros.

Toda a rede parece estar funcionando perfeitamente. Navegação na Internet, pesquisa de DNS de endereços externos, ssh etc. são ótimas. Localmente, posso acessar máquinas via ssh com seus endereços, mas não com seus nomes. Tudo funciona bem no nautilus / samba, o que significa que o WINS funciona. O único problema, ao que parece, é o DNS da rede local. Eu tenho o avahi-daemon instalado e funcionando, como ele veio com o Ubuntu.

Incluí algumas soluções de problemas, usando << >> para reduzir partes redundantes ou que estão funcionando corretamente.

$ nmcli g
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled 

$ ping tendril8 << or tendril8.local >>
ping: tendril8: Name or service not known

$ ping gateway
PING gateway (192.168.1.1) 56(84) bytes of data.
64 bytes from gateway (192.168.1.1): icmp_seq=1 ttl=64 time=4.16 ms

$ ping askubuntu.com
PING askubuntu.com (151.101.129.69) 56(84) bytes of data.
64 bytes from 151.101.129.69 (151.101.129.69): icmp_seq=1 ttl=49 time=43.0 ms

$ nslookup askubuntu.com
Server:     127.0.1.1
Address:    127.0.0.1#53
<< followed by several IP addresses >>

$ nslookup tendril8 << or tendril8.local >>
Server:     127.0.1.1
Address:    127.0.0.1#53
** server can't find tendril8: NXDOMAIN

$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

$ ls -la /etc/resolv.conf
lrwxrwxrwx 1 root root 29 Oct 15 19:30 /etc/resolv.conf -> ../run/resolvconf/resolv.conf

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files resolve [!UNAVAIL=return] mdns4_minimal dns [NOTFOUND=return]
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Nota: Passei muito tempo analisando soluções "mais antigas", antes de o Ubuntu mudar para systemd.resolved na 16.10. Eles não funcionaram para mim e não acredito que seja uma pergunta duplicada para perguntas semelhantes às configurações anteriores do Ubuntu.

mightypile
fonte
11
Isto acontece também em sistemas atualizados ... Eu acho que essa pergunta vai receber um monte de visita nos dias :)
Michele d'Amico
Eu odeio problemas de rede, eles são os piores. E este está me mordendo forte, mas de uma maneira um pouco diferente. A resposta não a corrigiu para mim. Veja minha pergunta para meus detalhes.
Moodboom

Respostas:

18

Se eu entendi sua pergunta corretamente, você não pode resolver os nomes de host locais.

Sobre isso, tive o mesmo problema com uma nova instalação da 16.10, e isso se mostra um problema conhecido ( https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624071 ) relacionado ao libnss -resolve no systemd.

A solução no meu caso foi revisar o arquivo /etc/nsswitch.conf e observar especificamente como o NSS resolve seus hosts:

hosts: files resolve [!UNAVAIL=return] mdns4_minimal [NOTFOUND=return] dns myhostname

Essa lógica parece falhar na resolução do nome do host antes mesmo de chegar ao mDNS.

A edição da linha de hosts de volta para uma versão anterior à 16.10 corrige esse aparente erro lógico:

hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname

O link do relatório de erros incluído sugere que uma versão futura do pacote systemd poderá eventualmente corrigir esse problema.

Rico

richbl
fonte
11
Resposta fantástica com link e exemplos! Eu brinquei com sua sugestão e descobri que, desde que movi "mdns4_minimal" antes de "[NOTFOUND = return]" e "[! UNAVAIL = return]" funcionou. Eu ainda preciso do sufixo .local para endereços locais.
Mightypile 18/10/16
11
Existe um bug mais específico para libnss-resolve e mdns em bugs.launchpad.net/ubuntu/+source/systemd/+bug/1641328
nitrogênio
7

Uma solução alternativa que edita automaticamente /etc/nsswitch.confestá removendo [ editar: e reinstalar] libnss-resolve :

sudo apt purge libnss-resolve
sudo apt install libnss-resolve
azoto
fonte
+1. Esta é uma solução superior para aqueles que gostam de manter a configuração do sistema intacta para os pacotes com os quais não mexemos. Deve ser feito pela ferramenta de atualização / instalador agora ... 16,10 já existe há algum tempo.
eskhool