Utilisation de plusieurs enregistrements A pour mon domaine - les navigateurs Web en testent-ils plusieurs?

94

Si j'ajoute plusieurs enregistrements A pour mon domaine, ils sont renvoyés dans un ordre circulaire par les serveurs DNS.

Exemple:

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

Mais comment réagissent les navigateurs Web si le premier hôte ( 192.0.2.1) est en panne (inaccessible)? Essayent-ils le deuxième hôte ( 192.0.2.2) ou renvoient-ils un message d'erreur à l'utilisateur? Existe-t-il une différence entre les navigateurs les plus populaires?

Si j'implémente ma propre application, je peux l'implémenter de sorte que la seconde soit utilisée au cas où la première serait en panne, ce qui est donc possible. Et cela serait très utile pour créer un site Web tolérant aux pannes.

Jonas
la source

Réponses:

87

Oui, la plupart des navigateurs des 5 à 10 dernières années essaieront les autres enregistrements A si l’un ne répond pas. Cela s'appelle parfois "tentative du navigateur" ou "tentative du client" apparemment. Vous jolie trouverez bien que des choses à ce sujet dans le cadre des différents exploits de navigateur qui cette fonctionnalité permet contre les sites ne pas l' utiliser (voir reconsolidation DNS et épingler DNS , épinglage anti-dns, épinglage anti-anti-dns, anti-anti -anti-dns pinning , et ainsi de suite). Une sorte de mauvaise réputation, mais cela prouve son existence.

Presque tous les navigateurs reçoivent effectivement la liste complète des enregistrements A et en vérifient bien d’autres si celui qu’il utilise échoue. Vous pouvez vous attendre à ce que chaque client attende 30 secondes lorsqu'il tente d'accéder au site pour la première fois, lorsqu'un serveur est en panne, jusqu'à ce qu'il se connecte à une adresse fonctionnelle. Le navigateur mettra alors en cache l'adresse qui fonctionne et continuera à utiliser celle-ci pour les demandes futures, sauf en cas d'échec; il devra alors effectuer une nouvelle recherche dans la liste. Donc, 30 secondes d'attente à la première demande, très bien par la suite.

Mais ce n’est pas nécessairement quelque chose que vous voulez utiliser, il va y avoir beaucoup de mises en garde concernant la compatibilité du navigateur, la compatibilité os / OS, la compatibilité du proxy, les en-têtes de contrôle du cache vont avoir des effets étranges sur le fait de savoir quelles adresses sont en panne ou commencent à en avoir que chaque seconde demande 30 secondes d’attente, les personnes écrivant des clients personnalisés pour votre site finiront par utiliser gethostbyname au lieu de getaddrinfo et ne seront pas en mesure de gérer le basculement, toutes sortes de problèmes potentiels.

Vous ne pouvez pas non plus vous fier à plusieurs enregistrements A pour autoriser les serveurs "maîtres" et "esclaves", car vous ne saurez jamais quelle adresse un navigateur va choisir dans la liste. Ils doivent tous être tout aussi capables de gérer les visiteurs s’ils courent, car tout le monde peut avoir du trafic s’il est en hausse. Un navigateur peut penser que votre troisième serveur de la liste est le plus attrayant, peut-être le plus proche, et il choisira celui-ci même si les trois sont toujours disponibles.

Mais si vous pouvez vivre avec les limitations et disposer d'un système HTTP relativement simple avec lequel vous pouvez prédire l'interaction du navigateur, cela fonctionnera.

Oh, vous devrez également faire face à beaucoup de gens vous dire que cela n'existe pas (puisque c'était vrai il y a 15 ans). Mais vous pouvez essayer de vous connecter à un nom de domaine avec plusieurs enregistrements A, certains avec des adresses IP mortes et d'autres bons, si vous avez besoin de le prouver (oui, même le bon vieux telnet utilise maintenant getaddrinfo et gère plusieurs enregistrements A de manière élégante ces jours-ci). - il affichera une belle liste des adresses IP qu’il essaie jusqu’à ce qu’il réussisse.

Joff
la source
12
Voici un rapport du National Bureau of Economic Research qui corrobore la réponse de Joff.
Marco
3
Curieusement, alors que stackexchange.com pointe vers une adresse IP, Google en renvoie plusieurs: $ dig google.com @ ns1.google.com ;; SECTION RÉPONSE: 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 Le
1
Désolé, mais je ne pense pas que ça fonctionne comme ça. Les navigateurs n'ont rien à voir avec la résolution des adresses IP - cela se produit dans les logiciels système. Si vous fournissez plusieurs enregistrements A, vous devez supposer qu'un client donné en recevra un de manière aléatoire dans la liste.
Jan Steinman
19
C'est la façon dont cela fonctionne dans les navigateurs contemporains. Ils choisissent tous d'utiliser des appels système tels que getaddrinfo () pour obtenir plusieurs adresses IP et gérer le basculement en interne, plutôt que d'obtenir une seule adresse IP du système. D'autres commentateurs et répondeurs font partie du "grand nombre de personnes vous disant que cela n'existe pas" du dernier paragraphe de Joff - je suppose qu'elles veulent bien dire, mais elles répandent des informations erronées.
Robert Tupelo-Schneck
1
Pour appuyer la déclaration de Joff selon laquelle "les navigateurs sont navigateurs il y a 5 à 10 ans", voici un test effectué par le National Bureau of Economic Research, qui indique que ce type de système fonctionne jusqu'à IE 8. Cela me semble juste. :)
Jomar Sevillejo
5

Soyez averti que Windows Vista implémente les parties stupides de RFC3484 (c’est-à-dire le portage d’IPV6 à IPV4) et préférera l’adresse IP qui partage le plus de préfixes avec l’adresse IP de l’utilisateur plutôt que de choisir un au hasard. Étant donné que la plupart des utilisateurs ont des adresses IP commençant par 192.168, cela signifie que l’une de vos adresses IP partageant le plus de préfixes avec lesquels le trafic Vista sera le plus important. Microsoft a corrigé cette idiotie dans Windows 7 et les versions ultérieures. Ce problème n'est donc plus aussi grave qu'auparavant.

Mike Scott
la source
Vista, c'est un bon!
the0ther
3

Il s’agit d’une technique de base d’équilibrage de la charge DNS: DNS Round Robin. Cela n'a rien à voir avec le navigateur, cela dépend de l'implémentation du résolveur et du cache local / distant de l'adresse DNS. Les changements sont que si un serveur échoue, en raison de la mise en cache dans la couche DNS, votre site Web peut être inaccessible.

Voir ici pour une explication de base sur le Round Robin DNS sur WikiPedia.

keatch
la source
1
Eh bien, puisque le navigateur est le résolveur - cela dépend de la mise en œuvre du navigateur, comme je le sais.
Jonas
2
Non, il y a la bibliothèque système qui résout le DNS en utilisant bien sûr le DNS Nameserver que vous avez configuré dans le système. La fonction fait partie de la bibliothèque standard du système d'exploitation.
Keatch
Mais nslookup cnn.comsous Windows et host cnn.comsous Linux, une liste d'adresses IP est renvoyée. Cela dépend donc certainement de la mise en oeuvre du navigateur .
Jonas
5
@ivel: Non, ce n'est pas vrai. Si j'écris un programme Java et que je résous un nom avec InetAddress.getAllByName ("example.com"), je reçois une liste avec toutes les adresses IP. Je peux donc choisir de démarrer une connexion TCP avec chacun d'entre eux si je le souhaite. Et c'est la même chose si vous utilisez getaddrinfo () en C. C'est donc un choix que les développeurs font et pas le système d'exploitation.
Jonas
1
@ J.Money Cette question concerne précisément la mise en œuvre, pas comment nous pouvons le faire.
Franklin Yu
0

Le système d'exploitation détermine quelle adresse IP utiliser, pas le navigateur. Windows va rondier la liste renvoyée (dans la liste renvoyée du DNS), mais continuera à utiliser la même adresse jusqu'à ce que le DNS soit vidé ou expire. * Les implémentations ix dépendent en partie de l'implémentation de la pile TCP commun, mais suivent généralement une méthode de tourniquet à tour de rôle.

iivel
la source
2
Non, c'est faux. Si j'écris un programme Java et que InetAddress.getAllByName("example.com")je résous un nom avec une liste de toutes les adresses IP, je peux donc choisir de démarrer une connexion TCP avec chacun d'eux si je le souhaite. Et c'est la même chose si vous utilisez getaddrinfo()en C. C'est donc un choix que les développeurs font et non le système d'exploitation. Le serveur DNS décide uniquement dans quel ordre la liste d'adresses IP est renvoyée.
Jonas
Ok, vous pouvez donc faire manuellement ce que vous voulez avec la pile - vous pouvez même lancer le vôtre et oublier WinSock. Cependant, si vous écrivez une application et laissez le système d'exploitation le faire (résumé), le comportement est comme indiqué. Votre question portait spécifiquement sur le comportement traditionnel des applications - pas sur ce qui est possible. La plupart des développeurs gèrent le nom non résolu et laissent le système d'exploitation agir à sa place, plutôt que de coupler étroitement les comportements.
iivel
1
Vous ne savez pas pourquoi la réponse a été refusée, mais la question est de savoir ce que font les navigateurs. Actuellement, tous les navigateurs laissent la résolution au système d'exploitation (à l'exception de certains plug-ins pour Firefox et Chrome). Si vous souhaitez plus de détails sur la manière de garantir la disponibilité en cas de panne d'un fournisseur, consultez l'équilibreur de charge ou le clustering.
iivel
Les navigateurs font probablement ce que vous dites - laissez le système d’exploitation faire la recherche DNS, mais il renvoie une liste d'adresses IP au navigateur. Et la question est: que font les navigateurs les plus populaires si la première adresse est inaccessible? est-ce qu'ils essaient la seconde?
Jonas
2
L'article que vous avez cité par Pete Tenereillo est connu pour être obsolète (pour la plupart inexact de nos jours). Avec Chrome, chrome: // net-internals / # dns affiche le cache DNS actuel. Je ne crois pas que le système d'exploitation détermine toujours quelle adresse IP utiliser. Au moins avec Chrome, vous pouvez choisir d’utiliser AAAA si disponible ou uniquement A. OP parle de la manière dont les navigateurs choisissent DNS dépend du système DNS, et non de la façon dont l'ordinateur trouve son serveur DNS ....
sdaffa23fdsf