Der Autor wählte die Electronic Frontier Foundation Inc, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.
DNSControl ist ein Infrastruktur-als-Code-Tool, mit dem Sie Ihre DNS-Zonen mithilfe von Standard-Software-Entwicklungsprinzipien, einschließlich Versionskontrolle, Tests und automatisierter Bereitstellung, bereitstellen und verwalten können. DNSControl wurde von Stack Exchange erstellt und ist in Go geschrieben.
Die Verwendung von DNSControl beseitigt viele der Fallstricke der manuellen DNS-Verwaltung, da die Zonendateien in einem programmierbaren Format gespeichert werden. Dadurch können Sie Zonen gleichzeitig bei mehreren DNS-Anbietern bereitstellen, Syntaxfehler identifizieren und Ihre DNS-Konfiguration automatisch mithilfe von Push übertragen, wodurch das Risiko menschlicher Fehler verringert wird. Eine weitere häufige Anwendung von DNSControl ist die schnelle Migration Ihres DNS zu einem anderen Anbieter, z. B. im Falle eines DDoS-Angriffs oder eines Systemausfalls.
In diesem Tutorial installieren und konfigurieren Sie DNSControl, erstellen eine grundlegende DNS-Konfiguration und beginnen mit der Bereitstellung von DNS-Einträgen bei einem Live-Provider. Als Teil dieses Tutorials werden wir DigitalOcean als DNS-Beispielanbieter verwenden. Wenn Sie einen anderen Anbieter verwenden möchten, ist die Einrichtung sehr ähnlich. Wenn Sie fertig sind, können Sie Ihre DNS-Konfiguration in einer sicheren Offline-Umgebung verwalten und testen und sie dann automatisch in der Produktion einsetzen.
Bevor Sie diese Anleitung beginnen, benötigen Sie Folgendes:
your-server-ipv4-address
bezieht sich auf die IP-Adresse des Servers, auf dem Sie Ihre Website oder Domäne hosten. your-server-ipv6-address
bezieht sich auf die IPv6-Adresse des Servers, auf dem Sie Ihre Website oder Domäne hosten.your_domain
und als Dienstanbieter DigitalOcean verwendet.Sobald Sie diese zur Verfügung haben, melden Sie sich zunächst als Benutzer ohne Rootberechtigung auf Ihrem Server an.
DNSControl ist in Go geschrieben. Daher beginnen Sie diesen Schritt mit der Installation von Go auf Ihrem Server und der Einstellung Ihres GOPATH
.
Go ist innerhalb der Standard-Software-Repositorys von Debian verfügbar und kann mit herkömmlichen Paketverwaltungsprogrammen installiert werden.
Sie müssen auch Git installieren, da dies erforderlich ist, damit Go die DNSControl-Software aus seinem Repository auf GitHub herunterladen und installieren kann.
Beginnen Sie damit, den lokalen Paketindex zu aktualisieren, um alle neuen Änderungen im Upstream zu berücksichtigen:
- sudo apt update
Installieren Sie dann die Pakete golang-go
und git
:
- sudo apt install golang-go git
Nach der Bestätigung der Installation lädt apt
Go und Git herunter und installiert diese sowie alle erforderlichen Abhängigkeiten.
Als Nächstes konfigurieren Sie die erforderlichen Pfad-Umgebungsvariablen für Go. Wenn Sie mehr darüber erfahren möchten, können Sie das Tutorial GOPATH verstehen lesen. Beginnen Sie mit der Bearbeitung der Datei ~/.profile
:
- nano ~/.profile
Fügen Sie die folgenden Zeilen ganz am Ende Ihrer Datei hinzu:
...
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"
Wenn Sie diese Zeilen am Ende der Datei hinzugefügt haben, speichern und schließen Sie die Datei. Dann laden Sie Ihr Profil erneut, indem Sie sich entweder aus- und wieder einloggen oder die Datei erneut aufrufen:
- source ~/.profile
Nachdem Sie nun Go installiert und konfiguriert haben, können Sie DNSControl installieren.
Mit dem Befehl go get
kann eine Kopie des Codes abgerufen, automatisch kompiliert und in Ihr Go-Verzeichnis installiert werden:
- 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
Sie sehen eine Ausgabe, die der folgenden ähnelt:
Outputdnscontrol 2.9-dev
Wenn Sie den Fehler dnscontrol: command not found
sehen, überprüfen Sie die Einrichtung des Go-Pfades.
Nachdem Sie nun DNSControl installiert haben, können Sie ein Konfigurationsverzeichnis erstellen und DNSControl mit Ihrem DNS-Provider verbinden, damit dieser Änderungen an Ihren DNS-Einträgen vornehmen kann.
In diesem Schritt erstellen Sie die erforderlichen Konfigurationsverzeichnisse für DNSControl und verbinden es mit Ihrem DNS-Provider, damit dieser beginnen kann, Live-Änderungen an Ihren DNS-Einträgen vorzunehmen.
Erstellen Sie zunächst ein neues Verzeichnis, in dem Sie Ihre DNSControl-Konfiguration speichern können, und wechseln Sie in dieses:
- mkdir ~/dnscontrol
- cd ~/dnscontrol
Anmerkung: Dieses Tutorial konzentriert sich auf die Ersteinrichtung von DNSControl; für den produktiven Einsatz wird jedoch empfohlen, Ihre DNSControl-Konfiguration in einem Versionskontrollsystem (VCS) wie Git zu speichern. Zu den Vorteilen dieses Systems gehören die vollständige Versionskontrolle, die Integration mit CI/CD für Tests, nahtlose Rollback-Bereitstellungen und so weiter.
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 rohe, standardisierte Methode zur Speicherung von DNS-Zonen/Einträgen im Klartextformat. Sie wurden ursprünglich für die BIND-DNS-Server-Software verwendet, sind aber heute als Standardmethode zur Speicherung von DNS-Zonen weit verbreitet. BIND-Zonendateien, die von DNSControl erstellt werden, sind nützlich, wenn Sie sie auf einen benutzerdefinierten oder selbst gehosteten DNS-Server importieren oder für Audit-Zwecke verwenden möchten.
Wenn Sie DNSControl jedoch nur dazu verwenden möchten, DNS-Änderungen mithilfe von Push an einen verwalteten Provider zu übertragen, wird das Verzeichnis zones
nicht benötigt.
Als Nächstes müssen Sie die Datei creds.json
konfigurieren, die es DNSControl ermöglicht, sich bei Ihrem DNS-Provider zu authentifizieren und Änderungen vorzunehmen. Das Format von creds.json
unterscheidet sich leicht, je nach dem von Ihnen verwendeten DNS-Provider. Bitte lesen Sie die Liste der Dienstanbieter in der offiziellen DNSControl-Dokumentation, um die Konfiguration für Ihren eigenen Anbieter zu finden.
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-Provider hinzu. Wenn Sie DigitalOcean als Ihren DNS-Provider verwenden, können Sie Folgendes verwenden:
{
"digitalocean": {
"token": "your-digitalocean-oauth-token"
}
}
Diese Datei teilt DNSControl mit, mit welchen DNS-Providern es sich verbinden soll.
Sie müssen eine Form der Authentifizierung für Ihren DNS-Provider bereitstellen. Dies ist normalerweise ein API-Schlüssel oder ein OAuth-Token, aber einige Anbieter benötigen zusätzliche Informationen, die in der Liste der Dienstanbieter in der offiziellen DNSControl-Dokumentation dokumentiert sind.
Warnung: Dieses Token gewährt Zugang zu Ihrem DNS-Provider-Konto, daher sollten Sie es wie ein Passwort schützen. Stellen Sie außerdem sicher, dass bei Verwendung eines Versionskontrollsystems entweder die Datei, die das Token enthält, ausgeschlossen wird (z. B. mit .gitignore
) oder auf eine andere Art und Weise sicher verschlüsselt wird.
Wenn Sie DigitalOcean als DNS-Provider verwenden, können Sie das erforderliche OAuth-Token in Ihren DigitalOcean-Kontoeinstellungen verwenden, das Sie als Teil der Voraussetzungen erstellt haben.
Wenn Sie mehrere verschiedene DNS-Provider haben, z. B. für mehrere Domänennamen oder delegierte DNS-Zonen, können Sie diese alle in derselben creds.json
-Datei definieren.
Sie haben die anfänglichen DNSControl-Konfigurationsverzeichnisse eingerichtet und creds.json
so konfiguriert, dass DNSControl sich bei Ihrem DNS-Provider authentifizieren und Änderungen vornehmen kann. Als Nächstes erstellen Sie die Konfiguration für Ihre DNS-Zonen.
In diesem Schritt erstellen Sie eine anfängliche DNS-Konfigurationsdatei, die die DNS-Einträge für Ihren Domänennamen oder Ihre delegierte DNS-Zone enthält.
dnsconfig.js
ist die Haupt-DNS-Konfigurationsdatei für DNSControl. In dieser Datei werden die DNS-Zonen und die entsprechenden Einträge mithilfe der JavaScript-Syntax definiert. Dies wird als DSL oder domänenspezifische Sprache bezeichnet. Die Seite JavaScript-DSL in der offiziellen DNSControl-Dokumentation enthält weitere Einzelheiten.
Erstellen Sie zunächst die DNS-Konfigurationsdatei im Verzeichnis ~/dnscontrol
:
- cd ~/dnscontrol
- nano dnsconfig.js
Fügen Sie dann die folgende Beispielkonfiguration in die Datei ein:
// Providers:
var REG_NONE = NewRegistrar('none', 'NONE');
var DNS_DIGITALOCEAN = NewDnsProvider('digitalocean', 'DIGITALOCEAN');
// Domains:
D('your_domain', REG_NONE, DnsProvider(DNS_DIGITALOCEAN),
A('@', 'your-server-ipv4-address')
);
Diese Beispieldatei definiert einen Domänennamen oder eine DNS-Zone bei einem bestimmten Provider, in diesem Fall your_domain
, die von DigitalOcean gehostet wird. Ein Beispieleintrag A
wird auch in der Zone Root (@)
definiert, der auf die IPv4-Adresse des Servers verweist, auf dem Sie die Domäne/Website hosten.
Es gibt drei Hauptfunktionen, die eine grundlegende DNSControl-Konfigurationsdatei ausmachen:
NewRegistrar(name, type, metadata)
: definiert die Domänen-Registrierungsstelle für Ihren Domänennamen. Damit kann DNSControl die erforderlichen Änderungen vornehmen, z. B. die Änderung der autorisierenden Nameserver. Wenn Sie DNSControl nur zur Verwaltung Ihrer DNS-Zonen verwenden möchten, kann dies im Allgemeinen als NONE
belassen werden.
NewDnsProvider(name, type, metadata)
: definiert einen DNS-Dienstanbieter für Ihren Domänennamen oder Ihre delegierte Zone. DNSControl wird die von Ihnen vorgenommenen DNS-Änderungen mithilfe von Push an diese Stelle übertragen.
D( name, registrar, modifiers)
: definiert einen Domänennamen oder eine delegierte DNS-Zone, die DNSControl verwalten soll, sowie die in der Zone vorhandenen DNS-Einträge.
Sie sollten NewRegistrar()
, NewDnsProvider()
und D()
entsprechend konfigurieren, indem Sie die Liste der Dienstanbieter in der offiziellen DNSControl-Dokumentation verwenden.
Wenn Sie DigitalOcean als DNS-Provider verwenden und nur in der Lage sein müssen, DNS-Änderungen vorzunehmen (und nicht auch noch Änderungen an autoritativen Nameservern), ist das Beispiel im vorhergehenden Codeblock bereits korrekt.
Nach Abschluss speichern und schließen Sie die Datei.
In diesem Schritt richten Sie eine DNS-Konfigurationsdatei für DNSControl ein, in der die entsprechenden Provider definiert sind. Als Nächstes werden Sie die Datei mit einigen nützlichen DNS-Einträgen füllen.
Als Nächstes können Sie die DNS-Konfigurationsdatei mit nützlichen DNS-Einträgen für Ihre Website oder Ihren Dienst unter Verwendung der DNSControl-Syntax füllen.
Im Gegensatz zu herkömmlichen BIND-Zonendateien, bei denen DNS-Datensätze in einem rohen, zeilenweisen Format geschrieben werden, werden DNS-Einträge innerhalb von DNSControl als Funktionsparameter (Domänenmodifikator) der D()
-Funktion definiert, wie in Schritt 3 kurz gezeigt wurde.
Ein Domänenmodifikator existiert für jeden der Standard-DNS-Eintragstypen, einschließlich A
, AAAA
, MX
, TXT
, NS
, CAA
und so weiter. Eine vollständige Liste der verfügbaren Eintragstypen ist im Abschnitt Domänenmodifikatoren in der DNSControl-Dokumentation verfügbar.
Es sind auch Modifikatoren für einzelne Einträge (Datensatzmodifikatoren) verfügbar. Diese werden derzeit in erster Linie für die Einstellung der TTL (time to live) der einzelnen Einträge verwendet. Eine vollständige Liste der verfügbaren Eintragsmodifikatoren ist im Abschnitt Eintragsmodifikatoren in der DNSControl-Dokumentation verfügbar. Eintragsmodifikatoren sind optional und können in den meisten grundlegenden Anwendungsfällen ausgelassen werden.
Die Syntax zur Einstellung von DNS-Einträgen variiert für jeden Eintragstyp leicht. Nachfolgend finden Sie einige Beispiele für die gängigsten Eintragstypen:
A
-Einträge:
A('name', 'address', optionale Eintragsmodifikatoren)
A('@', 'your-server-ipv4-address', TTL(30))
AAAA
-Einträge:
AAAA('name', 'address', optionale Eintragsmodifikatoren)
AAAA('@', 'your-server-ipv6-address')
(Eintragsmodifikator ausgelassen, daher wird die Standard-TTL verwendet)CNAME
-Einträge:
CNAME('name', 'target', optionale Eintragsmodifikatoren)
CNAME('subdomain1', 'example.org.')
(Anmerkung: Es muss ein nachgestellter .
eingefügt werden, wenn der Wert Punkte enthält)MX
-Einträge:
MX('name', 'priority', 'target', optionale Eintragsmodifikatoren)
MX('@', 10, 'mail.example.net')
(Anmerkung: Es muss ein nachgestellter .
eingefügt werden, wenn der Wert Punkte enthält)TXT
-Einträge:
TXT('name', 'content', optionale Eintragsmodifikatoren)
TXT('@', 'This is a TXT record. ')
CAA
-Einträge:
CAA('name', 'tag', 'value', optionale Eintragsmodifikatoren)
CAA('@', 'issue', 'letsencrypt.org')
Um mit dem Hinzufügen von DNS-Einträgen für Ihre Domäne oder delegierte DNS-Zone zu beginnen, bearbeiten Sie Ihre DNS-Konfigurationsdatei:
- nano dnsconfig.js
Als Nächstes können Sie damit beginnen, die Parameter für die vorhandene D()
-Funktion mit der in der vorherigen Liste sowie dem Abschnitt Domänenmodifikatoren der offiziellen DNSConrtol-Dokumentation beschriebenen Syntax einzutragen. Zwischen den einzelnen Einträgen muss ein Komma (,
) verwendet werden.
Als Referenz enthält der Codeblock hier eine vollständige Beispielkonfiguration für eine grundlegende DNS-Ersteinrichtung:
...
D('your_domain', REG_NONE, DnsProvider(DNS_DIGITALOCEAN),
A('@', 'your-server-ipv4-address'),
A('www', 'your-server-ipv4-address'),
A('mail', 'your-server-ipv4-address'),
AAAA('@', 'your-server-ipv6-address'),
AAAA('www', 'your-server-ipv6-address'),
AAAA('mail', 'your-server-ipv6-address'),
MX('@', 10, 'mail.your_domain.'),
TXT('@', 'v=spf1 -all'),
TXT('_dmarc', 'v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;')
);
Wenn Sie Ihre anfängliche DNS-Konfiguration abgeschlossen haben, speichern und schließen Sie die Datei.
In diesem Schritt richten Sie die anfängliche DNS-Konfigurationsdatei ein, die Ihre DNS-Einträge enthält. Als Nächstes werden Sie die Konfiguration testen und bereitstellen.
In diesem Schritt führen Sie eine lokale Syntaxprüfung Ihrer DNS-Konfiguration durch und stellen dann die Änderungen auf dem Live-DNS-Server/Provider bereit.
Gehen Sie zuerst in Ihr Verzeichnis dnscontrol
:
- cd ~/dnscontrol
Als Nächstes verwenden Sie die Funktion preview
von DNSControl, um die Syntax Ihrer Datei zu überprüfen und die Änderungen auszugeben (ohne sie tatsächlich vorzunehmen):
- dnscontrol preview
Wenn die Syntax Ihrer DNS-Konfigurationsdatei korrekt ist, gibt DNSControl eine Übersicht über die Änderungen aus, die es vornehmen wird. Diese sollte ähnlich wie die folgende aussehen:
Output******************** Domain: your_domain
----- Getting nameservers from: digitalocean
----- DNS Provider: digitalocean...8 corrections
#1: CREATE A your_domain your-server-ipv4-address ttl=300
#2: CREATE A www.your_domain your-server-ipv4-address ttl=300
#3: CREATE A mail.your_domain your-server-ipv4-address ttl=300
#4: CREATE AAAA your_domain your-server-ipv6-address ttl=300
#5: CREATE TXT _dmarc.your_domain "v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;" ttl=300
#6: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300
#7: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300
#8: CREATE MX your_domain 10 mail.your_domain. ttl=300
----- Registrar: none...0 corrections
Done. 8 corrections.
Wenn Sie eine Fehlerwarnung in Ihrer Ausgabe sehen, stellt DNSControl Details dazu bereit, was der Fehler ist und wo er sich innerhalb Ihrer Datei befindet.
Warnung: Der nächste Befehl nimmt Live-Änderungen an Ihren DNS-Einträgen und ggf. anderen Einstellungen vor. Bitte stellen Sie sicher, dass Sie darauf vorbereitet sind, einschließlich der Erstellung einer Sicherungskopie Ihrer bestehenden DNS-Konfiguration, und stellen Sie sicher, dass Sie die Möglichkeit haben, bei Bedarf ein Rollback durchzuführen.
Schließlich können Sie die Änderungen mithilfe von Push an Ihren Live-DNS-Provider übertragen:
- dnscontrol push
Sie sehen eine Ausgabe, die der folgenden ähnelt:
Output******************** Domain: your_domain
----- Getting nameservers from: digitalocean
----- DNS Provider: digitalocean...8 corrections
#1: CREATE TXT _dmarc.your_domain "v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;" ttl=300
SUCCESS!
#2: CREATE A your_domain your-server-ipv4-address ttl=300
SUCCESS!
#3: CREATE AAAA your_domain your-server-ipv6-address ttl=300
SUCCESS!
#4: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300
SUCCESS!
#5: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300
SUCCESS!
#6: CREATE A www.your_domain your-server-ipv4-address ttl=300
SUCCESS!
#7: CREATE A mail.your_domain your-server-ipv4-address ttl=300
SUCCESS!
#8: CREATE MX your_domain 10 mail.your_domain. ttl=300
SUCCESS!
----- Registrar: none...0 corrections
Done. 8 corrections.
Wenn Sie nun die DNS-Einstellungen für Ihre Domäne im DigitalOcean-Bedienfeld überprüfen, sehen Sie die Änderungen.
Sie können die Erstellung des Eintrags auch überprüfen, indem Sie mit dig
eine DNS-Abfrage für Ihre Domäne/delegierte Zone ausführen.
Wenn Sie dig
nicht installiert haben, müssen Sie das Paket dnsutils
installieren:
- sudo apt install dnsutils
Wenn Sie dig
installiert haben, können Sie damit eine DNS-Abfrage für Ihre Domäne durchführen. Sie werden sehen, dass die Einträge entsprechend aktualisiert wurden:
- dig +short your_domain
Sie sehen eine Ausgabe, die die IP-Adresse und den relevanten DNS-Eintrag aus Ihrer Zone zeigt, der mit DNSControl bereitgestellt wurde. Das Propagieren von DNS-Einträgen kann einige Zeit dauern, sodass Sie möglicherweise warten und diesen Befehl erneut ausführen müssen.
In diesem letzten Schritt haben Sie eine lokale Syntaxprüfung der DNS-Konfigurationsdatei durchgeführt, sie dann bei Ihrem Live-DNS-Provider bereitgestellt und getestet, ob die Änderungen erfolgreich durchgeführt wurden.
In diesem Artikel richten Sie DNSControl ein und stellen eine DNS-Konfiguration bei einem Live-Provider bereit. Jetzt können Sie Ihre DNS-Konfigurationsänderungen in einer sicheren Offline-Umgebung verwalten und testen, bevor Sie sie in der Produktion einsetzen.
Wenn Sie dieses Thema weiter vertiefen möchten, sei darauf verwiesen, dass DNSControl so konzipiert ist, dass es in Ihre CI/CD-Pipeline integriert werden kann, sodass Sie eingehende Tests durchführen können und mehr Kontrolle über Ihre Bereitstellung in der Produktion haben. Sie könnten sich auch mit der Integration von DNSControl in Ihre Infrastruktur-Building-/Bereitstellungsprozesse befassen, sodass Sie Server bereitstellen und diese vollständig automatisch zu DNS hinzufügen können.
Wenn Sie mit DNSControl noch weiter gehen möchten, bieten die folgenden DigitalOcean-Artikel einige interessante nächste Schritte, die Ihnen bei der Integration von DNSControl in Ihre Änderungsmanagement- und Infrastruktur-Bereitstellungs-Workflows helfen können:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!