Chaque navigateur a sa propre méthode de gestion des DNS à tour de rôle, j'ai passé du temps aujourd'hui à rechercher ce problème et continuerai à mettre à jour ma réponse car je trouverai une preuve d'implémentation qui limitera mes réponses aux navigateurs qui exposent leur comportement.
Google Chrome
Google Chrome (v58 utilisé) demandera toutes les entrées d'hôte pour une adresse (A, AAAA, CNAME) et les placera dans un tableau ( liste_adresses ). Chrome tentera ensuite d'ouvrir un socket sur chaque adresse IP dans l'ordre du premier au dernier, chrome n'essaiera pas l'IP la plus rapide ou la plus proche, il suppose que la première IP (donnée par vos résolveurs DNS en amont) est la meilleure IP. Dans mes tests, les serveurs bind et windows dns donnent un ordre IP différent par recherche, ce qui donne ce qui semble être une répartition de la bande passante 50/50 pour chaque IP. Cette fonctionnalité est exposée danschrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
Curl a également cette fonction de basculement, mais le --connect-timeout
est beaucoup plus long que la valeur par défaut dans chrome, le chrome bascule immédiatement, Curl non. Si vous utilisez libcurl et que vous souhaitez survivre à une instance DNS circulaire où une adresse IP échoue, (fonctionne dans Chrome mais pas dans le code), assurez-vous de spécifier cette valeur plus bas.
DEFAULT_CONNECT_TIMEOUT: 0 m'a fait penser que ce n'était pas possible avec curl.
* After 149990ms connect time, move on!
Sur les deux navigateurs , l'IP n'était pas collante , ils ont suivi le TTL donné dans DNS et une fois que ttl a expiré (Chrome le maintient en interne, curl demande à chaque demande), la sélection de l'IP est effectuée à chaque fois comme décrit ci-dessus.
Qu'est-ce que ça veut dire? DNS-RR est correct pour certains systèmes, mais il n'est pas conçu pour le basculement. Vous devez vous attendre à ce que tous les résultats de la recherche DNS soient (une source de vérité) valides et disponibles pour servir le trafic. Il existe de nombreuses façons de garantir la disponibilité des adresses IP, telles que les adresses IP flottantes virtuelles, les astuces BGP / routage, etc. Utilisez-les .
Tous les tests effectués dans un environnement IPv4 uniquement, reviendront avec des résultats à double pile une fois qu'une infrastructure suffisante sera disponible pour les tests.
Je suppose que ces changements sont un effet secondaire des globes oculaires Happy IPv6-Fallback RFC
Mise à jour
Une considération utile, RR DNS ne peut aider à l'équilibrage de charge, pas aux échecs d'application, si l'un de vos nœuds a un 503, vous servirez 40-60% si votre trafic 503. L'hypothèse est faite que toutes les adresses IP répertoriées sont des points de terminaison de travail valides si elles sont accessibles