Der Autor wählte die Electronic Frontier Foundation, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.
OctoDNS 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. OctoDNS wurde von GitHub erstellt und ist in Python geschrieben.
Die Verwendung von OctoDNS beseitigt viele der Fallstricke der manuellen DNS-Verwaltung, da die Zonendateien in einem sturkturierten Format (YAML) 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 OctoDNS ist die Synchronisierung Ihrer DNS-Konfiguration zwischen verschiedenen Anbietern, wie beispielsweise einem Test- und Produktivsystem oder zwischen Live- und Failover-Umgebungen.
OctoDNS ist vergleichbar mit DNSControl, einem äquivalenten Tool, das von Stack Exchange erstellt und in Go geschrieben wurde. Im Gegensatz zu OctoDNS verwendet DNSControl eine JavaScript-basierte Konfigurationssprache zur Definition von DNS-Zonen, die es Ihnen ermöglicht, erweiterte programmatische Funktionen wie Schleifen zur Angabe mehrerer ähnlicher Datensätze innerhalb derselben Zone zu verwenden. Der Artikel So stellen Sie Ihr DNS mit DNSControl unter Debian 10 bereit und verwalten es behandelt die grundlegende Einrichtung und Konfiguration von DNSControl.
In diesem Tutorial installieren und konfigurieren Sie OctoDNS, erstellen eine grundlegende DNS-Konfiguration und beginnen mit der Bereitstellung von DNS-Einträgen 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
und your-server-ipv6-address
beziehen sich auf die IP-Adressen des Servers, auf dem Sie Ihre Webite 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.
OctoDNS wird als Python-Pip-Paket vertrieben und läuft in einer virtuellen Python-Umgebung (virtualenv
), sodass Sie diesen Schritt mit der Installation der dafür erforderlichen Pakete beginnen. Eine virtualenv
ist eine isolierte Python-Umgebung, die ihre eigenen Bibliotheken und Konfigurationen haben kann, getrennt von der systemweiten Python-Hauptinstallation. Python und virtualenv
sind innerhalb der Standard-Software-Repositorys von Debian verfügbar und können mit herkömmlichen Paketverwaltungsprogrammen installiert werden.
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 python
und virtualenv
:
- sudo apt install python virtualenv
Nach der Bestätigung der Installation wird apt
Python, virtualenv
und alle ihre erforderlichen Abhängigkeiten herunterladen und installieren.
Als Nächstes erstellen Sie die erforderlichen Verzeichnisse für OctoDNS, in denen Ihre DNS- und Programmkonfiguration gespeichert werden. Beginnen Sie mit der Erstellung der Verzeichnisse ~/octodns
und ~/octodns/config
:
- mkdir ~/octodns ~/octodns/config
Gehen Sie danach in ~/octodns
:
- cd ~/octodns
Als Nächstes müssen Sie die virtuelle Python-Umgebung erstellen – eine isolierte Python-Umgebung mit eigenen Bibliotheken und einer eigenen Konfiguration, in der OctoDNS ausgeführt werden kann:
- virtualenv env
Aktivieren Sie Ihre Umgebung mit dem folgenden Befehl:
- source env/bin/activate
Sie sehen eine Ausgabe, die der folgenden ähnelt:
OutputRunning virtualenv with interpreter /usr/bin/python2
New python executable in /home/user/octodns/env/bin/python2
Also creating executable in /home/user/octodns/env/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Ihrem Bash-Shell-Prompt wird nun auch der Name der virtuellen Umgebung vorangestellt. Dies zeigt an, dass Sie sich derzeit innerhalb der virtualenv
befinden:
(env) user@digitalocean:~/octodns$
Wenn Sie die virtualenv
verlassen wollen, können Sie jederzeit den Befehl deactivate
verwenden. Um mit diesem Tutorial fortzufahren, sollten Sie jedoch in Ihrer virtualenv
bleiben.
Nachdem Sie nun Python und virtualenv
installiert und konfiguriert haben, können Sie OctoDNS installieren. OctoDNS wird als Python-Pip-Paket vertrieben, das das Standard-Paketverwaltungswerkzeug für Python-Pakete und -Bibliotheken ist.
Sie können das OctoDNS-Pip-Paket mit dem folgenden Befehl innerhalb Ihrer virtualenv
installieren:
- pip install octodns
Sobald dies abgeschlossen ist, können Sie die installierte Version überprüfen, um sicherzustellen, dass alles funktioniert:
- octodns-sync --version
Ihre Ausgabe wird ähnlich wie die folgende aussehen:
OutputoctoDNS 0.9.9
Wenn Sie einen Fehler octodns-sync:command not found
sehen, stellen Sie sicher, dass Sie sich immer noch in Ihrer virtualenv
befinden.
Nachdem Sie nun OctoDNS installiert haben, können Sie die erforderlichen Konfigurationsdateien erstellen, um OctoDNS mit Ihrem DNS-Provider zu verbinden, damit Sie Änderungen an Ihren DNS-Einträgen vornehmen können.
In diesem Schritt erstellen Sie die erforderlichen Konfigurationsdateien für OctoDNS und verbinden es mit Ihrem DNS-Provider, damit es beginnen kann, Live-Änderungen an Ihren DNS-Einträgen vorzunehmen.
Anmerkung: Dieses Tutorial konzentriert sich auf die Ersteinrichtung von OctoDNS; für den produktiven Einsatz wird jedoch empfohlen, Ihre OctoControl-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.
Zuerst müssen Sie die Datei config.yaml
konfigurieren, die die DNS-Zonen definiert, die OctoDNS verwalten soll, und die es OctoDNS erlaubt, sich bei Ihrem DNS-Provider zu authentifizieren und Änderungen vorzunehmen.
Das Format von config.yaml
unterscheidet sich leicht, je nach dem von Ihnen verwendeten DNS-Provider. Bitte lesen Sie die Liste der unterstützten Provider in der offiziellen OctoDNS-Dokumentation, um die Konfiguration für Ihren eigenen Anbieter zu finden. Wenn Sie sich diesen Hyperlink ansehen, werden die Konfigurationsdetails als ein Code-Kommentar im eigentlichen Python-Code für Ihren Provider dargestellt, der in der Spalte „Provider“ der Tabelle verlinkt ist. Wenn Sie den Python-Code für Ihren Provider gefunden haben, wie z. B. cloudflare.py
oder route53.py
, finden Sie den entsprechenden Code-Kommentar direkt unter der class
ProviderNameProvider
. Beispiel:
class Route53Provider(BaseProvider):
'''
AWS Route53 Provider
route53:
class: octodns.provider.route53.Route53Provider
# The AWS access key id
access_key_id:
# The AWS secret access key
secret_access_key:
# The AWS session token (optional)
# Only needed if using temporary security credentials
session_token:
Gehen Sie in das Verzeichnis ~/octodns/config
:
- cd ~/octodns/config
Erstellen und öffnen Sie config.yaml
zur Bearbeitung:
- nano config.yaml
Fügen Sie der Datei die Beispielkonfiguration config.yaml
für Ihren DNS-Provider hinzu. Wenn Sie DigitalOcean als Ihren DNS-Provider verwenden, können Sie Folgendes verwenden:
---
providers:
config:
class: octodns.provider.yaml.YamlProvider
directory: ./config
default_ttl: 300
enforce_order: True
digitalocean:
class: octodns.provider.digitalocean.DigitalOceanProvider
token: your-digitalocean-oauth-token
zones:
your-domain.:
sources:
- config
targets:
- digitalocean
Diese Datei teilt OctoDNS mit, mit welchen DNS-Providern es sich verbinden und welche DNS-Zonen es für diese Provider verwalten soll.
Sie müssen eine Form der Authentifizierung für Ihren DNS-Provider bereitstellen. Dies ist in der Regel ein API-Schlüssel oder ein OAuth-Token.
Wenn Sie Ihr Zugriffstoken nicht im Klartext in der Konfigurationsdatei speichern möchten, können Sie es stattdessen bei der Programmausführung als Umgebungsvariable übergeben. Dazu sollten Sie in config.yaml
stattdessen die folgende Zeile token:
verwenden:
token: env/DIGITALOCEAN\_OAUTH\_TOKEN
Setzen Sie dann vor der Ausführung von OctoDNS die entsprechende Umgebungsvariable auf Ihr Zugriffstoken und OctoDNS liest sie bei der Ausführung von dort aus:
- export DIGITALOCEAN\_OAUTH\_TOKEN=your-digitalocean-oauth-token
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 config.yaml
-Datei definieren.
Sie haben die anfängliche OctoDNS-Konfigurationsdatei eingerichtet, damit das Programm 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 Domainnamen oder Ihre delegierte DNS-Zone enthält.
Jede DNS-Zone, die Sie mit OctoDNS verwalten möchten, hat eine eigene Datei, z. B. your-domain.yaml
. In dieser Datei werden die DNS-Einträge für die Zone mit YAML definiert.
Wechseln Sie zunächst in das Verzeichnis ~/octodns/config
:
- cd ~/octodns/config
Erstellen und öffnen Sie dann your-domain.yaml
zur Bearbeitung:
- nano your-domain.yaml
Fügen Sie die folgende Beispielkonfiguration in die Datei ein:
---
'':
- type: A
value: your-server-ipv4-address
www:
- type: A
value: your-server-ipv4-address
Diese Beispieldatei definiert eine DNS-Zone für your-domain
mit zwei A
-Einträgen die auf die IPv4-Adresse verweisen, auf der Sie Ihre Domäne oder Website hosten. Ein A
-Eintrag ist für die Root-Domäne (z. B. your-domain
), und der andere ist für die www
subdomain (z. B. www.your-domain
).
Nach Abschluss speichern und schließen Sie die Datei.
Sie haben eine grundlegende DNS-Zonenkonfigurationsdatei für OctoDNS eingerichtet, mit zwei grundlegenden A
-Einträgen, die auf die IPv4-Adresse Ihrer Domäne oder Website verweisen. 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 einem praktischen Satz von DNS-Einträgen für Ihre Website oder Ihren Dienst mit der strukturierten Konfigurationssprache YAML füllen.
Im Gegensatz zu herkömmlichen BIND-Zonendateien, in denen DNS-Einträge in einem rohen, zeilenweisen Format geschrieben werden, werden DNS-Einträgen innerhalb von OctoDNS als YAML-Schlüssel und -Unterschlüssel mit einer Anzahl von assoziierten Werten definiert, wie es in Schritt 3 kurz gezeigt wird.
Der Top-Level-Schlüssel ist in der Regel der ‚name‘
, der im Wesentlichen die Eintragskennung darstellt. www
, subdomain1
und mail
sind Beispiele für DNS-‚name‘
. In OctoDNS gibt es zwei Namen für besondere Verwendungszwecke, nämlich ''
für den Root-Eintrag (gewöhnlich als @
bezeichnet) und '*'
für Wildcard-Einträge. Ein erforderlicher Wert für jeden Schlüssel (DNS-Eintrag) ist type
. Damit wird definiert, welche Art von DNS-Eintrag Sie innerhalb dieses YAML Top-Level-Schlüssels definieren. Es gibt für jeden der Standard-DNS-Eintragstypen einen Typ
, einschließlich A
, AAAA
, MX
, TXT
, NS
, CNAME
und so weiter. Eine vollständige Liste der verfügbaren Eintragstypen ist im Abschnitt Einträge in der OctoDNS-Dokumentation verfügbar.
Die Werte für Ihre DNS-Einträge werden entweder direkt als Werte für die Top-Level-Schlüssel (wenn Sie nur einen Wert haben) oder als Liste (wenn Sie mehrere Werte haben, z. B. mehrere IP-Adressen oder MX-Adressen) definiert.
Um z. B. einen einzigen Wert zu definieren, können Sie die folgende Konfiguration verwenden:
'www':
type: A
value: 203.0.113.1
Um mehrere Werte in einem einzigen Eintrag zu definieren:
'www':
type: A
values:
- 203.0.113.1
- 203.0.113.2
Die Syntax zur Einstellung von DNS-Einträgen variiert für jeden Datensatztyp leicht. Nachfolgend finden Sie einige Beispiele für die gängigsten Eintragstypen:
A
-Einträge:Zweck: Verweisen auf eine IPv4-Adresse.
Syntax:
'name':
type: A
value: ipv4-address
Beispiel:
'www':
type: A
value: your-server-ipv4-address
AAAA
-Einträge:Zweck: Verweisen auf eine IPv6-Adresse.
Syntax:
'name':
type: AAAA
value: ipv6-address
Beispiel:
'www':
type: AAAA
value: your-server-ipv6-address
CNAME
-Einträge:Zweck: Um Ihre Domäne/Subdomäne zu einem Alias einer anderen zu machen.
Syntax:
'name':
type: CNAME
value: fully-qualified-domain-name
Beispiel:
'www':
type: CNAME
value: www.example.org
MX
-Einträge:Zweck: Um E-Mail an bestimmte Server/Adressen zu leiten.
Syntax:
'name':
type: MX
value:
exchange: mail-server
preference: priority-value
Beachten Sie, dass ein nachgestellter .
enthalten sein muss, wenn in den MX-Werten Punkte vorhanden sind.
Beispiel:
'':
type: MX
value:
exchange: mail.your-domain.
preference: 10
TXT
-Einträge:Zweck: Hinzufügen von beliebigem Klartext, der oft für Konfigurationen ohne eigenen dedizierten Eintragstyp verwendet wird.
Syntax:
'name':
type: TXT
value: content
Beispiel:
'':
type: TXT
value: This is a TXT record.
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:
- cd ~/octodns/config
- nano your-domain.yaml
Als Nächstes können Sie damit beginnen, Ihre DNS-Zone mit der in der vorherigen Liste sowie dem Abschnitt Einträge der offiziellen OctoDNS-Dokumentation beschriebenen Syntax zu füllen.
Als Referenz enthält der Codeblock hier eine vollständige Beispielkonfiguration für eine erste DNS-Ersteinrichtung:
---
'':
- type: A
value: your-server-ipv4-address
- type: AAAA
value: your-server-ipv6-address
- type: MX
value:
exchange: mail.your-domain.
preference: 10
- type: TXT
value: v=spf1 -all
_dmarc:
type: TXT
value: v=DMARC1\; p=reject\; rua=mailto:abuse@your-domain\; aspf=s\; adkim=s\;
mail:
- type: A
value: your-server-ipv4-address
- type: AAAA
value: your-server-ipv6-address
www:
- type: A
value: your-server-ipv4-address
- type: AAAA
value: your-server-ipv6-address
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 octodns
:
- cd ~/octodns
Vergewissern Sie sich, dass Sie immer noch innerhalb Ihrer Python virtualenv
arbeiten, indem Sie vor der Bash-Eingabeaufforderung nach ihrem Namen suchen:
(env) user@digitalocean:~/octodns$
Verwenden Sie als Nächstes den Befehl octodns-validate
, um die Syntax Ihrer Konfigurationsdatei(en) zu überprüfen. Sie müssen den Pfad zu Ihrer Konfigurationsdatei angeben:
- octodns-validate --config=./config/config.yaml
Wenn die Syntax von YAML Ihrer DNS-Konfigurationsdatei korrekt ist, wird OctoDNS keine Ausgabe zurückgegeben. Wenn Sie eine Fehlerwarnung in Ihrer Ausgabe sehen, stellt OctoDNS Details dazu bereit, was der Fehler ist und wo er sich innerhalb Ihrer YAML-Datei befindet.
Als Nächstes können Sie einen Probelauf der DNS-Konfiguration durchführen, der ausgibt, welche Änderungen vorgenommen werden, ohne diese tatsächlich durchzuführen:
- octodns-sync --config=./config/config.yaml
Dies sollte zu einer ähnlichen Ausgabe führen wie die folgende:
Output********************************************************************************
* your-domain.
********************************************************************************
* digitalocean (DigitalOceanProvider)
* Create <ARecord A 300, mail.your-domain., ['your-server-ipv4-address']> (config)
* Create <AaaaRecord AAAA 300, mail.your-domain., ['your-server-ipv6-address']> (config)
* Create <TxtRecord TXT 300, your-domain., ['v=spf1 -all']> (config)
* Create <AaaaRecord AAAA 300, your-domain., ['your-server-ipv6-address']> (config)
* Create <ARecord A 300, your-domain., ['your-server-ipv4-address']> (config)
* Create <ARecord A 300, www.your-domain., ['your-server-ipv4-address']> (config)
* Create <MxRecord MX 300, your-domain., [''10 mail.your-domain.'']> (config)
* Create <TxtRecord TXT 300, _dmarc.your-domain., ['v=DMARC1\; p=reject\; rua=mailto:abuse@your-domain\; aspf=s\; adkim=s\;']> (config)
* Create <AaaaRecord AAAA 300, www.your-domain., ['your-server-ipv6-address']> (config)
* Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2
********************************************************************************
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:
- octodns-sync --config=./config/config.yaml --doit
Anmerkung: In einigen Fällen wird OctoDNS sich weigern, Änderungen mithilfe von Push zu übertragen, wenn es eine erhebliche Anzahl von Anpassungen vornimmt. Dies ist eine automatische Schutzfunktion, um versehentliche Fehlkonfigurationen zu verhindern. Wenn Sie auf diese Verweigerung stoßen, können Sie OctoDNS-sync
mit der Option --force
erneut ausführen, aber stellen Sie bitte sicher, dass Sie dazu bereit sind.
Sie werden eine Ausgabe sehen, die derjenigen des Probelaufs in diesem Schritt ähnelt, jedoch mit einem Zusatz, der dem folgenden ähnelt:
Output2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes
2019-07-07T23:17:30 INFO Manager sync: 9 total changes
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 OtoDNS 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 OctoDNS 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 OcotDNS 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 OctoDNS in Ihre Infrastruktur-Building-/Bereitstellungsprozesse befassen, sodass Sie Server bereitstellen und diese vollständig automatisch zu DNS hinzufügen können.
Wenn Sie mit OctoDNS noch weiter gehen möchten, bieten die folgenden DigitalOcean-Artikel einige interessante nächste Schritte zur Integration von OctoDNS in Ihre Änderungsverwaltung- und Infrastrukturbereitstellungs-Workflows:
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!