Anycast
IP Anycast ist eine Adressierungsart in Computernetzen, bei der ich über eine Adresse einen einzelnen Rechner aus einer ganzen Gruppe von Rechnern ansprechen kann. Es antwortet derjenige, der über die kürzeste Route erreichbar ist.
Welche Vorteile und Nachteile hat das?
Vorteile
- Es ist möglich, durch Hinzufügen weiterer Rechner, die auf dieser Adresse ansprechbar sind, die Last zu verteilen.
- Wenn Anycast-Dienste nahe bei den Clients platziert werden erhalte ich kürzere Zugriffszeiten und entlaste das Netz.
- Bei Ausfall eines Rechners übernehmen automatisch andere Rechner den Dienst.
- Dadurch kann ich einzelne Rechner zu Wartungszwecken einfach herausnehmen und wieder zuschalten, ohne dass das Netz wesentlich gestört wird.
- Es ist keine Änderung an den Client-Rechnern notwendig, da Anycast-Adressen nicht von Unicast-Adressen unterschieden werden können.
- Distributed Denial-of-Service-Angriffe auf Anycast-Dienste sind schwieriger, da die Anfragen auf verschiedene Rechner aufgeteilt werden.
Nachteile
- Das Aufsetzen ist nicht trivial.
- Anycast-Server benötigen zur Wartung zusätzlich eine Unicast-Adresse.
- Im Fehlerfall ist es nicht einfach, den verantwortlichen Server zu finden.
- Die Daten müssen synchron gehalten werden.
Wann nehme ich das?
Wenn ich ein größeres Netz betreibe und für Anycast geeignete Dienste redundant anbieten will. Die kürzeren Zugrifffszeiten und die Entlastung des Netzes kommen besonders bei weit verzweigten Netzen zur Geltung.
Wie funktioniert das?
Jeder Anycast-Server nimmt am verwendeten Routing-Protokoll teil und speist die Anycast-Adresse als Hostroute mit seiner Unicast-Adresse als Gateway ein. Durch das Routing-Protokoll wird sichergestellt, dass an jeder Stelle im Netz der nächstgelegene Anycast-Server verwendet wird.
Auf Linux-Servern kann ich die Anycast-Hostroute zum Beispiel mit quagga, einer Routing-Software, in das Netz einspeisen. Die Adresse selbst binde ich an die loopback Schnittstelle (lo). Dafür verwende ich vorzugsweise ein Skript, mit dem ich die Adressen einfach und automatisch beim Start des Dienstes aktivieren kann.
Welche Dienste sind geeignet?
Geeignet sind vor allem UDP-Dienste, die mit einer Anfrage/Antwort auskommen. Mit einigen Vorkehrungen ist es möglich TCP-Dienste über Anycast zu betreiben.
- DNS, zur Namensauflösung
- SNTP, zur Zeitsynchronisation der Rechneruhren
- 6to4, für den Übergang zwischen IPv4- und IPv4-Netzen
- Multicast-RP, Rendevous Points für Multicast-Sparse Mode
- Network Sinkholes, um Verkehr zu unerwünschten Netzwerken einzufangen und zu analysieren. Diese "Ausgusslöcher" leiten unerwünschten Verkehr auf sich um. Durch Platzieren von mehreren Sinkholes wird das Netzwerk entlastet. Hier wird allerdings keine einzelne Adresse, sondern ganze Netzwerkrouten oder die Defaultroute eingespeist, um den unerwünschten Verkehr einzufangen.
- HTTP, bedingt, für die Auslieferung von statischen Seiten, für die keine Zustandsinformationen benötigt werden. So lässt sich zum Beispiel ein einfaches Content Delivery Networks (CDN) einrichten.
Was kann schief gehen?
Erreichbarkeit von Anycast-Servern im gleichen Netzsegment
Wenn ein Anycast-Server im selben Netzsegment wie seine Clients angeschlossen ist, dann versuchen diese zunächst, ihn über ihr Gateway zu erreichen. Dieses verweist sie dann über ICMP-Redirect-Pakete an den Server. Wenn auf den Clients eine Paketfirewall aktiv ist, die ICMP-Redirects unterbindet (manche schlecht eingestellten MS-Windows Firwalls machen das), können die Clients den Server nicht oder nur sehr unzuverlässig erreichen. Im Zweifelsfall platziere ich den Anycast-Server so, das immer mindestens ein Router zwischen ihm und den Clients liegt.
Ausfall eines Anycast-Dienstes, aber nicht des betreffenden Serverhosts
Wenn beispielsweise der DNS- oder NTP-Dienst auf dem Server ausfällt, aber die Route noch eingespeist wird, so bekommt der Server zwar die Anfragen der Clients, kann sie aber nicht beantworten. Die Clients können ihrerseits keinen anderen Server ansprechen, da dieser Server über das Routingprotokoll ausgewählt wird. Sinnvoll ist, den Dienst direkt auf dem Server zu überwachen und die Route aktiv abzumelden, sobald der Dienst ausfällt. Dazu ist es sinnvoll, verschiedene Anycast-Adressen für verschiedene Dienste (wie DNS, NTP) zu verwenden. Diese Adressen sollten einzeln und gesamt deaktivierbar sein und auf dem Rechner selbst sollten die Dienste lokal überwacht werden, zum Beispiel mit mon.
Wechsel des Anycast-Servers während einer bestehenden TCP-Verbindung
Wenn Anycast für ein HTTP-Content-Delivery-Network (CDN) verwendet wird, kann es passieren, dass mitten in einer HTTP-Übertragung der Server gewechselt wird. Der neue Server kennt im Allgemeinen nicht den Zustand der TCP-Verbindung und beendet diese. Da ein Ausfall eines HTTP-Servers den gleichen Effekt hätte ist das an und für sich nicht weiter tragisch. Bei Anycast ist es allerdings möglich, das bei einer Routingänderung während der Übertragung (zum Beispiel durch Ausfall einer Verbindung und Umschaltung auf eine andere) auf einmal ein anderer Server verwendet wird und die Verbindung beendet, obwohl der alte Server noch aktiv ist. Das passiert bei Unicast nicht.
Weitergehende Informationen
https://de.wikipedia.org/wiki/Anycast
https://tools.ietf.org/html/rfc1546
https://tools.ietf.org/html/rfc3068
https://tools.ietf.org/html/rfc3446
http://www.netlinxinc.com/netlinx-blog/45-dns/118-introduction-to-anycast-dns.html
http://www.net.cmu.edu/pres/anycast/
http://www.nanog.org/meetings/nanog28/presentations/sink.pdf
Posted 2012-07-15