Serwery DNS już używają anycast. Czy dodanie większej liczby adresów IP zwiększy skalowalność?

9

RFC 1034 wymaga od nas przypisania co najmniej dwóch adresów IP dla serwerów DNS. Jednak nadmiarowość można już osiągnąć za pomocą jednego adresu IP, jeśli użyjemy adresowania anycast. Anycast BGP wydaje się dobrze skalować na setki, a nawet tysiące serwerów.

Jeśli tak, dlaczego nadal potrzebujemy wielu adresów IP dla serwerów DNS? Czy faktycznie zwiększa redundancję (przyczynia się do dostępności), jeśli mamy już anycast, czy to tylko mit?

Z jakimi problemami i błędami możemy się spotkać, jeśli użyjemy tylko jednego adresu IP?

Rozumiem przez to całkowite pominięcie drugorzędnych adresów DNS lub użycie fałszywego adresu IP (np. 1.2.3.4) Dla drugiego adresu, gdy niektóre konfiguracje wymagają co najmniej dwóch.

Pacerier
źródło

Odpowiedzi:

16

Pojedynczy anastastowy adres IP nie zapewnia takiej samej redundancji, jak dwa adresy IP emisji pojedynczej w różnych prefiksach IP.

Często najtrudniejszym problemem związanym z redundancją nie jest sytuacja, gdy coś zawiedzie całkowicie, ale raczej, gdy źle się zachowuje, wystarczy przejść testy stanu, ale w rzeczywistości nie działa.

Widziałem konfigurację anycast DNS, w której serwer DNS przestał działać, ale pakiety nadal byłyby kierowane do tego serwera DNS. Cokolwiek zajmowało się reklamą, prefiks może po prostu nie wiedzieć, że serwer DNS przestał działać.

Staje się to jeszcze trudniejsze, jeśli dany serwer DNS nie jest autorytatywnym serwerem DNS, ale raczej rekurencyjnym resolverem.

Taki rekurencyjny przelicznik musiałby mieć zarówno adres anycast do otrzymywania zapytań od klientów, jak i adresy emisji pojedynczej do wysyłania zapytań do autorytatywnych serwerów DNS. Ale jeśli adresy emisji pojedynczej spadną, może z łatwością wyglądać na tyle zdrowo, że nadal będą wysyłane zapytania.

Anycast to doskonałe narzędzie do skalowania i zmniejszania opóźnień. Ale w przypadku redundancji nie powinno to być samodzielne.

Wiele redundantnych pul anycast jest jednak dobrym rozwiązaniem dla dostępności. Dobrze znanym przykładem jest 8.8.8.8 i 8.8.4.4. Oba są adresami anycast, ale nigdy nie powinny być kierowane do tego samego fizycznego serwera DNS (zakładając, że Google wykonał swoją pracę dobrze).

Jeśli masz 10 fizycznych serwerów DNS, możesz skonfigurować je jako 2 pule z 5 serwerami w każdej puli lub 5 pule z 2 w każdej puli. Chcesz uniknąć posiadania jednego fizycznego serwera DNS w wielu pulach jednocześnie.

Ile adresów IP należy przydzielić? Musisz mieć adresy IP, które można skonfigurować jako anycast niezależnie od siebie. Zazwyczaj oznacza to, że musisz przydzielić całą / 24 przestrzeń adresową IPv4 lub / 48 przestrzeni adresowej IPv6 dla każdej puli. Może to bardzo ograniczyć liczbę pul, które możesz mieć.

Dodatkowo, jeśli mówimy o autorytatywnych serwerach, odpowiedź DNS ze wszystkimi twoimi rekordami NS oraz klejem A i AAAA powinna mieścić się w jednym pakiecie 512 bajtów. W przypadku serwerów głównych działało to pod 13 adresami. Ale to nie obejmowało kleju i IPv6, więc liczba, którą osiągniesz, byłaby niższa.

Każda pula powinna być rozmieszczona geograficznie, jak to możliwe. Jeśli masz 5 serwerów w Europie i 5 w Północnej Ameryce i 2 anycastowe adresy IP, nie tworzysz jednej puli obejmującej każdy kontynent. Umieszczasz 2 z Europy w puli z 3 z Ameryki Północnej, a pozostałe 5 w drugiej puli.

Jeśli masz więcej niż 2 pule anycast, możesz pozwolić serwerowi fizycznemu tymczasowo znajdować się w więcej niż jednej puli. Ale nigdy nie należy dopuszczać, aby serwer fizyczny znajdował się jednocześnie we wszystkich pulach.

Połączenie anycastu i emisji pojedynczej jest możliwe, ale należy zachować ostrożność. Jeśli masz adresy IP dla dwóch pul, nie połączyłbym się. Ale jeśli masz tylko jeden adres IP anycast do pracy, sensowne może być również dołączenie adresów IP emisji pojedynczej. Problem polega na tym, że włączenie adresów IP emisji pojedynczej nie zapewni tak dobrego opóźnienia i równoważenia obciążenia.

Jeśli fizyczny serwer jest udostępniany zarówno przez emisję pojedynczą, jak i anastastową, możesz ryzykować, że użytkownicy dotrą do tego samego serwera co serwer podstawowy i pomocniczy i utracą dostęp, jeśli ulegnie awarii. Można tego uniknąć, używając tylko adresów emisji pojedynczej serwerów spoza puli anycastów lub zawsze zapewniając użytkownikom dwa adresy emisji pojedynczej.

Im więcej adresów emisji pojedynczej wstawisz do miksu, tym mniej zapytań zostanie wysłanych na adres anycast, a tym mniej korzyści uzyskasz z anycast pod względem opóźnienia i skalowalności.

kasperd
źródło
Czy masz na myśli, że najlepszym sposobem na osiągnięcie skalowalności jest zastosowanie wielu dodatkowych adresów emisji pojedynczej (czyli starego sposobu ustawiania ns1.domain, ns2.d, ns3.d ... ns300.d) zamiast korzystania z anycast?
Pacerier
@Pacerier Nie, nie o to mi chodzi. Wyjaśnię to w mojej odpowiedzi.
kasperd
+1. Błąd routingu może nawet doprowadzić twoją emisję do piekła (ślepy zaułek). Posiadanie drugiego osobnego adresu oznacza, że ​​masz na to więcej niż jeden „bilet”;)
TomTom
2
+1 Chciałbym dodać, że dodanie fałszywego adresu IP jako drugiego adresu brzmi jak przerażający pomysł
Reaces
1
@Pacerier uzyskujesz równoważenie obciążenia przy użyciu wielu adresów emisji pojedynczej. Problemem jest opóźnienie, klienci po prostu nie wiedzą, które adresy IP są w pobliżu, a które są daleko. Nie można także skalować tak daleko. Możesz użyć tylko około 5 serwerów, jeśli chcesz, aby rekordy kleju A i AAAA zmieściły się w 512 bajtach. Łączenie jednej anycastu i wielu emisji pojedynczej jest problematyczne dla równoważenia obciążenia, ponieważ prawdopodobnie zwiększy się obciążenie na adresy emisji pojedynczej niż na adres anycast.
kasperd
4

Najlepszą praktyką jest używanie co najmniej dwóch adresów z różnych prefiksów i nadawanie im nazw pod dwoma różnymi TLD. Oba te adresy mogą być dowolne, jeśli chcesz. Posiadanie tylko jednego adresu IP da ci pojedynczy punkt awarii. Jeśli routing do tego adresu nie działa (błąd konfiguracji, instancja anycast nie działa poprawnie, prefiks jest przechwytywany itp.), Wówczas cała domena staje się nieosiągalna.

Każdy adres anycast wymaga co najmniej prefiksu /24IPv4 lub /48IPv6, aby można było routować w BGP. Mniejsze (dłuższe) prefiksy zwykle nie będą akceptowane w globalnej tabeli routingu w wielu miejscach.

Nigdy nie podawaj fałszywego adresu IP jako serwera DNS. Spowoduje to poważne opóźnienia dla resolverów.

Sander Steffann
źródło
Co gorsza, ten „fałszywy” adres IP to adres innej osoby. Otrzymywaliby zapytania. Jeśli denerwują go cały ten ruch, mogą wysyłać odpowiedzi o wysokim TTL, aby na jakiś czas zniknąć.
kasperd
@kasperd, co ze specjalnymi zastrzeżonymi adresami IP, które nie należą do nikogo?
Pacerier
1
@Pacerier Korzystanie z przestrzeni adresowej RFC 1918, 4193 lub 6598 ograniczy szkody. Ale nadal spowodowałoby to spowolnienie rozdzielczości lub nawet niepowodzenie.
kasperd
3

RFC 1034 stwierdza tylko, że potrzebujesz dwóch serwerów DNS. To nie jest obowiązkowy wymóg, ale zalecenie, więc rób to, co chcesz. Niezależnie od tego, jeśli chcesz mieć HA, twoim 2 serwerom DNS można przypisać ten sam adres IP za pomocą anycast, a jedyną rzeczą, którą użytkownicy końcowi zauważą, gdy jeden serwer DNS ulegnie awarii, jest chwilowy brak łączności, gdy sieć ponownie się łączy.

Podsumowując, tak, użycie anycast jest wystarczające, aby zachować zgodność z RFC 1034.

Reaces
źródło
Hmm, jeśli wystarczy jeden adres IP, dlaczego Google oferuje dwa adresy ( 8.8.8.8i 8.8.4.4) dla swoich serwerów DNS? Mają już anycast, więc dlaczego po prostu nie zaoferować jednego adresu 8.8.8.8?
Pacerier
1
Zgaduję, że nie przerywam łączności podczas konwergencji sieci? Ponieważ są graczem globalnym i chcą mieć jak najszerszy zasięg, aby wyeliminować ewentualny punkt awarii? Nie jestem do końca pewien, ale wiem, że nie wszyscy możemy być google :)
Reaces