In che modo traceroute risolve i nomi?


11

Mentre scrivevo una sceneggiatura, volevo fare riferimento a una macchina con il nome del computer che le avevo dato (ad es. "Selenium-rc"). Non ho potuto eseguire il ping con "selenium-rc", quindi ho provato i seguenti comandi per vedere se il nome è stato riconosciuto.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

Ok, traceroute "ha trovato" il nome. Come? Il prossimo ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

Hmm ... il meccanismo di ricerca qui deve essere diverso perché l'host non è noto. Suppongo che questo stia utilizzando un processo di risoluzione dei nomi di sistema, mentre il primo esempio utilizzava un processo specifico per traceroute. Corretta?

Poi quando sono tornato un po 'più tardi ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

Ok, risultato diverso. Il nome "selenium-rc" non è cambiato sulla macchina stessa, ma il processo di risoluzione dei nomi traceroute deve includere una sorta di priorità e ora fornisce un risultato presumibilmente più autorevole assegnato da un altro sistema / servizio sulla rete. (Sfortunatamente, presumo sia un nome dinamico che non controllo, e quindi non sarebbe utile in uno script.)

Qualcuno può spiegare i risultati?

Risposte:


9

Generalmente, in Linux e Unix, traceroute e ping usano entrambi una chiamata per gethostbyname () per cercare il nome di un sistema. gethostbyname () a sua volta utilizza i file di configurazione del sistema per determinare l'ordine in cui interrogare i database di denominazione, ad esempio: / etc / hosts e DNS.

In Linux, l'azione predefinita è (o forse una volta era) per interrogare prima DNS e poi / etc / hosts. Questo può essere modificato o aggiornato impostando l'ordine desiderato in /etc/host.conf.

Per cercare / etc / hosts prima del DNS, imposta il seguente ordine in /etc/host.conf:

order hosts,bind

In Solaris, questo stesso ordine è controllato tramite il file /etc/nsswitch.conf, nella voce per il database degli host.

host: file dns

Imposta l'ordine di ricerca in / etc / hosts prima di cercare DNS.

Traceroute e ping utilizzerebbero entrambi questi metodi per cercare in tutti i database di denominazione configurati. l' hoste nslookupcomandi sia per uso esclusivamente DNS, in modo da non necessariamente duplicare i risultati apparentemente incoerenti stai vedendo.

Solaris ha uno strumento di ricerca getent, che può essere utilizzato per identificare host o indirizzi nello stesso modo di traceroute e ping, seguendo il set configurato di database di denominazione per la ricerca.

getent hosts <hostname>

cerca tra i database elencati per gli host, in /etc/nsswitch.conf.

Così. Nel tuo caso, per ottenere risultati coerenti, aggiungi quanto segue a / etc / hosts

192.168.235.41 selenium-rc

E, assicurati che /etc/host.conf abbia:

order hosts,bind

Oppure, assicurarsi che /etc/nsswitch.conf abbia:

hosts: files dns

Una volta fatto, dovresti vedere risultati più coerenti sia con ping, sia con traceroute, così come altri comandi, come ssh, telnet, curl, wget, ecc.


Quando ho interrogato il server DNS elencato nel file resolv.conf con l'utilità dig, ho trovato entrambe le voci. Immagino che traceroute abbia preferito quello pienamente qualificato.
Keith Bentrup,

2

Sembra che la ricerca inversa sia impostata correttamente, ma non in avanti.

Il tuo sistema può cercare l'indirizzo IP 192.168.235.41 e riconoscere che lo è selenium-rc, ma quando prova a cercare selenium-rcnon riesce.

Vi consiglio di controllare /etc/hostse /etc/resolv.conf; il comportamento della getaddrinfochiamata di sistema è dettato da quest'ultimo e fa riferimento al primo.


1

La mia ipotesi: l'invocazione ha traceroute 192.168.235.41causato l'uscita di una richiesta DNS per trovare il nome associato all'indirizzo IP 192.168.235.41. traceroute -n 192.168.235.41è il modo per avviare traceroute senza che esegua ricerche DNS su ogni indirizzo IP che trova. Il server DNS ha impiegato più tempo per rispondere di quanto il sistema DNS abbia voluto attendere, quindi all'inizio traceroute non ha assegnato un nome host per 192.168.235.41. Quando traceroute invia e riceve i pacchetti da 192.168.235.41, il server DNS ha risposto, quindi traceroute può assegnargli un nome host.

Quindi, direi "problemi del server DNS", con un tempismo molto conveniente che ti ha reso sospettoso di altre cose. Pensa qui alla "Legge di Murphy". Quando torni un po 'più tardi, ottieni un nome diverso per lo stesso indirizzo IP, il che mi fa anche pensare che qualcuno stia scherzando con la configurazione del server DNS durante il tuo traceroute.

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.