avahi: o ping não pode resolver o nome do host, mas o nslookup pode

41

pingdiz-me que não pode resolver algum nome de host ("ping: host desconhecido domain.company.local") em uma URL, mas quando eu uso hostou nslookupno mesmo computador na linha de comando, as resoluções funcionam bem (ou seja, é rápido e confiável )

O que poderia estar causando isso?

Mais testes: Firefox wgete pingtem o mesmo problema. O ping do endereço IP funciona.

Sistema operacional: Linux (Ubuntu 13.04)

EDITAR Minhas /etc/resolv.confleituras:

nameserver 127.0.1.1
search domain.company.local

netstat relatórios:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

então algo está sendo executado nessa porta ( nslookuptambém relata que é usado 127.0.1.1como servidor DNS).

Não há /etc/*inetd.conf, então não tenho certeza de qual aplicativo atende a essa porta.

Parece que dnsmasqé usado:

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

Todos os arquivos e pastas de configuração estão vazios. Desde nslookupdiz que usa 127.0.1.1#53meu palpite é que dnsmasqfunciona mesmo sem uma configuração. Mas como ele sabe qual DNS pai consultar?

EDIT2 Desativar dnsmasqcomo sugerido por harrymc não ajudou. Então eu corri, o strace pingque me deu uma saída estranha (apenas as partes interessantes):

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

Então pingparece /etc/hostsque faz sentido. Em seguida, carrega mmap()es /lib/libnss_mdns4_minimal.so.2que também faz sentido.

Mas então ele fala com avahi !?

O que me levou a esta postagem no fórum: o ping não faz uma solicitação de DNS .

Meu /etc/nsswitch.conftambém contém esta linha:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Se eu for pingum endereço de trabalho, vejo que o processo também é carregado, /lib/libnss_mdns4_minimal.so.2mas faz uma consulta DNS via porta 53.

Então, meu palpite é que agora, de /lib/libnss_mdns4_minimal.so.2alguma forma, está percebendo que o endereço IP termina com .locale não com .come então o [NOTFOUND=return]é acionado.

Como faço para corrigir isso?

Aaron Digulla
fonte
O que há no seu /etc/resolv.conf?
Joseph R.
O que está correto e o que está incorreto? O nome do host deve resolver ou não? Você não nos disse qual dos dois problemas completamente diferentes tem. (E se ele deve resolver, explicar em detalhes, tanto quanto possível, como e por que ele deve resolver, como que provavelmente vai levar à explicação de por que isso não acontece.)
David Schwartz
... e quais são as suas configurações de proxy HTTP para Chrome, Firefox e wget.
JdeBP
@ DavidSchwartz: Estou esperando que a resolução funcione. O que eu não entendo como nslookupou hostpode resolver o nome e qualquer outra coisa no sistema não pode.
Aaron Digulla
11
Se você não estiver compartilhando conexões com outros dispositivos ou VMs no seu computador, poderá desativar o dnsmasq no Network Manager. Edite /etc/NetworkManager/NetworkManager.confe comente a dns=dnsmasqlinha (coloque um # na frente) e faça a sudo restart network-manager. Isso desativará o resolvedor local. ( fonte )
harrymc

Respostas:

33

Conforme descrito em detalhes nesta postagem do blog , você precisa editar /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

Isso liga o daemon ao domínio em .alocalvez do padrão .local.

e reinicie o daemon com:

sudo service avahi-daemon restart

Nota da postagem do blog:

Pode ser necessário liberar o cache do DNS, mDNS e resolvedor, além de reiniciar os navegadores da web para limpar o cache interno.

Depois disso, pinge nslookupcomeçou a concordar.

Obrigado a harrymc por me colocar no caminho certo.

Aaron Digulla
fonte
11
Observe também pingque usará nss, nslookupnão. (ele usa lwres e, bem, bind, para falar diretamente com um resolvedor)
Ricky feixe
Para mim, faz mais sentido configurá-lo corretamente, em vez de desativá-lo para local.
315 keiki
@ otakun85: E como eu faria isso?
Aaron Digulla
@AaronDigulla Você o configurou e a resposta mais votada atual o desativou para o local.
281 keiki
2
Isso é incrível. Muito obrigado. Lutou com isso por horas antes de encontrar este post.
fpghost 29/09/16
11

Modificando o /etc/nsswitch.conf e substituindo:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

de:

hosts:          files dns

trabalhou para mim.

doep
fonte
2
Isso funciona com o custo dos serviços avahi
Aaron Digulla
8

Coisa fácil de fazer: Editar /etc/default/avahi-daemon

Mude a linha:

AVAHI_DAEMON_DETECT_LOCAL=1

para

AVAHI_DAEMON_DETECT_LOCAL=0

Reinicie o avahi-daemon, ou mate-o.

Não gosto de Avahi e não uso nenhum de seus recursos. Se você deseja realmente desativar o avahi, modifique /etc/init/avahi-daemon.confsemelhante ao seguinte:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus
MikeDawg
fonte
2
Não me importo se você não deveria colocar comentários de agradecimento aqui, só queria expressar meu agradecimento e quanto tempo e energia você me salvou. Muito obrigado! Estou usando uma VPN da empresa para fazer algum trabalho de emergência em um shopping e não consegui fazer com que alguns de nossos sites funcionassem, apesar de tudo que pensei em tentar. Eu não teria sido capaz de descobrir isso no meu próprio, isso é certo ...
eresonance
7

parece que o endereço local não pode ser acessado no ubuntu.

uma solução é editar /etc/nsswitch.confe alterar esta linha:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

por este :

hosts:          files dns
Dragouf
fonte
Isso meio que funcionou para mim. No meu caso, a linha de hosts teve "arquivos resolvidos [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" e alterando-o para "files mdns4_minimal [NOTFOUND = return] dns" funcionou. Obrigado pelo ponteiro na direção certa.
Andorbal
Tentei as outras respostas acima, avahi desativado (o que é um alívio) e ainda tinha o problema. Esta resposta resolveu para mim. Obrigado
Adam Plocher
3

Se você não estiver compartilhando conexões com outros dispositivos ou VMs no seu computador, poderá desativar o dnsmasq no Network Manager.

Edite /etc/NetworkManager/NetworkManager.confe comente a linha (coloque um # na frente):

dns=dnsmasq

Então faça :

sudo restart network-manager

Isso desativará o resolvedor local.

Fonte: DNS no Ubuntu 12.04 .

harrymc
fonte
2

Então, agora, meu palpite é que /lib/libnss_mdns4_minimal.so.2 está percebendo que o endereço IP termina com .local e não com .com e, em seguida, o [NOTFOUND = return] é acionado.

Como faço para corrigir isso?

Muito bom palpite, mas as outras respostas são um exagero. A solução simples é remover o bit que realmente é acionado, ou seja, remover apenas [NOTFOUND=return] .

Removê-lo significa que, se mdns4_minimalretornar NOTFOUND, a próxima entrada na lista de resolvedores será usada. Esse é o comportamento normal; [NOTFOUND=return]é uma otimização para falhar mais rapidamente em nomes desconhecidos, mas assume que todos os .localnomes estão no mDNS.

MSalters
fonte
1

Eu tive um caso interessante com os mesmos sintomas (ping, mount etc. não funcionava, mas hospedava, cavava funcionando). Verifique as permissões no arquivo /etc/resolv.conf . No meu caso, alguém mudou e eu não tinha o direito de lê-lo (embora a cat /etc/resolv.confedição do arquivo tenha funcionado bem).

De qualquer forma, strace estava mostrando:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

E, como resultado, ele estava tentando consultar o host local (127.0.0.1) em vez de um IP do servidor de nomes no arquivo resolv.conf:

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

E o tcpdump não estava mostrando nenhum tráfego DNS durante o ping. Tudo está funcionando após uma correção de permissão:

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

Outro problema pode ser atributos estendidos do arquivo ou qualquer outro problema de acesso. Nesse caso, basta excluir o arquivo /etc/resolv.conf e recriá-lo do zero.

Pik Master
fonte
Outro problema que eu tinha em um servidor era que todas as pastas raiz haviam perdido seu xsinalizador e, portanto, muitos binários não se comportavam corretamente. A correção foi chmod +x /*.
Silex 12/06
0

Outro motivo é o formato de /etc/hosts. Verifique se não há espaços entre o IP e o nome do host. Em vez disso, use uma TAB. Após mudar para TAB, o nome do host pode ser resolvido por ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.
Thomas Lauria
fonte
poderia ser uma resposta, mas ele é formatado como comentário ...
Francisco Tapia
-1

Configure o avahi-daemon no Ubuntu para que você possa acessar o nome ubuntu.localdo host no sistema operacional host

sudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan

João Pedro Rodrigues
fonte
Desculpe, esta resposta não está relacionada à pergunta. Não estamos perguntando como instalar o Avahi. A questão é como o Avahi pode interromper as pesquisas de DNS após a instalação.
Aaron Digulla