Come funziona la risoluzione dei nomi DNS, in linea di principio?


10

In questo momento sto seguendo un corso online per l'amministratore di sistema Linux e mi è stata posta una domanda che in genere non capisco. So come cercare un server dei nomi, se ho ragione, almeno sta usando il comando dig per trovare l'indirizzo nel comando di sezione aggiuntivo, ma mi sono perso un po 'quando ho posto la seguente domanda.

Supponendo che il nameserver configurato non abbia alcun risultato memorizzato nella cache a sua disposizione, quanti nameserver devono essere interrogati dal nameserver per risolvere maps.google.com? Quali comandi useresti per trovare tutti questi nameserver? Elenca uno per ogni livello e spiega perché questo livello è necessario.

Non voglio la risposta, vorrei solo sapere cosa mi viene chiesto di fare esattamente.


Stavo pensando dig +trace, ma non sono sicuro di cosa si intenda per livelli. Questa potrebbe essere una domanda per Server Fault.
Big McLargeHuge

Ciao linux8807. Ho modificato la tua domanda per renderla più chiara; in particolare, ho provato a mettere un titolo migliore su di esso. Se ritieni che abbia cambiato il tuo intento, sentiti libero di ripristinare la modifica (fai clic sul link "modificato" e poi "ripristina" sopra la revisione originale).
un CVn

Penso che questo video lo spieghi: youtube.com/watch?v=2ZUxoi7YNgs

Risposte:


13

Supponendo che il nameserver configurato non abbia alcun risultato memorizzato nella cache a sua disposizione, quanti nameserver devono essere interrogati dal nameserver per risolvere maps.google.com? Quali comandi useresti per trovare tutti questi nameserver? Elenca uno per ogni livello e spiega perché questo livello è necessario.

Bene, scegliamo questo a parte.

"Supponendo che il nameserver configurato non abbia alcun risultato memorizzato nella cache" , innanzitutto, se non ha alcun dato memorizzato nella cache, non può risolvere nulla. Per eseguire il priming della cache del resolver, è necessario disporre dei record NS e address (A, AAAA) per la zona .(radice AKA). Questi sono i server dei nomi di root, che si trovano nella root-servers.net.zona. Non c'è nulla di magico in quella zona o in quei server DNS. Tuttavia, questi dati vengono spesso forniti "fuori banda" al risolutore DNS, proprio per adescare la cache del risolutore. I server dei nomi solo autorevoli non hanno bisogno di questi dati, ma lo fanno i server dei nomi in risoluzione.

Inoltre, "risolvi" in cosa? Qualche RRtype con quel nome? Un ARR? O qualcos'altro? Quale classe ( CH/ Chaosnet, IN/ Internet, ...)? Il processo esatto sarà diverso, ma l'idea generale rimane la stessa.

Se possiamo supporre che sappiamo come trovare i server dei nomi di root ma niente di più, e che per "risoluzione" intendiamo ottenere il contenuto di qualsiasi IN ARR associato al nome, diventa molto più pratico.

Per risolvere un nome DNS, sostanzialmente dividi il nome in etichette e poi procedi da destra a sinistra. Non dimenticare il .alla fine; avresti davvero risolto maps.google.com.piuttosto che maps.google.com. Questo ci lascia con la necessità di risolvere (lo sappiamo, ma un'implementazione del resolver DNS probabilmente non lo farà):

  • .
  • com.
  • google.com.
  • maps.google.com.

Inizia con capire dove chiedere il contenuto di .. Questo è facile; disponiamo già di tali informazioni: i nomi dei server dei nomi root e gli indirizzi IP . Quindi abbiamo un server dei nomi di root. Diciamo che decidiamo di usare 198.41.0.4 ( a.root-servers.net, anche 2001: 503: ba3e :: 2: 30) per continuare la risoluzione dei nomi. In pratica, una delle prime cose fatte dal risolutore sarà probabilmente quella di utilizzare i dati del server radice forniti per chiedere a uno dei server della zona radice un elenco accurato dei server dei nomi per la zona radice, assicurando così che se qualcuno di i nomi e gli indirizzi IP sono validi e raggiungibili, quando avrà inizio la risoluzione avrà un set completo e completo di dati per la zona radice.

maps.google.com. IN ASposta una query DNS per 198.41.0.4. In risposta ti dirà "no, non lo farò, ma ecco qualcuno che potrebbe sapere"; questo è un rinvio. Contiene i NSrecord per la zona più vicina di cui il server in questione è a conoscenza, insieme a tutti i record di colla disponibili sul server. Se non sono disponibili dati sulla colla, devi prima risolvere l'host indicato nel record NS selezionato, quindi genera una risoluzione dei nomi separata per ottenere l'indirizzo IP; se sono disponibili dati di colla, avrai l'indirizzo IP di un server dei nomi che è almeno "più vicino" alla risposta. In questo caso, sarà il set di server per la com.zona e verranno forniti anche i dati di colla.

Ripetere il processo, ponendo a uno dei com.server dei nomi la stessa domanda. Neanche loro lo sanno, ma ti rimandano ai server dei nomi autorevoli di Google. A questo punto, nel caso generale, verrà colpito o meno se vengono forniti o meno i dati di colla; non c'è nulla che impedisca a un comdominio di avere server dei nomi solo nl, ad esempio, nel qual caso è improbabile che i dati di colla siano disponibili dai server gTLD. I dati di colla forniti potrebbero anche essere incompleti o, se sei davvero sfortunato, potrebbero anche essere errati! Devi sempre essere pronto a spawnare quella risoluzione di nome separata che ho menzionato sopra.

Fondamentalmente, vai avanti fino a quando non ottieni una risposta con il aaflag (risposta autorevole) impostato. Quella risposta ti dirà cosa stai chiedendo o che il RR che hai richiesto non esiste ( NXDOMAINo NOERRORcon record di dati a risposta zero). Continua a cercare risposte come SERVFAIL(e fai un passo indietro e prova un altro server se ne hai uno; se tutti i server nominati ritornano SERVFAIL, fallisci il processo di risoluzione dei nomi e torna SERVFAILal client).

L'alternativa alla richiesta del nome RR completo da ciascun server (che potrebbe essere considerato una cattiva pratica) è quella di utilizzare l'elenco suddiviso di etichette che abbiamo determinato in precedenza, chiedere ai server dei nomi dati dal server più verso la radice per IN NSe IN A/ IN AAAARR per quell'etichetta e utilizzali per promuovere il processo di risoluzione dei nomi. Questo è solo marginalmente diverso nella pratica e lo stesso processo si applica ancora.

È possibile simulare l'intero processo utilizzando l' +traceopzione per l' digutilità, inclusa in BIND o set debugin nslookup.

Vale anche la pena ricordare che alcuni tipi di RR (in particolare NS, MXe alcuni altri; inoltre, è A6stato ragionevolmente ben utilizzato per un po 'ma è stato deprecato) e può fare riferimento ad altri RR. In tal caso, potrebbe essere necessario generare un altro processo di risoluzione dei nomi per dare una risposta completa e utile al tuo cliente.


1
Penso che questa risposta sia abbastanza in linea con la richiesta del PO di comprendere i concetti piuttosto che solo la procedura.
111 ---

Quindi quello che sto facendo è scavare maps.google.com IN A, quindi scaverei allo stesso modo ma con ns1.google.com se questo è corretto, se lo è, di quali livelli parla l'insegnante e perché dovrebbero essere necessario?
Linux8807,

@ linux8807 Si otterrebbe digil nome ns1.google.com dopo aver ricevuto un riferimento ad esso che non include un indirizzo IP nei record di colla forniti. Quindi si continuerà con il precedente processo di risoluzione dei nomi.
un CVn del

@ MichaelKjörling Tutti i record ns1-4.google.com hanno un indirizzo IP nei record di colla. i.imgur.com/o79aIGB.png
linux8807,

@ linux8807 Questo sarà molto spesso il caso in cui i record di colla si trovano nello stesso TLD del dominio per il quale si richiede la query. Tuttavia, non è possibile fare affidamento su di esso nel caso generale .
un CVn del

7

C'è un dnstracercomando (potrebbe essere necessario installarlo, almeno su Debian, è anche il nome del pacchetto) che traccia la risoluzione dei nomi. Puoi anche (come sottolinea Koveras in un commento) usare dig.

Qui è con dnstracer. -s .significa iniziare con la radice; -4significa usare IPv4 (v6 è rotto qui ...); -osignifica effettivamente mostrare gli indirizzi IP risolti alla fine (ho omesso quella parte dell'output, ce ne sono molti).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

Tale output continua, poiché dnstracer traccia tutti i percorsi (in modo da poter vedere se, ad esempio, alcuni dei nameserver hanno una zona obsoleta).

Quindi, puoi vedere che richiede una query al server dei nomi radice, quindi una ai server gtld (il server per la zona .com), infine quella a un nameserver di Google.

Con dig, l'output è molto più dettagliato (quindi farò molto taglio):

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digmostra inoltre che ha eseguito una query per ottenere l'elenco corrente di nameserver root. Questo è qualcosa che un server DNS farà in genere molto raramente. Quindi non sono sicuro se lo conti nella custodia della cache fredda.

Ovviamente si può anche guardare le query reali sul filo con, ad esempio, wireshark.


Non sarei in grado di installare nulla perché è installato in un terminale ma una volta tornato a casa dal lavoro proverò il dnstracer e vedrò se funziona, e sta chiedendo * (216.239.38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * questo? In tal caso, sono già in un certo senso in grado di accedervi ma non con una risposta autorevole. Inoltre, è questo a cui si riferisce per livelli?
linux8807,

@ linux8807 Puoi usarlo digse non hai dnstracer(o se ti piace digla formattazione). Gli indirizzi IP che dnstracer sta emettendo sono gli indirizzi IP dei nameserver; i loro nomi sono a sinistra. a.root-servers.net è 198.41.0.4, ecc. Quelli sono i server da interrogare e ti dicono anche per quale zona tra parentesi quadre. Sospetto che il primo livello sia * .root-server.net (per .), il secondo è * .gtld-server.net (per .com), ecc.
derobert
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.