“Wenn etwas nicht einfach zu verstehen ist,
muss es eben anders erklärt werden ...”

Route 53 - DNS-Management in der Cloud

Manchmal dauert es etwas länger, bis man Notiz von wirklich nützlichen Diensten nimmt. So ging es mir zum Beispiel mit dem Service "Route 53" der Amazon Web Services (AWS).

Seit Jahren verwende ich für das Hosting eigener DNS-Zonen zuerst physische, dann später virtuelle Server, auf denen Bind seinen Dienst verrichtet. Diese Server sind aus Gründen der Verfügbarkeit, und weil z.B. die DENIC das so fordert, in Master-/Slave-Konfigurationen mehrfach redundant ausgelegt. Das erfordert Wartungsaufwand, Fleißarbeit und manchmal auch ein paar Nerven - vor allem dann, wenn ein neuer Server eingeführt oder ein vorhandener migriert werden muss. Dann steht man dann gedanklich ab und zu doch schon mal vor dem gefürchteten Henne-Ei-Problem.

Bei "Route 53" handelt es sich um einen DNS-Service, der komplett in der Cloud von Amazon läuft. Er erlaubt das Verwalten und Ausliefern eigener DNS-Zonen mit den gängigsten Resource-Records. Die DNS-Server in der Cloud sind dabei hoch verfügbar und haben lt. Amazon eine sehr geringe Antwort-Latenz. Trotzdem sind die dafür aufgerufenen Preise aus meiner Sicht angenehm und angemessen niedrig.

Grund genug, sich diesen Service einmal anzuschauen und zu testen.


Erster Kontakt


Einrichten eines neuen AWS-Accounts


Wenn man noch nichts mit den Amazon Web Services zu tun hatte, legt man sich zunächst ein Konto für das AWS-Portal an. Wer bereits ein normales Amazon-Shopping-Konto hat, kann sich mit dessen Zugangsdaten bei http://aws.amazon.com/de/ anmelden und so sein AWS-Konto aktivieren. Bei der Ersteinrichtung müssen dann noch Kreditkarteninformationen hinterlegt und die eigene Telefonnummer über einen automatisierten Anruf verifiziert werden. Wer umsatzsteuerbefreit ist, hinterlegt für Rechnungen seine Umsatzsteuer-ID.

Einrichten eingeschränkter Benutzerrechte


Das Benutzerkonto, mit dem man seinen AWS-Zugang eingerichtet hat, ist ab sofort das globale Administrations-Konto für alle Services, die man zukünftig unter diesem Zugang betreibt (EC2-Instanzen, S3-Storage, EBS, etc). Es empfiehlt sich deshalb unbedingt, über das AWS-IAM Portal (Amazon Web Service-Identity and Access Management) neue Benutzer einzurichten und diese mit dedizierten Berechtigungen zu versehen. 

Hier lassen sich dann auch sogenannte "Multi-Factor Authentication Devices" konfigurieren. Damit ist eine abgesicherte 2-Faktor-Authentifizierung, etwa über den Google-Authenticator möglich. Der globale Administrations-Account bleibt ab jetzt am besten in der Schublade.

Pflegen eigener DNS-Zonen


Für die Verwaltung der eigenen DNS-Zonen unter "Route 53" steht ein mehr oder weniger komfortables Web-Frontend zur Verfügung:

Route 53 Management-Portal

Hier werden zunächst alle konfigurierten Zonen aufgeführt. Eine neue Zone wird über den Punkt "Create Hosted Zone" erzeugt. 

Jede Zone wird automatisch mit den wichtigsten Resource-Records versehen: Dem SOA-Record und den NS-Records für die authoritativen Nameserver.


Wichtig sind vor allem die NS-Records - das sogenannte "Delegation-Set" - über die diese Zone später beim Domain-Registrar delegiert wird. Diese DNS-Server unterscheiden sich von Zone zu Zone.

Resource Records


Über den Button "Create Record Set" werden der DNS-Zone neue Resource-Records hinzugefügt, die sofort aktiv werden.

Folgende Resource-Records werden zur Zeit von "Route 53" unterstützt:


  • A - IPv4 Adressen
  • AAAA - IPv6 Adressen
  • CNAME - Canonical Names (Aliase)
  • MX - Mail-Server
  • TXT - Text Records
  • PTR - Reverse Lookup Pointer
  • SRV - Service Locator
  • SPF - Sender Policy Framework
  • NS - Nameserver
Die einzelnen Dialogfelder sind größtenteils selbsterklärend:


Bemerkenswert sind hier aus meiner Sicht vor allem 2 Punkte: Aliase und die Routing Policy.

Aliase


Aliase verhalten sich in der letzten Konsequenz wie ein CNAME-Eintrag - ein Name löst z.B. auf die selbe Adresse auf wie ein anderer Name. Im Unterschied zu den CNAMEs müssen Aliase jedoch nicht rekursiv vom Client aufgelöst werden - der DNS-Server gibt als Antwort einfach den Inhalt des referenzierten Resource-Records zurück. Das sollte die Latenz gegenüber der Auflösung von CNAMEs veringern. Außerdem vereinfacht das die Verwaltung von Resource-Records, für die CNAMEs nicht supported sind.

Routing Policy


Für jeden Resource-Record lassen sich 4 verschiedene Routing-Policies vorgeben - Simple, Round Robin, Weighted und Failover.
    Round Robin und Weighted stehen für Lastverteilung auf DNS-Ebene, wobei bei der 2. Variante über eine Wichtung der einzelnen Resource-Records festgelegt werden kann, welcher Server welchen Anteil der Client-Verbindungen erhalten soll.

    Ein Anwendungsfall ist hier das klassische Loadbalancing, um z.B. hohe Zugriffszahlen auf verschiedene Server zu verteilen. Ein anderes Anwendungsszenario sind DNS gestützte A/B-Tests.

    Die dritte Variante "Failover" wird im Zusammenspiel mit Health-Checks verwendet. Ist erkennbar, dass ein entsprechendes Serversystem nicht mehr wie  gewollt funktioniert, werden neue DNS-Abfragen nur noch auf die als "healthy" erkannten Server aufgelöst. Sollten keine funktionierenden Produktiv-Server mehr verfügbar sein, kann als Backup ein Serversystem angegeben werden, das dann z.B. mit einer "Tut uns leid ..." Fehlermeldung den Benutzer aufklärt.

    Veröffentlichen der Konfiguration


    Wenn alle notwendigen Resource-Records zur Zone hinzugefügt sind, kann die Zone aktiviert werden. Dazu sind für die DNS-Domäne die zuständigen DNS-Server anzupassen. Die korrekten Einträge finden sich im automatisch generierten NS-Record der Zone. 

    Im oben dargestellten Beispiel sind also folgendes die korrekten DNS-Server:


    • ns-2021.awsdns-60.co.uk
    • ns-1141.awsdns-14.org
    • ns-673.awsdns-20.net
    • ns-281.awsdns-35.com
    Achtung: für jede Zone wird ein eigener Satz von DNS-Servern verwendet!

    Das Anpassen der DNS-Konfiguration erfolgt in der Regel über den Registrar für diese Domäne.

    DNS-Konfiguration per Kommandozeile


    Amazon stellt - wie für andere AWS-Dienste auch - eine API für "Route 53" zur Verfügung. In der AWS-Dokumentation findet sich eine Liste mit Tools und Bibliotheken, die diese API verwenden.

    cli53


    Ein recht einfach zu handhabendes Werkzeug ist cli53. Dieses python-basierte Werkzeug lässt sich auf einem  Ubuntu-System beispielsweise wie folgt installieren:


            sudo apt-get install python-pip
            sudo pip install cli53

    Mit cli53 lassen sich DNS-Zonen und Resource-Records von der Kommandozeile aus verwalten:

    Beipiel: Hinzufügen einer neuen Zone

            cli53 create domainenname.de

    Beispiel: Hinzufügen von Adressen für die Domäne

            cli53 rrcreate domainname.de "www" A 192.168.5.5
            cli53 rrcreate domainname.de "*" A 192.168.5.5

    Beispiel: Hinzufügen von mehreren MX-Records

            cli53 rrcreate domainname.de "" MX "10 smtp1.domainname.de" \
                    "20 smtp2.domainname.de"


    Wie erwartet liefern die Optionen "-h" bzw. "--help" die notwendigen Hilfe-Ausgaben. Eine Liste aller Unterkommandos von cli53 liefert "cli53 -h", die Hilfe zu den Parametern für das Erzeugen eines Resource-Records entsprechend "cli53 rrcreate -h".


    API Authentifizierung


    Für die Authentifizierung der Kommandozeilentools an der API richtet man am besten über das
    "AWS Identity and Access Management" separate und eingeschränkte Benutzerkonten ein. Diese bestehen aus einer Accesss-Key-ID und einem Access-Key-Secret, dass dem genutzten Werkzeug mitgegeben werden muss.

    Bei cli53 werden die Credentials z.B. unter ~/.boto abgelegt:

    ~/.boto 

            [Credentials]
            aws_access_key_id = XXXXXXXXXXXXXXXXXXXXx
            aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Preise


    Die aktuellen Preise für Route 53 veröffentliche Amazon unter http://aws.amazon.com/de/route53/pricing/. Zum aktuellen Zeitpunkt (Juni 2013) sehen die Preise für DNS-Zonen wie folgt aus:

    • für die ersten 25 Zonen: 0,50 USD pro Hosting-Zone/Monat
    • für weitere Hosting-Zonen: 0,10 USD pro Hosting-Zone/Monat

    Zusätzlich zu der Zonenpauschale werden die Abfragen an die DNS-Zonen berechnet:

    • für die erste Mrd. Abfragen: 0,750 USD pro 1 Million Abfragen
    • für weitere Abfragen 0,375 USD pro 1 Million Abfragen