Der Autor hat die Electronic Frontier Foundation ausgewählt, um eine Spende im Rahmen der Write for zu erhalten DOnations program.
Einführung
OctoDNS 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. OctoDNS wurde von GitHub erstellt und ist in Python geschrieben.
Durch die Verwendung von OctoDNS werden viele Probleme der manuellen DNS-Verwaltung beseitigt, da Zonendateien in einem strukturierten Format gespeichert werden (YAML). 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 OctoDNS ist die Synchronisierung Ihrer DNS-Konfiguration zwischen verschiedenen Anbietern, z. B. einem Test- und Produktionssystem, oder zwischen Live- und Failover-Umgebungen.
OctoDNS ähnelt DNSControl, einem äquivalenten Tool, das von Stack Exchange erstellt und in Go geschrieben wurde. Im Gegensatz zu OctoDNS verwendet DNSControl eine JavaScript-basierte Konfigurationssprache zum Definieren von DNS-Zonen, mit der Sie erweiterte programmgesteuerte Funktionen wie Schleifen verwenden können, um mehrere ähnliche Datensätze in derselben Zone anzugeben. In dem Artikel https://www.digitalocean.com/community/tutorials/how-to-deploy-and-manage-your-dns-using-dnscontrol-on-ubuntu-18-04 wird beschrieben, wie Sie DNS mithilfe von bereitstellen und verwalten DNSControl unter Ubuntu 18.04] behandelt die grundlegende Einrichtung und Konfiguration von DNSControl.
In diesem Lernprogramm installieren und konfigurieren Sie OctoDNS, 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. "" und "" beziehen sich auf die IP-Adressen 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 - OctoDNS installieren
OctoDNS wird als Python-Pip-Paket verteilt und in einer virtuellen Python-Umgebung (https://virtualenv.pypa.io/en/latest/ [+ virtualenv +
]) ausgeführt. Beginnen Sie diesen Schritt mit der Installation der Pakete erforderlich dafür. Ein "+ virtualenv " ist eine isolierte Python-Umgebung, die unabhängig von der systemweiten Python-Hauptinstallation ihre eigenen Bibliotheken und Konfigurationen haben kann. Python und " virtualenv +" sind in den Standard-Software-Repositorys von Ubuntu verfügbar, sodass die Installation mit herkömmlichen Paketverwaltungstools möglich ist.
Aktualisieren Sie zunächst den lokalen Paketindex, um alle neuen Upstream-Änderungen widerzuspiegeln:
sudo apt update
Dann installieren Sie die Pakete + python
und` + virtualenv`:
sudo apt install python virtualenv
Nach Bestätigung der Installation lädt "+ apt " Python, " virtualenv +" und alle erforderlichen Abhängigkeiten herunter und installiert sie.
Als Nächstes erstellen Sie die erforderlichen Verzeichnisse für OctoDNS, in denen Ihre DNS- und Programmkonfiguration gespeichert wird. Beginnen Sie, indem Sie die Verzeichnisse + ~ / octodns +
und + ~ / octodns / config +
erstellen:
mkdir ~/octodns ~/octodns/config
Bewegen Sie sich nun nach + ~ / octodns +
:
cd ~/octodns
Als Nächstes müssen Sie die virtuelle Python-Umgebung erstellen - eine isolierte Python-Umgebung mit eigenen Bibliotheken und Konfigurationen, in der OctoDNS ausgeführt wird:
virtualenv
Aktivieren Sie Ihre Umgebung mit dem folgenden Befehl:
source /bin/activate
Dies wird etwas Ähnliches wie das Folgende ausgeben:
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.
Der Bash-Shell-Eingabeaufforderung wird jetzt auch der Name der virtuellen Umgebung vorangestellt. Dies zeigt, dass Sie derzeit im + virtualenv +
arbeiten:
(env) user@digitalocean:~/octodns$
Wenn Sie "+ virtualenv " beenden möchten, können Sie jederzeit den Befehl " disable " verwenden. Sie sollten jedoch in Ihrem " virtualenv +" bleiben, um mit diesem Tutorial fortzufahren.
Nachdem Sie Python und "+ virtualenv +" installiert und konfiguriert haben, können Sie OctoDNS installieren. OctoDNS wird als Python-Pip-Paket verteilt. Dies ist das Standard-Paketverwaltungstool für Python-Pakete und -Bibliotheken.
Sie können das OctoDNS-Pip-Paket mit dem folgenden Befehl in Ihrem + 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 sieht ungefähr so aus:
OutputoctoDNS
Wenn Sie den Fehler "+ octodns-sync: Befehl nicht gefunden" sehen, überprüfen Sie noch einmal, ob Sie sich noch in Ihrem "+ virtualenv" befinden.
Nachdem Sie OctoDNS installiert haben, können Sie die erforderlichen Konfigurationsdateien erstellen, um OctoDNS mit Ihrem DNS-Anbieter zu verbinden und Änderungen an Ihren DNS-Einträgen vorzunehmen.
Schritt 2 - OctoDNS konfigurieren
In diesem Schritt erstellen Sie die erforderlichen Konfigurationsdateien für OctoDNS und stellen eine Verbindung zu Ihrem DNS-Anbieter her, damit Änderungen an Ihren DNS-Einträgen live vorgenommen werden können.
Zunächst müssen Sie die Datei "+ config.yaml +" konfigurieren, die die DNS-Zonen für die Verwaltung von OctoDNS definiert und die Authentifizierung bei Ihrem DNS-Anbieter und das Vornehmen von Änderungen ermöglicht.
Das Format von "+ config.yaml " unterscheidet sich geringfügig je nach verwendetem DNS-Anbieter. Informationen zur Konfiguration Ihres eigenen Providers finden Sie in der offiziellen OctoDNS-Dokumentation unter https://github.com/github/octodns#supported-providers[Supported Providers list]. Wenn Sie diesen Hyperlink anzeigen, werden die Konfigurationsdetails als Codekommentar im tatsächlichen Python-Code Ihres Providers angezeigt, der in der Spalte "Provider" der Tabelle verlinkt ist. Sobald Sie den Python-Code für Ihren Provider gefunden haben, z. B. " cloudflare.py " oder " route53.py ", finden Sie den entsprechenden Code-Kommentar direkt unter " class +" + Provider + ". Zum Beispiel:
Auszug aus octodns / provider / route53.py
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:
Wechseln Sie in das Verzeichnis + ~ / octodns / config +
:
cd ~/octodns/config
Dann erstelle und öffne + config.yaml +
zum Bearbeiten:
nano config.yaml
Fügen Sie der Datei die Beispielkonfiguration "+ config.yaml +" für Ihren DNS-Anbieter hinzu. Wenn Sie DigitalOcean als DNS-Anbieter verwenden, können Sie Folgendes verwenden:
~ /octodns/config/config.yaml
---
providers:
config:
class: octodns.provider.yaml.YamlProvider
directory: ./config
default_ttl: 300
enforce_order: True
digitalocean:
class: octodns.provider.digitalocean.DigitalOceanProvider
token:
zones:
.:
sources:
- config
targets:
- digitalocean
Diese Datei teilt OctoDNS mit, mit welchen DNS-Anbietern eine Verbindung hergestellt werden soll und welche DNS-Zonen für diese Anbieter verwaltet werden sollen.
Sie müssen eine Art Authentifizierung für Ihren DNS-Anbieter bereitstellen. Dies ist normalerweise 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 als Umgebungsvariable übergeben, wenn das Programm ausgeführt wird. Verwenden Sie dazu in + config.yaml +
die folgende + token: +
Zeile:
~ /octodns/config/config.yaml
token: env/DIGITALOCEAN\_OAUTH\_TOKEN
Setzen Sie dann vor dem Ausführen von OctoDNS die entsprechende Umgebungsvariable auf Ihr Zugriffstoken, und OctoDNS liest sie beim Ausführen von dort aus:
export DIGITALOCEAN\_OAUTH\_TOKEN=
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 "+ config.yaml +" definieren.
Sie haben die anfängliche OctoDNS-Konfigurationsdatei eingerichtet, damit sich das Programm 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.
Jede DNS-Zone, die Sie mit OctoDNS verwalten möchten, verfügt über eine eigene Datei, z. B. "+ .yaml +". In dieser Datei werden die DNS-Einträge für die Zone mithilfe von YAML definiert.
Wechseln Sie zunächst in das Verzeichnis + ~ / octodns / config +
:
cd ~/octodns/config
Dann erstelle und öffne + .yaml +
zum Bearbeiten:
nano .yaml
Fügen Sie der Datei die folgende Beispielkonfiguration hinzu:
~ / octodns / config / your-domain.yaml
---
'':
- type: A
value:
www:
- type: A
value:
Diese Beispieldatei definiert eine DNS-Zone für "" mit zwei "+ A +" - Einträgen, die auf die IPv4-Adresse verweisen, unter der Sie Ihre Domain oder Website hosten. Ein "+ A +" - Datensatz ist für die Stammdomäne (z. `) und das andere ist für die Subdomain `+ www +
(z. + www. +
).
Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Sie haben eine grundlegende DNS-Zonenkonfigurationsdatei für OctoDNS eingerichtet, in der zwei grundlegende "+ A +" - Einträge auf die IPv4-Adresse Ihrer Domain oder Website verweisen. Als Nächstes erweitern 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 mit einem praktischen Satz von DNS-Einträgen für Ihre Website oder Ihren Dienst unter Verwendung der strukturierten YAML-Konfigurationssprache füllen.
Im Gegensatz zu herkömmlichen BIND-Zonendateien, bei denen DNS-Einträge in einem unformatierten zeilenweisen Format geschrieben werden, werden DNS-Einträge in OctoDNS als YAML-Schlüssel und Unterschlüssel mit einem definiert Anzahl zugehöriger Werte, wie in Schritt 3 kurz dargestellt.
Der Schlüssel der obersten Ebene ist normalerweise der "" Name "", der im Wesentlichen die Datensatzkennung ist. "+ www", "+ subdomain 1" und "+ mail " sind Beispiele für DNS "" name "". In OctoDNS gibt es zwei spezielle Namen: "" + "für den Stammdatensatz (normalerweise als" + @ + "bezeichnet) und" + "*" + "für Platzhalterdatensätze. Ein erforderlicher Wert für jeden Schlüssel (DNS-Eintrag) ist "+ type ". Hiermit wird festgelegt, welche Art von DNS-Eintrag Sie in diesem YAML-Schlüssel der obersten Ebene definieren. Für jeden der Standard-DNS-Eintragstypen ist ein "" vorhanden, einschließlich "+ A ", " AAA ", " MX", "+ TXT", "+ N ", " CNAME" usw. Eine vollständige Liste der verfügbaren Datensatztypen finden Sie im Abschnitt Records der OctoDNS-Dokumentation.
Die Werte für Ihre DNS-Einträge werden entweder direkt als Werte für die Schlüssel der obersten Ebene (wenn Sie nur einen Wert haben) oder als Liste (wenn Sie mehrere Werte haben, z. mehrere IP-Adressen oder MX-Adressen).
Um beispielsweise einen einzelnen Wert zu definieren, können Sie die folgende Konfiguration verwenden:
~ / octodns / config / your-domain.yaml
'www':
type: A
value: 203.0.113.1
Alternativ können Sie mehrere Werte für einen einzelnen Datensatz definieren:
~ / octodns / config / your-domain.yaml
'www':
type: A
values:
- 203.0.113.1
- 203.0.113.2
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:
'':
type: A
value:
Beispiel:
'':
type: A
value:
+ AAAA +
Datensätze:
Zweck: Verweisen auf eine IPv6-Adresse.
Syntax:
'':
type: AAAA
value:
Beispiel:
'':
type: AAAA
value:
+ CNAME +
Datensätze:
Zweck: Um Ihre Domain / Subdomain zu einem Alias eines anderen zu machen.
Syntax:
'':
type: CNAME
value:
Beispiel:
'':
type: CNAME
value:
+ MX +
Datensätze:
Zweck: Um E-Mails an bestimmte Server / Adressen weiterzuleiten.
Syntax:
'':
type: MX
value:
exchange:
preference:
Beachten Sie, dass ein abschließendes "+. +" * Enthalten sein muss, wenn der MX-Wert Punkte enthält.
Beispiel:
'':
type: MX
value:
exchange: .
preference:
+ TXT +
Datensätze:
Zweck: Hinzufügen von beliebigem Klartext, der häufig für Konfigurationen ohne eigenen Datensatztyp verwendet wird.
Syntax:
'':
type: TXT
value:
Beispiel:
'':
type: TXT
value:
Bearbeiten Sie die DNS-Konfigurationsdatei, um DNS-Einträge für Ihre Domain oder delegierte DNS-Zone hinzuzufügen:
cd ~/octodns/config
nano .yaml
Als Nächstes können Sie Ihre DNS-Zone mit der in der vorherigen Liste beschriebenen Syntax sowie im Abschnitt Records des Beamten auffüllen OctoDNS-Dokumentation.
Als Referenz enthält der Codeblock hier eine vollständige Beispielkonfiguration für ein erstes DNS-Setup:
~ / octodns / config / your-domain.yaml
---
'':
- type: A
value:
- type: AAAA
value:
- type: MX
value:
exchange: mail..
preference: 10
- type: TXT
value: v=spf1 -all
_dmarc:
type: TXT
value: v=DMARC1\; p=reject\; rua=mailto:abuse@\; aspf=s\; adkim=s\;
mail:
- type: A
value:
- type: AAAA
value:
www:
- type: A
value:
- type: AAAA
value:
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 + octodns +
:
cd ~/octodns
Überprüfen Sie, ob Sie noch in Ihrem Python "+ virtualenv +" arbeiten, indem Sie vor der Bash-Eingabeaufforderung nach dem Namen suchen:
(env) user@digitalocean:~/octodns$
Verwenden Sie anschließend 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 YAML-Syntax Ihrer DNS-Konfigurationsdatei korrekt ist, wird OctoDNS ohne Ausgabe zurückgegeben.
Wenn in Ihrer Ausgabe ein Fehler oder eine Warnung angezeigt wird, informiert OctoDNS Sie darüber, wo und wo sich der Fehler in Ihrer YAML-Datei befindet.
Als Nächstes können Sie einen Testlauf der DNS-Konfiguration durchführen, der ausgibt, welche Änderungen vorgenommen werden, ohne sie tatsächlich vorzunehmen:
octodns-sync --config=./config/config.yaml
Dies sollte eine Ausgabe ähnlich der folgenden ergeben:
Output********************************************************************************
* .
********************************************************************************
* digitalocean (DigitalOceanProvider)
* Create <ARecord A 300, mail.., ['']> (config)
* Create <AaaaRecord AAAA 300, mail.., ['']> (config)
* Create <TxtRecord TXT 300, ., ['v=spf1 -all']> (config)
* Create <AaaaRecord AAAA 300, ., ['']> (config)
* Create <ARecord A 300, ., ['']> (config)
* Create <ARecord A 300, www.., ['']> (config)
* Create <MxRecord MX 300, ., [''10 mail..'']> (config)
* Create <TxtRecord TXT 300, _dmarc.., ['v=DMARC1\; p=reject\; rua=mailto:abuse@\; aspf=s\; adkim=s\;']> (config)
* Create <AaaaRecord AAAA 300, www.., ['']> (config)
* Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2
********************************************************************************
Abschließend können Sie die Änderungen an Ihren Live-DNS-Anbieter senden:
octodns-sync --config=./config/config.yaml --doit
In diesem Schritt sehen Sie eine Ausgabe wie die im Probelauf, jedoch mit etwas Ähnlichem wie der folgenden:
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 Domain in der DigitalOcean-Systemsteuerung überprüfen, werden die Änderungen angezeigt.
image: https://assets.digitalocean.com/articles/dnscontrols1804/step5.png [Ein Screenshot des DigitalOcean-Kontrollfelds, in dem einige der von OctoDNS vorgenommenen DNS-Änderungen dargestellt sind.]
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
In der Ausgabe werden die IP-Adresse und der relevante DNS-Eintrag aus Ihrer Zone angezeigt, die mit OctoDNS 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 OctoDNS 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, kann OctoDNS in Ihre CI / CD-Pipeline integriert werden. Auf diese Weise können Sie eingehende Tests durchführen und die Bereitstellung in der Produktion besser steuern. Sie können auch OctoDNS in Ihre Infrastrukturerstellungs- / Bereitstellungsprozesse integrieren, um Server bereitzustellen und diese vollständig automatisch zu DNS hinzuzufügen.
Wenn Sie OctoDNS weiterentwickeln möchten, finden Sie in den folgenden DigitalOcean-Artikeln einige interessante weitere Schritte zur Integration von OctoDNS in Ihre Workflows für das Änderungsmanagement und die Bereitstellung von Infrastrukturen:
-
https://www.digitalocean.com/community/tutorials/andereEinführung-in-kontinuierliche-Integration-Lieferung-und-BereitstellungsprozesseEinführung in die kontinuierliche Integration, Bereitstellung und Bereitstellung]
-
CI/CD Tools-Vergleich: Jenkins, GitLab CI, Buildbot, Drone und Zusammentreffen