Bereitstellen und Verwalten Ihres DNS mithilfe von DNSControl unter Ubuntu 18.04

Der Autor hat die Electronic Frontier Foundation Inc ausgewählt, um eine Spende im Rahmen der Write zu erhalten für DOnations program.

Einführung

DNSControl ist ein infrastructure-as-code -Tool, mit dem Sie Ihre DNS-Zonen mithilfe von Standard bereitstellen und verwalten können Prinzipien der Softwareentwicklung, einschließlich Versionskontrolle, Testen und automatisierter Bereitstellung. DNSControl wurde von Stack Exchange erstellt und ist in Go geschrieben.

Durch die Verwendung von DNSControl werden viele Probleme der manuellen DNS-Verwaltung beseitigt, da Zonendateien in einem programmierbaren Format gespeichert werden. Auf diese Weise können Sie Zonen für mehrere DNS-Anbieter gleichzeitig bereitstellen, Syntaxfehler identifizieren und Ihre DNS-Konfiguration automatisch verschieben, um das Risiko von menschlichen Fehlern zu verringern. Eine weitere häufige Verwendung von DNSControl ist die schnelle Migration Ihres DNS zu einem anderen Anbieter. Zum Beispiel im Falle eines DDoS-Angriffs oder eines Systemausfalls.

In diesem Lernprogramm installieren und konfigurieren Sie DNSControl, erstellen eine grundlegende DNS-Konfiguration und stellen DNS-Einträge für einen Live-Anbieter bereit. Im Rahmen dieses Tutorials verwenden wir DigitalOcean als Beispiel für einen DNS-Anbieter. Wenn Sie einen different provider verwenden möchten, ist das Setup sehr ähnlich. Wenn Sie fertig sind, können Sie Ihre DNS-Konfiguration in einer sicheren Offline-Umgebung verwalten und testen und sie dann automatisch für die Produktion bereitstellen.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

  • Ein Ubuntu 18.04-Server wird eingerichtet, indem Sie Initial Server Setup with Ubuntu 18.04 ausführen, einschließlich eines sudo non- Root-Benutzer und aktivierte Firewall zum Blockieren nicht notwendiger Ports. "++" bezieht sich auf die IP-Adresse des Servers, auf dem Sie Ihre Website oder Domain hosten.

  • Ein vollständig registrierter Domainname mit DNS, der von einem supported provider gehostet wird. In diesem Lernprogramm wird durchgehend "++" und DigitalOcean als Dienstanbieter verwendet.

  • Ein DigitalOcean-API-Schlüssel (Personal Access Token) mit Lese- und Schreibberechtigungen. Um einen zu erstellen, besuchen Sie So erstellen Sie einen persönlichen Zugriffstoken.

Sobald Sie diese bereit haben, melden Sie sich bei Ihrem Server als Nicht-Root-Benutzer an, um zu beginnen.

Schritt 1 - Installieren von DNSControl

DNSControl ist in Go geschrieben. Beginnen Sie diesen Schritt, indem Sie Go auf Ihrem Server installieren und "+ GOPATH +" einstellen.

Go ist in den Standard-Software-Repositorys von Ubuntu verfügbar und kann mit herkömmlichen Paketverwaltungstools installiert werden.

Aktualisieren Sie zunächst den lokalen Paketindex, um alle neuen Upstream-Änderungen widerzuspiegeln:

sudo apt update

Dann installiere das + golang-go + Paket:

sudo apt install golang-go

Nachdem Sie die Installation bestätigt haben, lädt "+ apt +" Go und alle erforderlichen Abhängigkeiten herunter und installiert es.

Als Nächstes konfigurieren Sie die erforderlichen Pfadumgebungsvariablen für Go. Wenn Sie mehr darüber erfahren möchten, können Sie dieses Tutorial unter Understanding the GOPATH lesen. Beginnen Sie mit der Bearbeitung der Datei "+ ~ / .profile":

nano ~/.profile

Fügen Sie die folgenden Zeilen ganz am Ende Ihrer Datei hinzu:

~ / .profile

...
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"

Nachdem Sie diese Zeilen am Ende der Datei hinzugefügt haben, speichern und schließen Sie sie. Laden Sie dann Ihr Profil neu, indem Sie sich abmelden und wieder anmelden oder die Datei erneut herunterladen:

source ~/.profile

Nachdem Sie Go installiert und konfiguriert haben, können Sie DNSControl installieren.

Mit dem Befehl + go get + können Sie eine Kopie des Codes abrufen, automatisch kompilieren und in Ihrem Go-Verzeichnis installieren:

go get github.com/StackExchange/dnscontrol

Sobald dies abgeschlossen ist, können Sie die installierte Version überprüfen, um sicherzustellen, dass alles funktioniert:

dnscontrol version

Ihre Ausgabe sieht ungefähr so ​​aus:

Outputdnscontrol

Wenn der Fehler "+ dnscontrol: Befehl nicht gefunden" angezeigt wird, überprüfen Sie die Konfiguration Ihres Go-Pfads.

Nachdem Sie DNSControl installiert haben, können Sie ein Konfigurationsverzeichnis erstellen und DNSControl mit Ihrem DNS-Anbieter verbinden, damit dieser Änderungen an Ihren DNS-Einträgen vornehmen kann.

Schritt 2 - DNSControl konfigurieren

In diesem Schritt erstellen Sie die erforderlichen Konfigurationsverzeichnisse für DNSControl und stellen eine Verbindung zu Ihrem DNS-Anbieter her, damit Änderungen an Ihren DNS-Einträgen live vorgenommen werden können.

Erstellen Sie zunächst ein neues Verzeichnis, in dem Sie Ihre DNSControl-Konfiguration speichern können, und wechseln Sie dann in dieses Verzeichnis:

mkdir ~/dnscontrol
cd ~/dnscontrol

Wenn Sie planen, DNSControl zum Schreiben von BIND-Zonendateien zu verwenden, sollten Sie auch das Verzeichnis + zones + erstellen:

mkdir ~/dnscontrol/zones

BIND-Zonendateien sind eine unformatierte, standardisierte Methode zum Speichern von DNS-Zonen / Einträgen im Nur-Text-Format. Sie wurden ursprünglich für die BIND-DNS-Serversoftware verwendet, werden heute jedoch allgemein als Standardmethode zum Speichern von DNS-Zonen verwendet. Von DNSControl erstellte BIND-Zonendateien sind nützlich, wenn Sie sie auf einen benutzerdefinierten oder selbst gehosteten DNS-Server oder zu Überwachungszwecken importieren möchten.

Wenn Sie DNSControl jedoch nur zum Übertragen von DNS-Änderungen an einen verwalteten Anbieter verwenden möchten, wird das Verzeichnis "+ zone +" nicht benötigt.

Als nächstes müssen Sie die Datei "+ creds.json" konfigurieren. Dadurch kann sich DNSControl bei Ihrem DNS-Anbieter authentifizieren und Änderungen vornehmen. Das Format von "+ creds.json" ist je nach verwendetem DNS-Anbieter leicht unterschiedlich. Informationen zur Konfiguration Ihres eigenen Anbieters finden Sie in der offiziellen DNSControl-Dokumentation unter Service Providers list.

Erstellen Sie die Datei + creds.json im Verzeichnis` + ~ / dnscontrol`:

cd ~/dnscontrol
nano creds.json

Fügen Sie der Datei die Beispielkonfiguration "+ creds.json" für Ihren DNS-Anbieter hinzu. Wenn Sie DigitalOcean als DNS-Anbieter verwenden, können Sie Folgendes verwenden:

~ / dnscontrol / creds.json

{
 "digitalocean": {
   "token": ""
 }
}

Diese Datei teilt DNSControl mit, zu welchen DNS-Anbietern eine Verbindung hergestellt werden soll.

Sie müssen eine Art Authentifizierung für Ihren DNS-Anbieter bereitstellen. Dies ist normalerweise ein API-Schlüssel oder ein OAuth-Token, aber einige Anbieter benötigen zusätzliche Informationen, wie in der offiziellen DNSControl-Dokumentation unter Service Providers list dokumentiert.

Wenn Sie DigitalOcean als DNS-Anbieter verwenden, können Sie das erforderliche OAuth-Token in Ihren DigitalOcean-Kontoeinstellungen verwenden, das Sie als Teil der Voraussetzungen generiert haben.

Wenn Sie über mehrere verschiedene DNS-Anbieter verfügen, z. B. für mehrere Domänennamen oder delegierte DNS-Zonen, können Sie diese alle in derselben Datei "+ creds.json +" definieren.

Sie haben die anfänglichen DNSControl-Konfigurationsverzeichnisse eingerichtet und "+ creds.json +" so konfiguriert, dass sich DNSControl bei Ihrem DNS-Anbieter authentifizieren und Änderungen vornehmen kann. Als Nächstes erstellen Sie die Konfiguration für Ihre DNS-Zonen.

Schritt 3 - Erstellen einer DNS-Konfigurationsdatei

In diesem Schritt erstellen Sie eine anfängliche DNS-Konfigurationsdatei, die die DNS-Einträge für Ihren Domainnamen oder Ihre delegierte DNS-Zone enthält.

+ dnsconfig.js + ist die Haupt-DNS-Konfigurationsdatei für DNSControl. In dieser Datei werden DNS-Zonen und die zugehörigen Einträge mithilfe der JavaScript-Syntax definiert. Dies wird als DSL oder domänenspezifische Sprache bezeichnet. Weitere Informationen finden Sie auf der Seite JavaScript DSL in der offiziellen DNSControl-Dokumentation.

Erstellen Sie zunächst die DNS-Konfigurationsdatei im Verzeichnis "+ ~ / dnscontrol +":

cd ~/dnscontrol
nano dnsconfig.js

Fügen Sie dann der Datei die folgende Beispielkonfiguration hinzu:

~ / dnscontrol / dnsconfig.js

// Providers:

var  = NewRegistrar('', '');
var  = NewDnsProvider('', '');

// Domains:

D('', , DnsProvider(),
   A('@', '')
);

Diese Beispieldatei definiert einen Domainnamen oder eine DNS-Zone bei einem bestimmten Anbieter, der in diesem Fall von DigitalOcean gehostet wird. Ein Beispielsatz "+ A " ist auch für das Zonenstammverzeichnis (" @ +") definiert und verweist auf die IPv4-Adresse des Servers, auf dem Sie Ihre Domain / Website hosten.

Es gibt drei Hauptfunktionen, aus denen eine grundlegende DNSControl-Konfigurationsdatei besteht:

  • + NewRegistrar (Name, Typ, Metadaten) +: Definiert den Domain-Registrar für Ihren Domain-Namen. DNSControl kann dies verwenden, um erforderliche Änderungen vorzunehmen, z. B. die autorisierenden Nameserver zu ändern. Wenn Sie DNSControl nur zum Verwalten Ihrer DNS-Zonen verwenden möchten, kann dies im Allgemeinen als "+ NONE +" belassen werden.

  • + NewDnsProvider (Name, Typ, Metadaten) +: Definiert einen DNS-Dienstanbieter für Ihren Domainnamen oder Ihre delegierte Zone. Hier wird DNSControl die von Ihnen vorgenommenen DNS-Änderungen übertragen.

  • + D (Name, Registrar, Modifikatoren) +: Definiert einen Domainnamen oder eine delegierte DNS-Zone, die von DNSControl verwaltet werden soll, sowie die in der Zone vorhandenen DNS-Einträge.

Sie sollten "+ NewRegistrar () ", " NewDnsProvider () " und " D () +" entsprechend konfigurieren, indem Sie Service Providers list verwenden. in der offiziellen DNSControl-Dokumentation.

Wenn Sie DigitalOcean als DNS-Anbieter verwenden und nur DNS-Änderungen vornehmen müssen (anstatt auch autorisierende Nameserver), ist das Beispiel im vorhergehenden Codeblock bereits korrekt.

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

In diesem Schritt richten Sie eine DNS-Konfigurationsdatei für DNSControl ein, in der die entsprechenden Anbieter definiert sind. Als Nächstes füllen Sie die Datei mit einigen nützlichen DNS-Einträgen.

Schritt 4 - Füllen Sie Ihre DNS-Konfigurationsdatei aus

Als Nächstes können Sie die DNS-Konfigurationsdatei mithilfe der DNSControl-Syntax mit nützlichen DNS-Einträgen für Ihre Website oder Ihren Dienst füllen.

Im Gegensatz zu herkömmlichen BIND-Zonendateien, in denen DNS-Einträge in einem unformatierten zeilenweisen Format geschrieben werden, werden DNS-Einträge in DNSControl als Funktionsparameter (Domänenmodifikator) für die Funktion "+ D () +" definiert, wie dies kurz dargestellt ist in Schritt 3.

Für jeden DNS-Standardeintragstyp ist ein Domänenmodifizierer vorhanden, einschließlich "+ A ", " AAAA ", " MX ", " TXT ", " NS ", " CAA +" usw. Eine vollständige Liste der verfügbaren Datensatztypen finden Sie im Abschnitt Domain Modifiers der DNSControl-Dokumentation.

Modifikatoren für einzelne Datensätze sind ebenfalls verfügbar (Datensatzmodifikatoren). Derzeit werden diese hauptsächlich zum Festlegen der TTL (Time to Live) einzelner Datensätze verwendet. Eine vollständige Liste der verfügbaren Datensatzmodifikatoren finden Sie im Abschnitt Record Modifiers der DNSControl-Dokumentation. Datensatzmodifikatoren sind optional und können in den meisten grundlegenden Anwendungsfällen weggelassen werden.

Die Syntax zum Festlegen von DNS-Einträgen variiert geringfügig für jeden Eintragstyp. Im Folgenden finden Sie einige Beispiele für die gängigsten Datensatztypen:

  • + A + Datensätze:

  • Zweck: Verweisen auf eine IPv4-Adresse.

  • Syntax: + A ('', '', optionale Datensatzmodifikatoren) +

  • Beispiel: + A ('', '', TTL ()) +

  • + AAAA + Datensätze:

  • Zweck: Verweisen auf eine IPv6-Adresse.

  • Syntax: + AAAA ('', '', optionale Datensatzmodifikatoren) +

  • Beispiel: + AAAA ('', '') + (Datensatzmodifikator weggelassen, daher wird Standard-TTL verwendet)

  • + CNAME + Datensätze:

  • Zweck: Um Ihre Domain / Subdomain zu einem Alias ​​eines anderen zu machen.

  • Syntax: + CNAME ('', '', optionale Datensatzmodifikatoren) +

  • Beispiel: + CNAME ('', '') + (beachten Sie, dass ein abschließendes +. + * Enthalten sein muss, wenn der Wert Punkte enthält)

  • + MX + Datensätze:

  • Zweck: Um E-Mails an bestimmte Server / Adressen weiterzuleiten.

  • Syntax: + MX ('', '', '', optionale Datensatzmodifikatoren) +

  • Beispiel: + MX ('', '') + (beachten Sie, dass ein abschließendes +. + * Enthalten sein muss, wenn der Wert Punkte enthält)

  • + TXT + Datensätze:

  • Zweck: Hinzufügen von beliebigem Klartext, der häufig für Konfigurationen ohne eigenen Datensatztyp verwendet wird.

  • Syntax: + TXT ('', '', optionale Datensatzmodifikatoren) +

  • Beispiel: + TXT ('', '') +

  • + CAA + Datensätze:

  • Zweck: Einschränken und Melden von Zertifizierungsstellen (CAs), die TLS-Zertifikate für Ihre Domain / Subdomains ausstellen können.

  • Syntax: + CAA ('', '', '', optionale Datensatzmodifikatoren) +

  • Beispiel: "+ CAA (", ",") + "

Bearbeiten Sie die DNS-Konfigurationsdatei, um DNS-Einträge für Ihre Domain oder delegierte DNS-Zone hinzuzufügen:

cd ~/dnscontrol
nano dnsconfig.js

Als Nächstes können Sie die Parameter für die vorhandene Funktion "+ D () " mit der in der vorherigen Liste beschriebenen Syntax sowie mit den https://stackexchange.github.io/dnscontrol/js#domain-modifiers [ Domain Modifiers] in der offiziellen DNSControl-Dokumentation. Zwischen jedem Datensatz muss ein Komma ("", "+") verwendet werden.

Als Referenz enthält der Codeblock hier eine vollständige Beispielkonfiguration für eine grundlegende anfängliche DNS-Einrichtung:

~ / dnscontrol / dnsconfig.js

...

D('', , DnsProvider(),
   A('', ''),
   A('', ''),
   A('', ''),
   AAAA('', ''),
   AAAA('', ''),
   AAAA('', ''),
   MX('', , ''),
   TXT('', ''),
   TXT('', '')
);

Speichern und schließen Sie die Datei, nachdem Sie Ihre anfängliche DNS-Konfiguration abgeschlossen haben.

In diesem Schritt richten Sie die anfängliche DNS-Konfigurationsdatei ein, die Ihre DNS-Einträge enthält. Als Nächstes testen Sie die Konfiguration und stellen sie bereit.

Schritt 5 - Testen und Bereitstellen Ihrer DNS-Konfiguration

In diesem Schritt führen Sie eine lokale Syntaxprüfung für Ihre DNS-Konfiguration durch und stellen die Änderungen dann auf dem Live-DNS-Server / -Anbieter bereit.

Wechseln Sie zunächst in Ihr Verzeichnis "+ dnscontrol +":

cd ~/dnscontrol

Verwenden Sie als Nächstes die Funktion "+ preview +" von DNSControl, um die Syntax Ihrer Datei zu überprüfen und auszugeben, welche Änderungen vorgenommen werden (ohne sie tatsächlich vorzunehmen):

dnscontrol preview

Wenn die Syntax Ihrer DNS-Konfigurationsdatei korrekt ist, gibt DNSControl eine Übersicht über die vorgenommenen Änderungen aus. Dies sollte ungefähr so ​​aussehen:

Output******************** Domain:
----- Getting nameservers from:
----- DNS Provider: ...8 corrections
#1: CREATE A   ttl=300
#2: CREATE A www.  ttl=300
#3: CREATE A mail.  ttl=300
#4: CREATE AAAA   ttl=300
#5: CREATE TXT _dmarc. "v=DMARC1; p=reject; rua=mailto:abuse@; aspf=s; adkim=s;" ttl=300
#6: CREATE AAAA www.  ttl=300
#7: CREATE AAAA mail.  ttl=300
#8: CREATE MX  10 mail.. ttl=300
----- Registrar: none...0 corrections
Done. 8 corrections.

Wenn in Ihrer Ausgabe eine Fehlermeldung angezeigt wird, liefert DNSControl Details dazu, wo und wo sich der Fehler in Ihrer Datei befindet.

Abschließend können Sie die Änderungen an Ihren Live-DNS-Anbieter senden:

dnscontrol push

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Output******************** Domain:
----- Getting nameservers from:
----- DNS Provider: ...8 corrections
#1: CREATE TXT _dmarc. "v=DMARC1; p=reject; rua=mailto:abuse@; aspf=s; adkim=s;" ttl=300
SUCCESS!
#2: CREATE A   ttl=300
SUCCESS!
#3: CREATE AAAA   ttl=300
SUCCESS!
#4: CREATE AAAA www.  ttl=300
SUCCESS!
#5: CREATE AAAA mail.  ttl=300
SUCCESS!
#6: CREATE A www.  ttl=300
SUCCESS!
#7: CREATE A mail.  ttl=300
SUCCESS!
#8: CREATE MX  10 mail.. ttl=300
SUCCESS!
----- Registrar: none...0 corrections
Done. 8 corrections.

Wenn Sie nun die DNS-Einstellungen für Ihre Domain in der DigitalOcean-Systemsteuerung überprüfen, werden die Änderungen angezeigt.

image: https://assets.digitalocean.com/articles/dnscontrols1804/step5a.png [Ein Screenshot des DigitalOcean-Kontrollfelds mit einigen der DNS-Änderungen, die DNSControl vorgenommen hat.]

Sie können die Datensatzerstellung auch überprüfen, indem Sie eine DNS-Abfrage für Ihre Domäne / delegierte Zone ausführen. Sie werden feststellen, dass die Datensätze entsprechend aktualisiert wurden:

dig +short

Es wird eine Ausgabe mit der IP-Adresse und dem entsprechenden DNS-Eintrag aus Ihrer Zone angezeigt, die mit DNSControl bereitgestellt wurde. Die Weitergabe von DNS-Einträgen kann einige Zeit in Anspruch nehmen, daher müssen Sie möglicherweise warten und diesen Befehl erneut ausführen.

In diesem letzten Schritt haben Sie eine lokale Syntaxprüfung der DNS-Konfigurationsdatei durchgeführt, diese dann bei Ihrem Live-DNS-Anbieter bereitgestellt und getestet, ob die Änderungen erfolgreich durchgeführt wurden.

Fazit

In diesem Artikel haben Sie DNSControl eingerichtet und eine DNS-Konfiguration für einen Live-Anbieter bereitgestellt. Jetzt können Sie Ihre DNS-Konfigurationsänderungen in einer sicheren Offline-Umgebung verwalten und testen, bevor Sie sie für die Produktion bereitstellen.

Wenn Sie dieses Thema näher untersuchen möchten, ist DNSControl so konzipiert, dass es in Ihre CI / CD-Pipeline integriert wird, sodass Sie eingehende Tests durchführen und die Bereitstellung in der Produktion besser steuern können. Sie können DNSControl auch in Ihre Infrastrukturerstellungs- / Bereitstellungsprozesse integrieren, um Server bereitzustellen und sie vollständig automatisch zu DNS hinzuzufügen.

Wenn Sie DNSControl weiterentwickeln möchten, finden Sie in den folgenden DigitalOcean-Artikeln einige interessante weitere Schritte, die Sie bei der Integration von DNSControl in Ihre Workflows zur Änderungsverwaltung und Infrastrukturbereitstellung unterstützen:

Related