server ubuntu non risolve i nomi host LAN


14

Un po 'bloccato qui.

Ho 2 macchine che non sono in grado di risolvere i nomi host LAN, a meno che non ci siano voci specifiche in / etc / hosts

Ma altre macchine sulla LAN possono risolvere i nomi host.

La mia LAN:

  • 1 x router Cisco che esegue DD-WRT v24-sp2 con DNSMasq abilitato. Ho configurato questo con i nomi host e gli IP sulla mia LAN.
  • 1 x Kubuntu 12.10 (risolve correttamente tutti i nomi host purché siano immessi in DNSMasq sul router)
  • 2 x NAS (risolvi anche tutti i nomi correttamente)

  • 1 x Ubuntu Server 12.04 (questo NON risolve i nomi host locali a meno che non siano inseriti in / etc / hosts)

  • 1 x XBMCLive (Dharma) (stesso - non risolve a meno che le voci non siano in / etc / hosts)

Come posso ottenere gli ultimi 2 per utilizzare le voci DNSMasq sul router? Ogni macchina è impostata per utilizzare il router come nameserver e tutte le unità risolvono correttamente gli indirizzi esterni.

Grazie.

qualche informazione in più:

mentre sul server, se eseguo il ping di un altro PC (wstation)

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

Se poi aggiungo .local

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

e direttamente

$ 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                                                                       

Non conosco la risposta e non ho idea se questo sarà utile, ma nel caso in cui non lo sapessi ... Ho scoperto che se avessi aggiunto ".local" dopo il nome di una macchina, sarebbe stato in qualche modo trovato senza alcuna configurazione necessaria. In realtà mi ha aiutato perché stavo specificando gli indirizzi, ma avevo bisogno di continuare a cambiare le voci quando avrei aggiunto o rimosso un sistema operativo che avevo usato per i test, ecc. Ma, specificando machinename.local, non dovevo più preoccuparmi. Se sai da dove viene, sentiti libero di dirmelo. :)
Marty Fried,

1
Ciao Marty, grazie per la tua risposta. Ho aggiunto alcune informazioni al problema per mostrare cosa succede con .local
teracow il

Risposte:


15

Informazioni sull'output corrente

ping wstation
PING wstation.local.domain

Indica chiaramente che il tuo PC sta aggiungendo .local.domainquery non FQDN. Questo è qualcosa di configurato in modo errato o almeno sbagliato nella tua configurazione. (a meno che tu non usi effettivamente il .local.domainsuffisso di proposito)

Risoluzione dei nomi e punti

Una cosa importante che molte persone non sanno è che un nome completo dovrebbe sempre finire con un punto ( .). Se lo ometti, la macchina proverà a risolverlo all'interno del dominio di ricerca locale (ad esempio mydomain.tld). Quindi, in tal caso, mypc.localdiventerebbe una query per mypc.local.mydomain.tld. Per evitare ciò, eseguire una query con il punto.

Configurazione del resolver

La configurazione del resolver è di grande importanza qui. In Ubuntu (e Debian) questo è configurato nel file /etc/network/interfaces(supponendo che tu non stia eseguendo 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

La risoluzione dei nomi in Linux può essere eseguita anche in altri modi. Non è solo che il server DNS locale viene interrogato per tutto questo. Dai un'occhiata al tuo /etc/nsswitch.conffile per la hostsconfigurazione della risoluzione:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Ciò significa che prima vengono provati i /etc/hostsfile (questo è il file), quindi mDNS e solo successivamente viene interrogato il server DNS reale. mDNS è implementato usando Avahi in Linux e si chiama Bonjour su dispositivi Apple. Sta usando il .localsuffisso di default e funziona tramite messaggi broadcast. Proprio come funziona ARP, ma poi per DNS.

Tutti questi sistemi possono essere molto confusi e anche di più quando vengono utilizzati .localin una normale configurazione DNS mista a dispositivi mDNS. Immagino sia per questo che ora sei confuso sul perché un dispositivo funziona e l'altro no: non stanno tutti usando lo stesso metodo di risoluzione.

Per sistemare le cose

  • Evitare l'uso se a .localmeno che non si desideri fare completamente affidamento su mDNS. Dalla tua domanda capisco che vorresti mantenere le cose configurate in un posto centrale, quindi il mio approccio qui è di evitarlo.
  • Configura il tuo server DNS locale (il dispositivo DD-WRT nel tuo caso) per utilizzare un nome di dominio speciale, ad es my.home. Per dnsmasq questa è una singola impostazione, ma in configurazioni regolari questa dovrebbe essere configurata sia sul server DNS che sul server DHCP (poiché viene annunciato tramite DHCP).
  • Configurare tutti i PC per avere un nome host semplice e univoco. Lo usano nella loro richiesta di DHCP e questo è usato nel dnsmasq in esecuzione sul router per risolverli. In alternativa, configurali manualmente per non dover fare affidamento su DHCP.
  • Rimuovi qualsiasi configurazione rimanente /etc/resolv.confnel caso in cui hai giocato con essa in passato.
  • Configura i PC nella tua rete da utilizzare my.homecome dominio di ricerca locale. Questo può essere fatto automaticamente tramite DHCP o se si utilizzano indirizzi statici tramite il /etc/network/interfacesfile o in Network Manager:

    inserisci qui la descrizione dell'immagine

  • Ora dovrebbero funzionare sia la semplice risoluzione dei nomi ( ping hostname) sia il nome completo ( ping hostname.my.home).

5
Wow! Risposta eccezionale gertvdijk! Molto completo. Tanto che avrò bisogno di un po 'di tempo per capire cosa hai detto. Posso dire che ho testato un ping con un punto dopo il nome host e ha funzionato correttamente. Non utilizzo DHCP su questa LAN per le macchine permanenti. Non ho mai configurato le impostazioni .local su nessuna macchina in quanto non capivo di cosa si trattasse. Lo esaminerò ulteriormente secondo le tue istruzioni e ti ricontatterò.
teracow,

Grazie per questa risposta esaustiva. Ho cambiato il mio /etc/nsswitch.conf in modo che il DNS sia tentato prima di mDNS files mdns4_minimal [NOTFOUND=return] dns mdns4. Ora tutto si comporta di più come mi aspetto con le mie macchine indirizzate host.foo.local (mal nominate). Prima che questo cambiamento ping hostnamefunzionasse ma ping hostname.foo.localnon ci riusciva. Mi stavo davvero confondendo quando dig hostnamefallivo e dig hostname.foo.localstavo restituendo un risultato, il contrario di quello che mi aspettavo. Ora posso eseguire il ping dei nomi di dominio completi come mi aspettavo. C'è un aspetto negativo nell'avere l'ordine impostato in questo modo?
TafT

1

Sulla base della risposta di gertvdijk ho appena commentato la riga in nsswitch.conf

sudo vim /etc/nsswitch.conf

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

0

Ho riscontrato problemi simili con un / etc / hosts contenente più spazi tra IP e nome host, invece usando una TAB. Dopo essere passato a TAB, il nome host può essere risolto tramite ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

vedi anche su /superuser//a/938366/467479


3
Mi dispiace, NON è corretto. Il file hosts funzionerà con spazi o schede. Inoltre, 127.0.0.1 dovrebbe prima avere localhost, seguito da localhost.localdomain e, a seconda della configurazione, il nome host della macchina. (Alcune configurazioni, Ubuntu / Debian hanno messo il tuo nome host sulla linea 127.0.1.1) Non consiglierei di installare alcun indirizzo .local nel file hosts, poiché sono in conflitto con mDNS / Avahi
The Dude,

1
Se hai macchine Windows sul tuo dominio, apparentemente utilizza DNS unicast, che non è compatibile con le implementazioni mDNS Avahi o Zeroconf. Inoltre, controlla il tuo /etc/nsswitch.conf per vedere se sta eseguendo il bailing dopo mdns4_minimal [NOTFOUND = return] o sta eseguendo una ricerca mdns4 completa (spostalo indietro). Inoltre, non configurare alcun server DNS per utilizzare il dominio .local, poiché i resolver mDNS / sd-DNS maschereranno le ricerche su quel dominio. Per il tuo TLD DNS interno, usa .lan, .work, .home, ecc. (Ma NON uno dei nuovi TLD, come .biz, .xyz, .web, ecc ...). Buona fortuna e benvenuto nel divertente mondo della risoluzione DNS.
The Dude,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.