Używam wielu rekordów A dla mojej domeny - czy przeglądarki internetowe próbują kiedykolwiek więcej niż jednego?

94

Jeśli dodam wiele rekordów A dla mojej domeny, są one zwracane w kolejności okrężnej przez serwery DNS.

Przykład:

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

Ale jak reagują przeglądarki internetowe, jeśli pierwszy host ( 192.0.2.1) jest wyłączony (nieosiągalny)? Czy próbują użyć drugiego hosta ( 192.0.2.2), czy też zwracają użytkownikowi komunikat o błędzie? Czy są jakieś różnice między najpopularniejszymi przeglądarkami?

Jeśli zaimplementuję własną aplikację, mogę ją wdrożyć, aby druga była używana w przypadku, gdy pierwsza jest wyłączona, więc jest to możliwe. Byłoby to bardzo pomocne, aby stworzyć stronę odporną na uszkodzenia.

Jonas
źródło

Odpowiedzi:

87

Tak, większość przeglądarek z ostatnich 5-10 lat wypróbuje inne rekordy A, jeśli jedna nie zareaguje. Czasami nazywa się to „ponawianiem przeglądarki” lub „ponawianiem klienta”. Prawie można znaleźć na ten temat tylko w kontekście różnych exploitów przeglądarki, które ta funkcja umożliwia przeciwko stronom, które go nie używają (patrz Ponowne wiązanie DNS i przypinanie DNS , zapobieganie przypinaniu dns, przeciwdziałanie dns, przeciwdziałanie -anti-dns przypinanie itd.). Niby zła reputacja, ale dowodzi, że istnieje.

Prawie każda przeglądarka rzeczywiście otrzymuje pełną listę rekordów A i rzeczywiście sprawdza inne, jeśli ta, której używa, zawiedzie. Możesz oczekiwać, że każdy klient będzie miał 30 sekund oczekiwania, kiedy po raz pierwszy spróbuje uzyskać dostęp do witryny, gdy serwer jest wyłączony, dopóki nie połączy się z działającym adresem. Przeglądarka następnie zapisze w pamięci podręcznej, który adres działa i będzie go używać do przyszłych żądań, chyba że również się nie powiedzie, a następnie będzie musiała ponownie przeszukać listę. Tak więc 30 sekund oczekiwania na pierwsze żądanie, później grzywna.

Ale nie jest to coś, czego niekoniecznie chcesz użyć, będzie miało wiele zastrzeżeń dotyczących kompatybilności przeglądarki, kompatybilności z systemem operacyjnym, kompatybilności proxy, nagłówki kontroli pamięci podręcznej będą miały dziwny wpływ na to, czy pamięta, które adresy IP są wyłączone, czy zaczyna mieć że 30 sekund oczekiwania na każde żądanie, ludzie piszący niestandardowych klientów dla Twojej witryny będą używać gethostbyname zamiast getaddrinfo i nie będą w stanie obsłużyć przełączenia awaryjnego, wszelkiego rodzaju potencjalnych problemów.

Nie można również polegać na wielu rekordach A, aby zezwolić na serwery „master” i „slave”, ponieważ nigdy nie wiadomo, który adres przeglądarka wybierze z listy. Wszystkie muszą być tak samo zdolne do obsługi odwiedzających, jeśli są uruchomione, ponieważ każdy może uzyskać ruch, jeśli jest włączony. Przeglądarka może pomyśleć, że twój trzeci serwer z listy jest najbardziej atrakcyjny, może wygląda najbliżej i wybierze ten, mimo że wszystkie trzy są nadal aktywne.

Ale jeśli możesz żyć z ograniczeniami i mieć dość prosty system HTTP, z którym możesz przewidzieć interakcję przeglądarki, zadziała.

Och, będziesz musiał poradzić sobie również z wieloma ludźmi, którzy mówią ci, że to nie istnieje (ponieważ było to prawdą 15 lat temu). Ale możesz spróbować telnetowania do nazwy domeny z kilkoma rekordami A, niektóre z martwymi adresami IP i kilka dobrych, jeśli chcesz to udowodnić (tak, nawet dobry stary telnet używa teraz getaddrinfo i z wdziękiem obsługuje wiele rekordów A) - wydrukuje ładną listę adresów IP, które próbuje, aż w końcu się powiedzie.

Joff
źródło
12
Oto raport National Bureau of Economic Research, który popiera odpowiedź Joffa.
Marco
3
Co ciekawe, podczas gdy stackexchange.com wskazuje jeden adres IP, Google zwraca kilka: $ dig google.com @ ns1.google.com ;; SEKCJA ODPOWIEDZI: 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
Przepraszam, ale nie sądzę, że tak to działa. Przeglądarki nie mają nic wspólnego z rozwiązywaniem adresów IP - dzieje się tak w oprogramowaniu systemowym. Jeśli podasz wiele rekordów A, powinieneś założyć, że dowolny klient otrzyma losowy z listy.
Jan Steinman,
19
To jest , jak to działa we współczesnych przeglądarkach. Wszyscy wybierają użycie wywołań systemowych, takich jak getaddrinfo (), aby uzyskać wiele adresów IP i wewnętrznie obsługiwać przełączanie awaryjne, zamiast uzyskiwać pojedynczy adres IP z systemu. Inni komentatorzy i odpowiadający tutaj są częścią „wielu ludzi, którzy ci mówią, że to nie istnieje” z ostatniego akapitu Joffa - zakładam, że mają dobre intencje, ale rozpowszechniają dezinformację.
Robert Tupelo-Schneck,
1
Aby wesprzeć stwierdzenie Joffa o „przeglądarkach 5–10 lat temu”, oto test przeprowadzony przez National Bureau of Economic Research, który stwierdza, że ​​masz taki system działający do IE 8. Brzmi dla mnie uczciwie. :)
Jomar Sevillejo
5

Ostrzegam, że Windows Vista implementuje głupie części RFC3484 (tj. Backporting z IPV6 na IPV4) i woli adres IP, który dzieli większość bitów prefiksu z adresem IP użytkownika, zamiast wybierać jeden losowo. Ponieważ większość użytkowników ma adresy IP zaczynające się od 192.168, oznacza to, że którykolwiek z twoich adresów IP podzieli większość bitów prefiksu, co spowoduje większy ruch w systemie Vista. Microsoft naprawił ten konkretny idiotyzm w systemie Windows 7 i nowszych, więc nie jest to tak duży problem, jak kiedyś.

Mike Scott
źródło
Vista, to jest dobre!
the0ther
3

Jest to podstawowa technika dystrybucji równoważenia obciążenia DNS: DNS Round Robin. Nie ma to nic wspólnego z przeglądarką, zależy to od implementacji resolvera oraz lokalnej / zdalnej pamięci podręcznej adresu DNS. Zmiany polegają na tym, że jeśli serwer zawiedzie, z powodu buforowania w warstwie DNS Twoja witryna może być niedostępna.

Zobacz tutaj podstawowe wyjaśnienie dotyczące Round Robin DNS na WikiPedia.

keatch
źródło
1
Cóż, ponieważ przeglądarka jest resolverem - zależy to od implementacji przeglądarki, co wiem.
Jonas
2
Nie, istnieje biblioteka systemowa, która rozwiązuje dns przy użyciu oczywiście DNS Nameserver skonfigurowanego w systemie. Ta funkcja jest częścią standardowej biblioteki systemu operacyjnego.
keatch
Ale zarówno nslookup cnn.comw systemie Windows, jak i host cnn.comLinux zwraca listę adresów IP, więc na pewno zależy to od implementacji przeglądarki .
Jonas
5
@iivel: Nie, to nieprawda. Jeśli napiszę program Java i rozwiążę nazwę za pomocą InetAddress.getAllByName („example.com”) , otrzymam listę ze wszystkimi adresami IP, więc mogę wybrać połączenie TCP z nimi wszystkimi, jeśli chcę. I to samo, jeśli używasz getaddrinfo () w C. Tak więc zdecydowanie jest to wybór, który robią programiści, a nie system operacyjny.
Jonas,
1
@ J.Money To pytanie dotyczy dokładnie wdrożenia, a nie tego, jak możemy to zrobić.
Franklin Yu
0

System operacyjny określa, którego adresu IP użyć, a nie przeglądarki. Windows zaokrągli robin zwróconą listę (na liście zwróconej z DNS), ale będzie nadal używać tego samego adresu, dopóki DNS nie zostanie opróżniony lub upłynie limit czasu. * Implementacje IX zależą częściowo od dołączonej implementacji stosu TCP, ale zwykle również stosują metodę Round Robin.

iivel
źródło
2
Nie, to źle. Jeśli napiszę program Java i rozwiążę nazwę za pomocą InetAddress.getAllByName("example.com"), otrzymam listę ze wszystkimi adresami IP, więc mogę wybrać połączenie TCP z wszystkimi z nich, jeśli chcę. I to samo, jeśli używasz getaddrinfo()w C. Więc jest to zdecydowanie wybór, który robią programiści, a nie system operacyjny. Serwer DNS decyduje tylko w jakiej kolejności zwracana jest lista adresów IP.
Jonas,
Ok, więc możesz ręcznie robić wszystko, co chcesz ze stosem - możesz nawet rzucić własną i całkowicie zapomnieć o winsock. Jeśli jednak napiszesz aplikację i pozwolisz systemowi operacyjnemu wykonać (abstrakcyjnie) - zachowanie jest takie, jak zaznaczono. Pytanie dotyczyło w szczególności tradycyjnego zachowania aplikacji - a nie tego, co jest możliwe. Większość programistów radzi sobie z używaniem nierozwiązanej nazwy i pozwala systemowi operacyjnemu robić to, co robi, zamiast ściśle łączyć zachowania.
iivel
1
Nie jestem pewien, dlaczego odpowiedź została odrzucona, ale pytanie dotyczy tego, co robią przeglądarki. Obecnie wszystkie przeglądarki zezwalają systemowi operacyjnemu na rozwiązanie problemu (brakuje niektórych wtyczek do Firefoksa i Chrome). Jeśli chcesz dowiedzieć się, jak zapewnić dostępność w przypadku awarii dostawcy - spójrz na usługi równoważenia obciążenia lub klastrowanie.
iivel
Przeglądarki prawdopodobnie działają tak, jak mówisz - pozwól, aby system operacyjny przeprowadził wyszukiwanie DNS, ale zwróci listę z adresami IP do przeglądarki. A pytanie brzmi: co robią najpopularniejsze przeglądarki, jeśli pierwszy adres jest nieosiągalny? próbują drugi?
Jonas,
2
Artykuł cytowany przez Pete'a Tenereillo jest znany jako nieaktualny (obecnie w większości niepoprawny). W przypadku Chrome chrome: // net-internals / # dns pokazuje bieżącą pamięć podręczną DNS. Nie wierzę, że system operacyjny zawsze określa, którego adresu IP użyć. Przynajmniej w Chrome możesz użyć AAAA, jeśli jest dostępna lub tylko A. OP mówi o tym, w jaki sposób przeglądarki wybierają DNS, a nie o tym, jak komputer znajduje serwer DNS ....
sdaffa23fdsf