servidor ubuntu não resolvendo nomes de host da LAN


14

Um pouco preso aqui.

Eu tenho 2 máquinas que não podem resolver nomes de hosts da LAN, a menos que haja entradas específicas em / etc / hosts

Mas outras máquinas na LAN podem resolver nomes de host.

Minha LAN:

  • 1 x roteador Cisco executando DD-WRT v24-sp2 com DNSMasq ativado. Eu configurei isso com os nomes de host e IPs na minha LAN.
  • 1 x Kubuntu 12.10 (resolve todos os nomes de host corretamente, desde que digitados no DNSMasq no roteador)
  • 2 x NAS (também resolva todos os nomes corretamente)

  • 1 x Ubuntu Server 12.04 (isso NÃO resolve nomes de host locais, a menos que eles sejam inseridos em / etc / hosts)

  • 1 x XBMCLive (Dharma) (o mesmo - não é resolvido, a menos que haja entradas no / etc / hosts)

Como faço para os 2 últimos usarem as entradas DNSMasq no roteador? Cada máquina está configurada para usar o roteador como servidor de nomes e todas as unidades resolvem os endereços externos corretamente.

Obrigado.

mais algumas informações:

enquanto estiver no servidor, se eu executar ping em outro PC (wstation)

$ ping wstation
PING wstation.local.domain (x.x.x.x) 

Se eu acrescentar .local

$ ping wstation.local
PING wstation.local.local.domain (x.x.x.x)

e diretamente

$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms
64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms
64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms
64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms
64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms
^C
--- 10.0.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms                                                                       

Não sei a resposta e não tenho idéia se isso será útil, mas caso você não soubesse ... descobri que se anexasse ".local" ao nome de uma máquina, ela seria encontrada de alguma forma sem nenhuma configuração necessária. Na verdade, isso me ajudou porque eu estava especificando endereços, mas estava precisando continuar alterando as entradas quando adicionava ou removia um sistema operacional usado para testes, etc. Mas, ao especificar machinename.local, não precisava mais me preocupar. Se você sabe de onde isso vem, fique à vontade para me dizer. :)
Marty Fried

1
Olá Marty, obrigado pela sua resposta. Eu adicionei mais algumas informações ao problema para mostrar o que acontece com .local
teracow

Respostas:


15

Sobre sua saída atual

ping wstation
PING wstation.local.domain

Indica claramente que seu PC está anexando .local.domaina consultas que não são do FQDN. Isso é algo configurado incorretamente ou pelo menos errado na sua configuração. (a menos que você realmente use o .local.domainsufixo de propósito)

Resolução de nomes e períodos

Uma coisa importante que muitas pessoas não sabem é que um nome completo sempre deve terminar com um ponto ( .). Se você o omitir, a máquina tentará resolvê-lo no domínio de pesquisa local (por exemplo, meudominio.tld). Portanto, nesse caso, uma consulta para mypc.localse tornaria mypc.local.mydomain.tld. Para evitar isso, consulta com o período.

Configuração do resolvedor

A configuração do resolvedor é de grande importância aqui. No Ubuntu (e Debian), isso é configurado no arquivo /etc/network/interfaces(supondo que você não esteja executando o NetworkManager):

iface eth0 inet static
   address 192.168.3.3
   netmask 255.255.255.0
   gateway 192.168.3.1
   dns-nameservers 192.168.3.45 192.168.8.10
   dns-search foo.org bar.com                      # <-- these are the search domains

A resolução de nomes no Linux também pode ser realizada de outras maneiras. Não é apenas que o servidor DNS local esteja sendo consultado por tudo isso. Dê uma olhada no seu /etc/nsswitch.confarquivo para a hostsconfiguração da resolução:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Isso significa que os arquivos são tentados primeiro (esse é o /etc/hostsarquivo), depois o mDNS e somente mais tarde o servidor DNS real é consultado. O mDNS é implementado usando o Avahi no Linux e é chamado Bonjour em dispositivos Apple. Ele está usando o .localsufixo por padrão e funciona via mensagens de difusão. Bem como o ARP funciona, mas depois para o DNS.

Todos esses sistemas podem ser muito confusos e ainda mais quando usados .localem uma configuração DNS regular combinada com dispositivos mDNS. Eu acho que é por isso que você está confuso agora sobre por que um dispositivo funciona e o outro não: eles não estão todos usando o mesmo método de resolução.

Para resolver as coisas

  • Evite o uso, a .localmenos que você queira confiar no mDNS completamente. Pela sua pergunta, entendo que você gostaria de manter as coisas configuradas em um local central, portanto, minha abordagem aqui é evitá-lo.
  • Configure o servidor DNS local (o dispositivo DD-WRT no seu caso) para usar um nome de domínio especial, por exemplo my.home. Para o dnsmasq, essa é uma configuração única, mas em configurações regulares, ela deve ser configurada no servidor DNS e no servidor DHCP (como está sendo anunciado via DHCP).
  • Configure todos os PCs para terem um nome de host simples e exclusivo. Eles usam isso na solicitação de DHCP e isso é usado no dnsmasq em execução no seu roteador para resolvê-los. Como alternativa, configure-os manualmente para não precisar depender do DHCP.
  • Remova qualquer configuração restante, /etc/resolv.confcaso você tenha mexido com ela no passado.
  • Configure os PCs na sua rede para usar my.homecomo o domínio de pesquisa local. Isso pode ser feito via DHCP automaticamente ou se estiver usando endereços estáticos através do /etc/network/interfacesarquivo ou no Network Manager:

    insira a descrição da imagem aqui

  • Agora, a resolução de nomes simples ( ping hostname) e o nome completo ( ping hostname.my.home) devem funcionar.

5
Uau! Resposta impressionante gertvdijk! Muito abrangente. Tanto que preciso de um tempo para entender o que você disse. Posso dizer que testei um ping com um ponto após o nome do host e ele funcionou corretamente. Não uso DHCP nesta LAN para as máquinas permanentes. Nunca defini as configurações .local em nenhuma máquina, pois não entendi o que era. Investigaremos isso mais detalhadamente de acordo com suas instruções e entraremos em contato com você.
precisa saber é

Obrigado por esta resposta abrangente. Alterei meu /etc/nsswitch.conf para que o DNS seja tentado antes do mDNS files mdns4_minimal [NOTFOUND=return] dns mdns4. Agora, tudo se comporta mais como eu esperava com minhas máquinas endereçadas host.foo.local (com nomes inadequados). Antes dessa mudança ping hostnamefuncionaria, mas ping hostname.foo.localestava falhando. Eu estava ficando realmente confuso quando dig hostnameestava falhando e dig hostname.foo.localestava retornando um resultado, o oposto do que eu esperava. Agora eu posso executar ping nos FQDNs conforme o esperado. Existe uma desvantagem em ter o pedido definido dessa maneira?
Taft

1

Com base na resposta de gertvdijk, acabei de comentar a linha em nsswitch.conf

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns

0

Eu tenho problemas semelhantes com um / etc / hosts contendo vários espaços entre IP e nome do host, em vez disso, usando uma TAB. Depois de 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.

veja também em /superuser//a/938366/467479


3
Sinto muito, isso não está correto. O arquivo hosts funcionará com espaços ou guias. Além disso, 127.0.0.1 deve ter o host local primeiro, seguido pelo localhost.localdomain - e, dependendo da sua configuração, o nome do host da sua máquina. (Algumas configurações, Ubuntu / Debian, você colocou seu nome de host na linha 127.0.1.1) Eu não recomendaria instalar nenhum endereço .local no arquivo hosts, pois eles conflitam com mDNS / Avahi
The Dude

1
Se você possui máquinas Windows no seu domínio, aparentemente ele usa DNS unicast, o que não é compatível com as implementações Avahi ou Zeroconf mDNS. Além disso, verifique seu /etc/nsswitch.conf para ver se ele está sendo liberado após mdns4_minimal [NOTFOUND = return] ou fazendo uma pesquisa completa no mdns4 (mova-o para trás). Além disso, não configure nenhum servidor DNS para usar o domínio .local, pois os resolvedores de mDNS / sd-DNS mascararão as pesquisas nesse domínio. Para o seu TLD DNS interno, use .lan, .work, .home, etc (mas NÃO um dos novos TLDs, como .biz, .xyz, .web, etc ...). Boa sorte e bem-vindo ao mundo divertido da resolução de DNS.
The Dude
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.