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?


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.


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.


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

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

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 .


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.


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.


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.

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.