Utilizzo di più record A per il mio dominio: i browser Web ne provano più di uno?


94

Se aggiungo più record A per il mio dominio, vengono restituiti in un ordine round robin dai server DNS.

Esempio:

192.0.2.1 A example.com
192.0.2.2 A example.com
192.0.2.3 A example.com

Ma come reagiscono i browser Web se il primo host ( 192.0.2.1) non è attivo (non raggiungibile)? Provano il secondo host ( 192.0.2.2) o restituiscono un messaggio di errore all'utente? Ci sono differenze tra i browser più popolari?

Se implemento la mia applicazione, posso implementare in modo che il secondo venga utilizzato nel caso in cui il primo sia inattivo, quindi è possibile. E questo sarebbe molto utile per creare un sito Web con tolleranza agli errori.

Risposte:


87

Sì, la maggior parte dei browser degli ultimi 5-10 anni proverà gli altri record A se uno non risponde. Questo a volte viene chiamato "tentativo del browser" o "tentativo del client" apparentemente. Praticamente troverai cose su di esso nel contesto dei vari exploit del browser che questa funzione abilita contro i siti che non la utilizzano (vedi Reindirizzamento DNS e Appuntamento DNS , Appuntamento anti-dns, Appuntamento anti-anti-dns, anti-anti -anti-dns pinning , e così via). Tipo di cattiva reputazione, ma dimostra che esiste.

Praticamente tutti i browser ricevono davvero l'elenco completo dei record A e controllano effettivamente gli altri se quello che sta usando fallisce. Puoi aspettarti che ogni client abbia un'attesa di 30 secondi quando provano per la prima volta ad accedere a un sito quando un server è inattivo, fino a quando non si connette a un indirizzo funzionante. Il browser memorizzerà quindi nella cache quale indirizzo funziona e continuerà a utilizzarlo per richieste future a meno che non fallisca, quindi dovrà cercare nuovamente l'elenco. Quindi 30 secondi di attesa alla prima richiesta, bene dopo.

Ma non è qualcosa che vuoi necessariamente usare, avrà un sacco di avvertenze sulla compatibilità del browser, la compatibilità del sistema operativo, la compatibilità del proxy, le intestazioni di controllo della cache avranno effetti strani sul fatto che si ricordi quali IP sono inattivi o inizia ad avere 30 secondi di attesa su ogni richiesta, le persone che scrivono client personalizzati per il tuo sito finiranno per usare gethostbyname invece di getaddrinfo e non saranno in grado di gestire il failover, ogni sorta di potenziali problemi.

Inoltre, non puoi fare affidamento su più record A per consentire server "master" e "slave", perché non saprai mai quale indirizzo verrà scelto dall'elenco da un browser. Tutti devono essere altrettanto in grado di gestire i visitatori se in esecuzione, perché chiunque potrebbe ottenere traffico se è attivo. Un browser potrebbe pensare che il tuo terzo server fuori dalla lista sia il più interessante, forse sembra il più vicino e sceglierà quello anche se tutti e tre sono ancora attivi.

Ma se riesci a convivere con i limiti e hai un sistema HTTP ragionevolmente semplice con cui puoi prevedere l'interazione del browser, funzionerà.

Oh, dovrai anche avere a che fare con molte persone che ti dicono che non esiste (dal momento che era vero 15 anni fa). Ma puoi provare a telnetare un nome di dominio con diversi record A, alcuni con IP morti e altri buoni, se devi provarlo (sì, anche il buon vecchio telnet ora usa getaddrinfo e gestisce più record A in questi giorni) - stamperà un bel elenco degli IP che sta provando fino a quando non avrà successo.


12
Ecco un rapporto del National Bureau of Economic Research che supporta la risposta di Joff.
Marco,

3
Curiosamente, mentre stackexchange.com punta a un IP, Google ne restituisce diversi: $ dig google.com @ ns1.google.com ;; SEZIONE RISPOSTA: google.com. 300 IN A 74.125.226.6 google.com. 300 IN A 74.125.226.7 google.com. 300 IN A 74.125.226.0 google.com. 300 IN A 74.125.226.4 google.com. 300 IN A 74.125.226.8 google.com. 300 IN A 74.125.226.2 google.com. 300 IN A 74.125.226.1 google.com. 300 IN A 74.125.226.3 google.com. 300 IN A 74.125.226.5 google.com. 300 IN A 74.125.226.14 google.com. 300 IN A 74.125.226.9
Louis St-Amour

1
Scusa, ma non credo sia così. I browser non hanno nulla a che fare con la risoluzione degli indirizzi IP, ciò accade nel software di sistema. Se si forniscono più record A, è necessario presumere che un determinato client ne riceverà uno casuale dall'elenco.
Jan Steinman,

19
Questo è come funziona nei browser moderni. Tutti scelgono di utilizzare le chiamate di sistema come getaddrinfo () per ottenere più indirizzi IP e gestire il failover internamente, anziché ottenere un singolo indirizzo IP dal sistema. Altri commentatori e rispondenti qui fanno parte del "sacco di persone che ti dicono che non esiste" dall'ultimo paragrafo di Joff --- Presumo che significino bene ma stanno diffondendo disinformazione.
Robert Tupelo-Schneck,

1
Per supportare l'affermazione di "browser 5-10 anni fa" di Joff, ecco un test fatto dal National Bureau of Economic Research che afferma che questo tipo di sistema funziona fino a IE 8. Mi sembra giusto. :)
Jomar Sevillejo,

5

Tieni presente che Windows Vista implementa le parti stupide di RFC3484 (ovvero il backporting da IPV6 a IPV4) e preferirà l'indirizzo IP che condivide la maggior parte dei prefissi con l'indirizzo IP dell'utente piuttosto che sceglierne uno a caso. Poiché la maggior parte degli utenti ha indirizzi IP che iniziano con 192.168, ciò significa che qualunque dei tuoi indirizzi IP capita di condividere la maggior parte dei bit di prefisso che otterrà la maggior parte del traffico Vista. Microsoft ha risolto questo particolare bit di idiozia in Windows 7 e versioni successive, quindi non è più un problema come in passato.


Vista, è una buona idea!
altro

3

Questa è la tecnica base di distribuzione del bilanciamento del carico DNS: DNS Round Robin. Questo non ha nulla a che fare con il browser, dipende dall'implementazione del resolver e dalla cache locale / remota dell'indirizzo DNS. Le modifiche sono che se un server non riesce, a causa della memorizzazione nella cache nel livello DNS, il sito Web potrebbe essere inaccessibile.

Vedi qui per una spiegazione di base su Round Robin DNS su WikiPedia.


1
Bene, dal momento che il browser è il risolutore - dipende dall'implementazione del browser, come quello che so.
Jonas

2
No, ci sono le librerie di sistema che risolvono i DNS usando ovviamente il DNS Nameserver che hai impostato nel sistema. Le funzioni fanno parte della libreria standard del sistema operativo.
keatch

Ma sia nslookup cnn.comsu Windows che host cnn.comsu Linux restituisce un elenco di indirizzi IP, quindi dipende sicuramente dall'implementazione del browser .
Jonas

5
@iivel: No, non è vero. Se scrivo un programma Java e risolvo un nome con InetAddress.getAllByName ("esempio.com"), ottengo un elenco con tutti gli indirizzi IP, quindi posso scegliere di avviare una connessione TCP a tutti, se lo desidero. Ed è lo stesso se usi getaddrinfo () in C. Quindi è sicuramente una scelta che fanno gli sviluppatori e non il sistema operativo.
Jonas,

1
@ J.Money Questa domanda sta chiedendo esattamente circa l'attuazione, non il modo in cui possiamo farlo.
Franklin Yu,

0

Il sistema operativo determina quale IP utilizzare, non il browser. Windows eseguirà il round robin dell'elenco restituito (nell'elenco passato da DNS), sebbene continuerà a utilizzare lo stesso indirizzo fino a quando il DNS non viene scaricato o è scaduto. * Le implementazioni ix dipendono in parte dall'implementazione in bundle dello stack tcp ma in genere seguono anche un metodo round robin.


2
No, questo è sbagliato. Se scrivo un programma Java e risolvo un nome con InetAddress.getAllByName("example.com")ottengo un elenco con tutti gli indirizzi IP, quindi posso scegliere di avviare una connessione TCP a tutti, se lo desidero. Ed è lo stesso se lo usi getaddrinfo()in C. Quindi è sicuramente una scelta che fanno gli sviluppatori e non il sistema operativo. Il server DNS decide solo in quale ordine viene restituito l'elenco di indirizzi IP.
Jonas,

Ok, quindi puoi fare manualmente tutto ciò che vuoi con lo stack: potresti anche tirare il tuo e dimenticare di winsock tutti insieme. Tuttavia, se si scrive un'app e si lascia che il sistema operativo faccia la sua cosa (astratto) - il comportamento è come notato. La tua domanda riguardava specificamente il comportamento tradizionale delle applicazioni, non ciò che è possibile. La maggior parte degli sviluppatori gestisce l'utilizzo del nome non risolto e lascia che il sistema operativo faccia quello che fa, piuttosto che associare strettamente comportamenti.
1111

1
Non sono sicuro del motivo per cui la risposta è stata sottoposta a downgrade, ma la domanda riguarda cosa fanno i browser. Attualmente tutti i browser consentono al sistema operativo di eseguire la risoluzione (a parte alcuni plug-in per Firefox e Chrome). Se desideri dettagli su come garantire la disponibilità in caso di interruzione di un provider, consulta i sistemi di bilanciamento del carico o il clustering.
1111

I browser probabilmente fanno come dici tu: lascia che il sistema operativo esegua la ricerca DNS, ma restituisce un elenco con indirizzi IP al browser. E la domanda è: cosa fanno i browser più popolari se il primo indirizzo non è raggiungibile? provano il secondo?
Jonas,

2
L'articolo che hai citato da Pete Tenereillo è noto per essere obsoleto (principalmente errato al giorno d'oggi). Con Chrome, chrome: // net-internals / # dns mostra la cache DNS corrente. Non credo che il sistema operativo determini sempre quale IP utilizzare. Almeno con Chrome puoi scegliere di utilizzare AAAA se disponibile o solo A. OP parla di come i browser selezionano da DNS, non di come il computer trova il suo server DNS ....
sdaffa23fdsf
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.