Ich habe eine seltsame Idee: Lassen Sie mehrere Personen / Organisationen dieselbe Anwendung hosten und lassen Sie alle ihre Knoten über einen einzigen Domainnamen erreichbar sein. Das ist, um zum Beispiel ein wirklich verteiltes soziales Netzwerk zu haben, in dem die Benutzerfreundlichkeit nicht beeinträchtigt wird (dh Benutzer müssen sich keine unterschiedlichen Anbieter-URLs merken und dann, wenn ein Anbieter ausfällt, zu einem anderen wechseln).
Um dies zu erreichen, dachte ich, dass ein DNS-Eintrag mit mehreren IPs verwendet werden kann.
Wie viele IPs kann ein einzelner DNS-A-Eintrag enthalten? Diese Antwort besagt, dass es ungefähr 30 ist, aber der Verwendungszweck dort ist unterschiedlich. Für das obige Szenario ist es mir egal, ob ein gegebener ISP nur 30 cacht, solange ein anderer ISP weitere 30 cacht, und so weiter.
quelle
Antworten:
Haftungsausschluss: Keine Beleidigung, aber das ist eine wirklich schlechte Idee. Ich rate niemandem, dies im wirklichen Leben zu tun.
Aber wenn Sie einem gelangweilten IT-Mitarbeiter ein Labor geben, passieren lustige Dinge!
Für dieses Experiment habe ich einen Microsoft DNS-Server verwendet, der auf Server 2012 R2 ausgeführt wird. Aufgrund der Schwierigkeiten beim Hosten einer DNS-Zone in Active Directory habe ich eine neue primäre Zone mit dem Namen testing.com erstellt, die nicht in AD integriert ist.
Verwenden dieses Skripts:
Ich fuhr fort, ohne Fehler 65025 Hosteinträge für den Namen
testing.testing.com.
mit buchstäblich jeder IPv4-Adresse von 1.1.1.1 bis 1.1.255.255 zu erstellen.Dann wollte ich sicherstellen, dass ich 65536 (2 ^ 16 Bit) A-Datensätze fehlerfrei durchbrechen konnte, und ich konnte, also nehme ich an, dass ich wahrscheinlich bis 16581375 (1.1.1.1 bis 1.255) hätte durchstarten können .255.255,) aber ich wollte nicht hier sitzen und dieses Skript die ganze Nacht laufen sehen.
Ich kann also mit Sicherheit sagen, dass die Anzahl der A-Einträge, die Sie einer Zone mit demselben Namen und unterschiedlichen IP-Adressen auf Ihrem Server hinzufügen können, praktisch unbegrenzt ist.
Aber wird es tatsächlich aus Sicht des Kunden funktionieren ?
Folgendes erhalte ich von meinem Kunden aus Sicht von Wireshark:
(Öffnen Sie das Bild in einem neuen Browser-Tab, um es in voller Größe anzuzeigen.)
Wie Sie sehen, werden bei Verwendung von nslookup oder Ping von meinem Client automatisch zwei Abfragen ausgegeben - eine UDP- und eine TCP-Abfrage. Wie Sie bereits wissen, kann ich maximal 512 Byte in ein UDP-Datagramm schreiben. Wenn diese Grenze überschritten ist (z. B. 20-30 IP-Adressen), muss stattdessen TCP verwendet werden. Aber selbst mit TCP erhalte ich nur eine sehr kleine Teilmenge von A-Datensätzen für testing.testing.com. Pro TCP-Abfrage wurden 1000 Datensätze zurückgegeben. Die Liste der A-Datensätze wird bei jeder nachfolgenden Abfrage ordnungsgemäß um 1 gedreht, genau so, wie Sie es von Round-Robin-DNS erwarten würden. Es würde Millionen von Abfragen erfordern, um alle diese Fragen zu beantworten.
Ich verstehe nicht, wie dies Ihnen dabei helfen wird, Ihr Social Media-Netzwerk massiv skalierbar und belastbar zu machen, aber es gibt trotzdem Ihre Antwort.
Bearbeiten: In Ihrem Folgekommentar fragen Sie, warum ich denke, dass dies im Allgemeinen eine schlechte Idee ist.
Angenommen, ich bin ein durchschnittlicher Internetnutzer und möchte eine Verbindung zu Ihrem Dienst herstellen. Ich tippe www.bozho.biz in meinen Webbrowser. Der DNS-Client auf meinem Computer erhält 1000 Einträge zurück. Nun, Pech, die ersten 30 Datensätze in der Liste reagieren nicht, weil die Liste der A-Datensätze nicht auf dem neuesten Stand gehalten wird, oder weil es einen großen Ausfall gibt, der einen Teil des Internets betrifft. Angenommen, mein Webbrowser hat eine Zeitüberschreitung von 5 Sekunden pro IP, bevor er weitergeht und den nächsten versucht. Jetzt sitze ich hier und starre zweieinhalb Minuten lang auf eine sich drehende Sanduhr und warte darauf, dass Ihre Site geladen wird. Dafür hat niemand Zeit. Ich gehe nur davon aus, dass mein Webbrowser oder eine andere Anwendung, mit der ich auf Ihren Dienst zugreife, mehr als die ersten 4 oder 5 IP-Adressen versuchen wird. Das wird es wahrscheinlich nicht.
Wenn Sie die automatische Bereinigung verwendet haben und nicht validierte oder anonyme Aktualisierungen der DNS-Zone zulassen, um die Liste der A-Datensätze auf dem neuesten Stand zu halten, stellen Sie sich vor, wie unsicher das wäre! Selbst wenn Sie ein System entwickelt haben, in dem die Clients ein Client-TLS-Zertifikat benötigen, das sie zuvor von Ihnen erhalten haben, um die Zone zu aktualisieren, wird ein kompromittierter Client auf der ganzen Welt ein Botnetz starten und Ihren Dienst zerstören. Traditionelles DNS ist so unsicher wie es ist, ohne Crowd-Sourcing.
Enorme Bandbreitennutzung und Verschwendung. Wenn für jede DNS-Abfrage mindestens 32 Kilobyte Bandbreite erforderlich sind, ist die Skalierung überhaupt nicht gut.
DNS Round-Robin ist kein Ersatz für einen ordnungsgemäßen Lastenausgleich. Es bietet keine Möglichkeit, sich von einem Knoten zu erholen, der gerade ausfällt oder nicht mehr verfügbar ist. Wirst du deine Benutzer anweisen, eine ipconfig / flushdns auszuführen, wenn der Knoten, mit dem sie verbunden waren, ausfällt? Solche Probleme wurden bereits von Dingen wie GSLB und Anycast gelöst.
Etc.
quelle
MAX_SHUFFLE
BIND-Quellcode definiert (standardmäßig 32).Um die Frage zu beantworten, wie sie gestellt wurde ("Wie viele IPs kann ein einzelner DNS-A-Eintrag enthalten?"), Ist die Antwort sehr einfach: Ein einzelner
A
Eintrag enthält genau eine Adresse. Es können jedoch mehrereA
Datensätze für denselben Namen vorhanden sein.quelle
Jede IPv4-Adresse belegt 16 Byte in der Antwort. Jede IPv6-Adresse belegt in der Antwort 28 Byte.
Es wird dringend empfohlen, dass Sie sicherstellen, dass die Antwort in 512 Byte passt. Dies würde ungefähr 25 IPv4-Adressen und 14 IPv6-Adressen ermöglichen (vorausgesetzt, dass Sie im Paket auch einige andere Informationen benötigen). Das genaue Limit hängt von der Länge Ihres Domainnamens ab.
Wenn Sie sowohl 25 IPv4-Adressen als auch 14 IPv6-Adressen haben, zählen Sie darauf, dass die Clients IPv4- und IPv6-Adressen in separaten Abfragen anfordern. Sollte der Client in einer einzigen Abfrage nach beiden Adresstypen fragen (was selten vorkommt), müssten Sie nach unten gehen.
Sollte die Antwortgröße 512 Byte überschreiten, funktioniert dies möglicherweise immer noch über UDP, wenn Client und Server EDNS unterstützen. Ohne EDNS würde der Client eine abgeschnittene Antwort erhalten und müsste es über TCP erneut versuchen. Dies erhöht die Kommunikation von 1 auf 4 Roundtrips. Aber noch schlimmer, manchmal gibt es Fehlkonfigurationen, die verhindern, dass DNS über TCP funktioniert.
Selbst wenn Sie mehr als 14 Adressen in die Antwort drücken könnten, ohne Probleme auf der DNS-Ebene zu verursachen, ist dies wahrscheinlich nicht sehr nützlich. Das vom Client verwendete Zeitlimit, bevor eine Adresse aufgegeben und zur nächsten weitergegangen wird, ist häufig erheblich.
Das einmalige Warten auf dieses Timeout kann zu einer schlechten Benutzererfahrung führen. Wenn der Client 14 Adressen durchgehen müsste, bevor er eine Antwort erhalten würde, müsste der Benutzer auf 13 Zeitüberschreitungen warten.
quelle
Was Sie beschreiben, ist keine besonders neue Idee. Wie bereits in anderen Antworten erläutert, ist die Anzahl der A-Datensätze, die in einer Antwort enthalten sein können, begrenzt. Dies sagt jedoch nichts darüber aus, wie viele A-Datensätze möglicherweise insgesamt vorhanden sind.
Sie können beispielsweise einen DNS-Server implementieren, der alle Anfragen nach einem A-Eintrag mit einer zufälligen IP beantwortet. Dies würde zu 4294967296 eindeutigen A-Einträgen führen: einem für jede IPv4-Adresse.
Wie gesagt, das ist keine neue Idee. Tatsächlich ist es zum Teil so, wie Akamai funktioniert (und wahrscheinlich viele andere CDNs). Der A-Datensatz, den Sie für jede Akamai-Domain erhalten, wird durch deren Black-Magic-DNS-Server bestimmt. Ich wette, die Antwort hängt vom dynamischen Lastenausgleich und geografischen Gesichtspunkten ab.
Zum Beispiel habe ich a338.g.akamaitech.net ausgewählt. Wenn ich mir das gerade auf meinem Computer ansehe, der einen DHCP-zugewiesenen Nameserver von Comcast verwendet:
Was ist, wenn ich nach dem DNS von Google frage?
Ich wette, wenn Sie es versuchen, werden Sie eine andere Antwort bekommen. Wie viele Edgeserver hat Akamai für eine bestimmte Ressource? Ich wette, mehr als zwei.
quelle
Andere haben es als Detail erwähnt, aber aus praktischer Sicht ist die harte Grenze die UDP-Paketgrößengrenze von 512 Bytes. Während es möglich ist, zu TCP zu wechseln, wenn eine Kürzung erkannt wird, werden dies in der Praxis viele / die meisten Clients nicht tun (und dies sollten sie wohl auch nicht tun). Dies würde für die meisten Anwendungen zu einer schlechten Benutzererfahrung führen, und ich würde nur mit Zonentransfers oder anderem rechnen spezielle Suchvorgänge zur Unterstützung von TCP). Bei IPv4 (A-Datensätzen) liegt die Grenze bei etwa 30 Adressen, bei IPv6 (AAAA) bei etwas weniger Adressen, da diese größer sind. Die Länge des Domainnamens trägt dazu bei und schränkt die Anzahl weiter ein.
quelle
Die kurze Antwort: In ein UDP-Paket passen ca. 25 A-Einträge. Darüber hinaus wechselt DNS zu TCP und es wird nicht so schnell sein. Sie haben auch Probleme mit Clients, die keine DNS-Resolver verwenden, die in der Lage sind, die "nächstgelegene" IP-Adresse zu ermitteln. Mit WLAN und Mobilfunk ist der "nächste" oft nicht der richtige Server.
Längere Antwort:
Mach das nicht. Besser wäre es, für jeden Benutzer einzelne CNAME-Einträge einzurichten, die auf den entsprechenden Server verweisen. Angenommen, Sie haben zwei Server
server-f
undserver-r
werden für IMAP verwendet. Konfigurieren Sie den IMAP-Client jeder Person mit dem Servernamen USERNAME.imap.example.com, wobei "USERNAME" durch ihren E-Mail-Benutzernamen ersetzt wird. Jetzt können Sie Personen zwischen Servern verschieben, ohne ihren E-Mail-Client neu konfigurieren zu müssen.server-f.example.com. IN A 10.10.10.10 server-r.example.com. IN A 10.20.20.20 wilma.imap.example.com. IN CNAME server-f.example.com. fred.imap.example.com. IN CNAME server-f.example.com. betty.imap.example.com. IN CNAME server-r.example.com. barney.imap.example.com. IN CNAME server-r.example.com.
Wenn Sie dies jedoch tun, EMPFEHLE ICH HOCH, dass Sie die DNS-Einträge automatisch aus einer Datenbank von Benutzern generieren. Sie möchten sicherstellen, dass beim Erstellen und Löschen von Konten auch die DNS-Einträge erstellt und gelöscht werden. Andernfalls kommt es zu Unordnung und viel Verwirrung.
Ich habe dies in Unternehmen mit buchstäblich Tausenden von Benutzern gesehen, und da die Dinge automatisiert waren, lief es sehr gut.
quelle
Wie andere betont haben, ist es eine schreckliche Idee für den realen Gebrauch.
In der realen Welt gibt es fehlerhafte Clients und Resolver, die Probleme mit Antworten haben, die nicht in ein einzelnes UDP-Datagramm passen, und es gibt Firewalls, die bestimmte, aber nicht protokollkonforme Ideen zu DNS-Nachrichtengrößenbeschränkungen durchsetzen.
Und selbst wenn Sie sich darauf verlassen können, dass Ihre große Resonanz in jedem Fall erfolgreich ist (was Sie nachdrücklich nicht können), gibt es einen weiteren Grund, warum dies eine sehr schlechte Idee ist. Je größer Ihre DNS-Antwort ist, desto verlockender ist sie als Nutzlast für Reflexionsangriffe, da Sie einen enormen Verstärkungsfaktor bereitstellen. Bei dieser Art von Denial-of-Service-Angriff, die in DNS üblich ist, wird eine UDP-Abfrage an einen offenen rekursiven Resolver gesendet. Die Quelladresse von UDP-Abfragen kann normalerweise leicht gefälscht werden, und der Angreifer setzt die Abfragequelle auf die IP des beabsichtigten Ziels. Es werden zwei wünschenswerte (für den Angreifer) Effekte erzielt: Erstens: Ein relativ geringer Sendeaufwand (aufgrund einer kleinen gefälschten Abfrage) führt dazu, dass ein vergleichsweise großer Strom unerwünschten Verkehrs am Ziel ankommt (dies ist der Verstärkungsfaktor). und zweitens - die eigentliche Angriffsquelle ist vor dem Ziel verborgen; Das Ziel kennt nur die Adressen der rekursiven Resolver, die als Reflektoren verwendet werden.
quelle
Interessanter Punkt der historischen Wissenswertes zu diesem Thema. In den 90er Jahren erweiterte AOL seine DNS-Einträge so, dass eine MX-Abfrage> 512 Byte zurückgab. Das hat gegen RFC verstoßen, viele SMTP-Server beschädigt (qmail war zu dieser Zeit sehr beliebt) und Sysadmins viel Kopfzerbrechen bereitet. Das Update erforderte entweder das Patchen oder das Hinzufügen statischer Routen.
Ich weiß nicht, wie es derzeit aussieht, aber vor ein paar Jahren, als ich qmail das letzte Mal berührt habe, waren die Patches noch vorhanden.
http://www.gossamer-threads.com/lists/qmail/users/30503
quelle