Come viene determinato l'ordine di ricerca DNS?


20

Ad esempio: abbiamo registrato il nome di dominio domain.com e aggiunto i record del server dei nomi sul server dei registrar:
ns1.domain.com.
ns2.domain.com.
ns3.domain.com.

Quindi cerchiamo domain.com . Riceviamo tutti e 3 gli indirizzi del server dei nomi.
1. Quale di questi server verrà richiesto ulteriormente e perché?
2. L'ordine dei record NS nel file di zona è importante?
3. È determinato in qualsiasi RFC ?

Risposte:


20

Purtroppo, la risposta qui è "dipende". I fattori da cui dipende varieranno in base al dominio e alla configurazione dei server proprietari, nonché alla configurazione del proprio DNS locale.

Innanzitutto, ad esempio, per quanto riguarda i record NS restituiti: è perfettamente consentito randomizzare l'ordine in cui tali record vengono restituiti, quindi l'ordine può differire ogni volta che lo richiedi. D'altra parte, ciò non viene fatto da tutte le implementazioni DNS, quindi potresti ottenere un elenco ordinato staticamente. Il punto è che non puoi esserne sicuro.

Successivamente, alcune implementazioni DNS eseguiranno una query su ogni NS in parallelo e utilizzeranno la prima risposta. Altri colpiranno ciascuno, determineranno il più veloce su un certo numero di richieste e lo useranno. O potrebbe solo round-robin.

Esistono più RFC per DNS, due dei più utili che ho trovato sono:

http://www.faqs.org/rfcs/rfc1912.html

http://www.faqs.org/rfcs/rfc1033.html

Mi rendo conto che si tratta di una non-risposta, senza nulla di definitivo da portare via, ma dato quanto sopra, l'unico vero modo per determinare il comportamento di un determinato dominio è testare.


Ho approvato la tua risposta. Stavo per dire la stessa cosa ma mi hai battuto.
Tonny,

Anche i client che usano getaddrinfo finiscono con risultati ordinati mentre le chiamate gethostbyname sono apparentemente casuali. I clienti che non si aspettano che tale comportamento si rompano quindi in alcuni punti con il robin dns.
Matt

5

L'implementazione più comune che ho visto a livello di client, come gli ISP in tutto il mondo, è la seguente:

  1. Qualcuno (come un abbonato a banda larga) chiede ai server DNS dell'ISP di risolvere il record A per foo.example.com.
  2. L'ISP controlla la propria cache e se quel record viene memorizzato nella cache e ancora considerato "aggiornato", viene immediatamente restituito tramite la cache. ( Ecco come funzionano tutte le cache DNS, in modo da non forzare inutilmente i server DNS del sito in questione. )
  3. Se il record non è stato memorizzato nella cache o se la cache è considerata "non aggiornata / non aggiornata", l'ISP sa che deve risolvere nuovamente l'ultimo record.
  4. Ora l'ISP deve sapere quali server dei nomi interrogare sull'ultimo record.
  5. L'ISP inizia controllando l'elenco memorizzato nella cache dei server dei nomi autorevoli per il dominio (questi sono ns1.example.com, ns2.example.com e così via insieme ai loro IP). Se tali record sono ancora considerati nuovi, passa al passaggio 8.
  6. Se i record del nameserver memorizzati nella cache sono stati considerati scaduti o se non disponevano di alcun record memorizzato nella cache per quel dominio, l'ISP interroga i root-nameserver del TLD (come il registro .com se si tratta di un dominio .com) per ottenere il dominio coppie di nomi / IP dei nameserver più aggiornate per esempio.com. ( Puoi provare tu stesso tramite "dig @ b.gtld-servers.net example.com" per vedere cosa sanno i nameserver di root per il tuo TLD sul tuo dominio - se il tuo dominio appartiene ai soliti TLD com / net / etc. Altro I TLD dovrebbero interrogare i rispettivi server root. )
  7. I nameserver di root per il TLD restituiscono sempre i nameserver nell'ordine esatto in cui sono stati specificati dall'utente; nessuna randomizzazione continua. Restituiscono anche gli IP per ciascun nameserver; questo è noto come "GLUE" ed è ciò che consente a Internet di risolvere il problema "pollo e uovo" su come risolvere un nome host di nameserver su un IP prima di sapere qualcosa di tutto su un dominio. Inoltre, la maggior parte di essi (come i registri com / net / etc, che sono i più grandi) utilizzano un tempo di cache di 2 giorni in modo da non essere martellato costantemente con "qual è l'elenco dei nameserver per il dominio X?" richieste. Questa è la fonte della conoscenza comune che DEVI attendere 2 giorni fino a quando puoi tranquillamente affermare che i tuoi nuovi nameserver sono conosciuti in tutto il mondo, dopo che "
  8. Quando l'ISP conosce i server dei nomi di example.com e i loro IP, come ns1.example.com, ns2.example.com, ns3.example.com, l'ISP ora seleziona un server casuale da quell'elenco e invia la query. ( È carino da parte loro, non martellano inutilmente tutti i server DNS del sito in questione e aiutano ulteriormente con il bilanciamento del carico non interrogando sempre il primo nameserver elencato. )
  9. Se l'ISP non riceve una risposta da quel server dei nomi entro un determinato periodo di timeout, ne interroga un altro nell'elenco.
  10. Quando ha una risposta, l'ISP ora lo memorizza nella propria cache locale. Per quanto tempo rimarrà nella cache; a ogni record restituito da qualsiasi server DNS è associato anche un tempo di "scadenza" (in secondi), che indica per quanto tempo al client di query (come il server DNS dell'ISP) è consentito memorizzare nella cache tale record prima che venga considerato " ancora utilizzabile ma probabilmente obsoleto, una nuova query dovrebbe ora essere eseguita SE POSSIBILE solo per essere sicuro che non sia cambiato. " C'è anche un tempo di "scadenza" che è specificato nel record "SOA" (Inizio dell'autorità) di ogni singolo nameserver (puoi vedere il tuo tramite "dig @ ns1.example.com example.com -t soa"), che specifica un "limite rigido" globale per tutti i record restituiti da quel server, dopodiché qualsiasi cache DOVREBBE ELIMINARE il suo record memorizzato nella cache ANCHE SE i server dei nomi sono inattivi ed è impossibile cercare nuovamente i record. Di solito la scadenza media è compresa tra 30 minuti e 5 ore e la scadenza media è di solito tra 1-3 settimane.
  11. Dopo quel lavoro esaustivo, l'ISP ha finalmente l'ultimo record DNS e può restituirlo al sottoscrittore a banda larga interrogante, che non è affatto saggio quale enorme lavoro abbia avuto luogo dietro le quinte!

Questo processo viene ripetuto per OGNI ricerca di record. Tuttavia, solo la prima query esegue l'intero lavoro; successivamente gli IP dei nameserver verranno memorizzati nella cache e le successive query al server DNS di cache dell'ISP saranno rapidamente in grado di passare al punto 8.

Ora, per quanto riguarda la randomizzazione del passaggio 8, funziona a livello record. Supponiamo che l'abbonato a banda larga di quell'ISP abbia chiesto i seguenti record:

  • A foo.example.com
  • Un esempio.com
  • Un www.esempio.com
  • MX example.com (un cliente ISP non dovrebbe chiedere questo record, ma è solo un esempio)

Ogni record verrà gestito come una propria "entità" separata, memorizzata nella cache in modo indipendente e cercata. Quindi, supponiamo che l'abbonato e l'ISP non abbiano mai incontrato prima il dominio ed entrambi abbiano zero record nella cache. Le ricerche potrebbero essere le seguenti:

  • Un foo.example.com tramite ns1.example.com, quindi memorizzato nella cache dell'ISP
  • Un esempio.com tramite ns3.example.com, quindi memorizzato nella cache dell'ISP
  • Un www.example.com tramite ns2.example.com, quindi memorizzato nella cache dell'ISP
  • MX example.com tramite ns3.example.com, quindi memorizzato nella cache dell'ISP

Ogni volta che i record memorizzati nella cache sono scaduti, il processo viene ripetuto, quindi non si sa nemmeno che le richieste successive per quel record utilizzeranno nuovamente lo stesso server.

Pertanto, il tuo obiettivo più grande in assoluto è assicurarti che tutti i tuoi server DNS siano completamente sincronizzati tra loro, rispecchiando perfettamente ogni record DNS su ogni server. Non si sa mai quale server verrà colpito da un client DNS e non si può fare affidamento su alcun ordine. Non vi è nulla di simile.

Inoltre, come menzionato da Adam C, i server DNS a livello di server (esempio.com) stessi potrebbero restituire i record NS e randomizzare l'ordine di quelli. È molto comune che i normali server DNS stiano randomizzando i loro record NS con la minima possibilità che una cattiva implementazione DNS scelga sempre il primo namserver restituito. Tuttavia, i nameserver TLOT ROOT (menzionati in precedenza) non randomizzeranno mai l'elenco e il loro elenco è ciò che conta davvero quando si tratta di risolvere il dominio. Ecco perché la maggior parte delle implementazioni sceglie un server casuale dagli elenchi dei nameserver, per evitare di colpire sempre lo stesso server e sovraccaricarlo.

Bene, questo è il tuo primer su come funziona il DNS e cosa dovresti ricordare.

  • In breve: tratta tutti i tuoi server DNS come se fossero solo un server, rendendoti il ​​tuo obiettivo più alto nella vita per assicurarti che siano tutti ugualmente in grado di rispondere a qualsiasi query che potrebbe essere lanciata contro di loro.

Disclaimer: obiettivi più alti nella vita rispetto alla gestione del DNS possono essere disponibili ma sono venduti separatamente, usa la tua immaginazione. ;-)

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.