DNS verwalten mit DNSControl
Erfahren Sie, wie Sie Ihre DNS-Zonen und -Einträge als Code mit DNSControl und dem DNScale-Provider verwalten. Definieren Sie Ihre gesamte DNS-Konfiguration in JavaScript.
DNSControl ermöglicht die DNS-Verwaltung über eine JavaScript-basierte Konfigurationsdatei. Sie definieren Ihre Zonen und Einträge in dnsconfig.js, prüfen Änderungen mit dnscontrol preview und wenden sie mit dnscontrol push an. Der DNScale-Provider integriert sich direkt mit der DNScale-API und gibt Ihnen die volle Kontrolle über Ihre DNS-Infrastruktur als Code.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- DNSControl installiert (Version 4.0 oder neuer) - DNSControl installieren
- Ein DNScale-Konto mit einem API-Schlüssel - API-Schlüssel erhalten
- Grundlegende Vertrautheit mit JavaScript-Syntax
Einrichtung
DNSControl verwendet eine creds.json-Datei für Provider-Anmeldedaten. Erstellen Sie diese Datei in Ihrem Projektverzeichnis:
{
"dnscale": {
"TYPE": "DNSCALE",
"api_key": "your-api-key-here"
}
}Der Provider verbindet sich standardmäßig mit https://api.dnscale.eu/v1. Um einen benutzerdefinierten API-Endpunkt zu verwenden, fügen Sie api_url hinzu:
{
"dnscale": {
"TYPE": "DNSCALE",
"api_key": "your-api-key-here",
"api_url": "https://custom-api.example.com/v1"
}
}Halten Sie creds.json aus der Versionskontrolle heraus. Fügen Sie sie zu Ihrer .gitignore hinzu:
echo "creds.json" >> .gitignoreIhre erste Zone erstellen
Erstellen Sie eine dnsconfig.js-Datei mit einer einfachen Zonendefinition:
var REG_NONE = NewRegistrar("none");
var DSP_DNSCALE = NewDnsProvider("dnscale");
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", "192.0.2.1"),
A("www", "192.0.2.1")
);Diese Konfiguration:
- Deklariert den DNScale-Provider mit Anmeldedaten aus
creds.json - Erstellt eine Zone für
example.com - Fügt zwei A-Einträge hinzu: einen am Apex (
@) und einen fürwww
Wenn Sie dnscontrol push ausführen, erstellt DNScale die Zone automatisch, falls sie noch nicht existiert.
DNS-Einträge verwalten
A-Einträge
Hostnamen auf IPv4-Adressen verweisen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", "192.0.2.1"),
A("www", "192.0.2.1"),
A("api", "192.0.2.10", TTL(300))
);AAAA-Einträge
IPv6-Unterstützung hinzufügen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
AAAA("@", "2001:db8::1"),
AAAA("www", "2001:db8::1")
);CNAME-Einträge
Aliase für Subdomains erstellen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
CNAME("blog", "example.github.io."),
CNAME("docs", "readthedocs.io.")
);ALIAS-Einträge
ALIAS für CNAME-ähnliches Verhalten auf Apex-Ebene verwenden:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
ALIAS("@", "loadbalancer.example.net.")
);MX-Einträge
E-Mail-Zustellung konfigurieren:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
MX("@", 10, "mail.example.com."),
MX("@", 20, "mail2.example.com.")
);TXT-Einträge
SPF-, DKIM- oder Verifizierungseinträge hinzufügen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
TXT("@", "v=spf1 include:_spf.google.com ~all"),
TXT("@", "google-site-verification=abc123"),
TXT("_dmarc", "v=DMARC1; p=reject; rua=mailto:dmarc@example.com")
);CAA-Einträge
Steuern, welche Zertifizierungsstellen Zertifikate für Ihre Domain ausstellen dürfen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
CAA("@", "issue", "letsencrypt.org"),
CAA("@", "issuewild", "letsencrypt.org"),
CAA("@", "iodef", "mailto:security@example.com")
);SRV-Einträge
Dienststandorte definieren:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
SRV("_sip._tcp", 10, 60, 5060, "sip.example.com.")
);PTR-Einträge
Reverse-DNS-Einträge erstellen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
PTR("1", "server.example.com.")
);SSHFP-Einträge
SSH-Host-Schlüssel-Fingerabdrücke veröffentlichen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
SSHFP("@", 1, 1, "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3")
);TLSA-Einträge
TLS-Zertifikate mit Domainnamen verknüpfen:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
TLSA("_443._tcp", 3, 1, 1, "abc123def456...")
);HTTPS- und SVCB-Einträge
Service-Binding für moderne HTTPS-Verbindungen konfigurieren:
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
HTTPS("@", 1, ".", "alpn=h2,h3"),
SVCB("_dns.resolver", 1, "dns.example.com.", "alpn=dot")
);Erweiterte Konfiguration
Mehrere Domains
Mehrere Domains in einer Konfigurationsdatei verwalten:
var REG_NONE = NewRegistrar("none");
var DSP_DNSCALE = NewDnsProvider("dnscale");
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", "192.0.2.1"),
A("www", "192.0.2.1"),
MX("@", 10, "mail.example.com.")
);
D("example.org", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", "192.0.2.2"),
CNAME("www", "example.org.")
);
D("example.net", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", "192.0.2.3"),
CNAME("www", "example.net.")
);Variablen verwenden
Da dnsconfig.js JavaScript ist, können Sie Variablen nutzen, um Wiederholungen zu reduzieren:
var REG_NONE = NewRegistrar("none");
var DSP_DNSCALE = NewDnsProvider("dnscale");
var WEBSERVER_IP = "192.0.2.1";
var MAIL_SERVERS = [
MX("@", 10, "mx1.mailprovider.com."),
MX("@", 20, "mx2.mailprovider.com.")
];
var SPF = TXT("@", "v=spf1 include:_spf.mailprovider.com ~all");
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", WEBSERVER_IP),
A("www", WEBSERVER_IP),
MAIL_SERVERS,
SPF
);
D("example.org", REG_NONE, DnsProvider(DSP_DNSCALE),
A("@", WEBSERVER_IP),
A("www", WEBSERVER_IP),
MAIL_SERVERS,
SPF
);Makros mit Funktionen
Wiederverwendbare Eintragsmuster mit JavaScript-Funktionen erstellen:
function WEBSITE(ip) {
return [
A("@", ip),
A("www", ip),
AAAA("@", "2001:db8::1"),
AAAA("www", "2001:db8::1")
];
}
function GOOGLE_WORKSPACE() {
return [
MX("@", 1, "aspmx.l.google.com."),
MX("@", 5, "alt1.aspmx.l.google.com."),
MX("@", 5, "alt2.aspmx.l.google.com."),
TXT("@", "v=spf1 include:_spf.google.com ~all")
];
}
D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
WEBSITE("192.0.2.1"),
GOOGLE_WORKSPACE()
);Preview- und Push-Workflow
DNSControl verwendet einen zweistufigen Workflow: Zuerst Änderungen prüfen, dann anwenden.
Änderungen prüfen
dnscontrol previewDies verbindet sich mit der DNScale-API, vergleicht Ihre dnsconfig.js mit den aktuellen Live-Einträgen und zeigt, was sich ändern würde:
******************** Domain: example.com
1 correction (dnscale)
#1: CREATE A www.example.com 192.0.2.1 ttl=3600Änderungen anwenden
Wenn Sie mit der Vorschau zufrieden sind, wenden Sie die Änderungen an:
dnscontrol push******************** Domain: example.com
1 correction (dnscale)
#1: CREATE A www.example.com 192.0.2.1 ttl=3600
Done. 1 correction.Best Practices
Konfiguration versionieren
Behalten Sie dnsconfig.js in Git, um jede DNS-Änderung nachzuverfolgen:
git init
echo "creds.json" >> .gitignore
git add dnsconfig.js .gitignore
git commit -m "Initial DNS configuration"Immer Preview vor Push
Führen Sie vor jedem dnscontrol push ein dnscontrol preview aus. Dies fängt Fehler ab, bevor sie das Live-DNS beeinflussen.
CI/CD für automatisierte Deployments nutzen
Integrieren Sie DNSControl in Ihre CI/CD-Pipeline. Führen Sie preview bei Pull Requests und push beim Merge nach main aus:
# .github/workflows/dns.yml
name: DNS
on:
pull_request:
paths: ["dnsconfig.js"]
push:
branches: [main]
paths: ["dnsconfig.js"]
jobs:
dns:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install DNSControl
run: |
curl -sL https://github.com/StackExchange/dnscontrol/releases/latest/download/dnscontrol-Linux -o dnscontrol
chmod +x dnscontrol
- name: Preview
if: github.event_name == 'pull_request'
run: ./dnscontrol preview
env:
DNSCALE_API_KEY: ${{ secrets.DNSCALE_API_KEY }}
- name: Push
if: github.ref == 'refs/heads/main'
run: ./dnscontrol push
env:
DNSCALE_API_KEY: ${{ secrets.DNSCALE_API_KEY }}Anmeldedaten sicher aufbewahren
Committen Sie niemals creds.json. Verwenden Sie Umgebungsvariablen oder einen Secrets-Manager in CI/CD.
Vollständiges Beispiel
Hier ist eine vollständige dnsconfig.js für eine typische Website mit E-Mail:
var REG_NONE = NewRegistrar("none");
var DSP_DNSCALE = NewDnsProvider("dnscale");
var SERVER_IP = "203.0.113.50";
D("mywebsite.com", REG_NONE, DnsProvider(DSP_DNSCALE),
// Website
A("@", SERVER_IP),
AAAA("@", "2001:db8::50"),
CNAME("www", "mywebsite.com."),
// API-Subdomain
A("api", "203.0.113.51", TTL(300)),
// E-Mail (Google Workspace)
MX("@", 1, "aspmx.l.google.com."),
MX("@", 5, "alt1.aspmx.l.google.com."),
MX("@", 5, "alt2.aspmx.l.google.com."),
MX("@", 10, "alt3.aspmx.l.google.com."),
MX("@", 10, "alt4.aspmx.l.google.com."),
// E-Mail-Sicherheit
TXT("@", "v=spf1 include:_spf.google.com ~all"),
TXT("_dmarc", "v=DMARC1; p=reject; rua=mailto:dmarc@mywebsite.com"),
// Zertifizierungsstellenautorisierung
CAA("@", "issue", "letsencrypt.org"),
CAA("@", "issuewild", "letsencrypt.org"),
// HTTPS-Service-Binding
HTTPS("@", 1, ".", "alpn=h2,h3")
);Nächste Schritte
- Lesen Sie die DNSControl-Dokumentation für die vollständige Konfigurationsreferenz
- Erfahren Sie mehr über die von DNScale unterstützten DNS-Eintragstypen
- Verstehen Sie DNS-Zonen und wie sie funktionieren
- Erkunden Sie Zonen-Import-Methoden für die Migration vorhandener DNS-Konfigurationen
- Richten Sie E-Mail-Sicherheit mit SPF, DKIM und DMARC ein
Fazit
DNSControl bringt DNS-as-Code in Ihren Workflow mit einer unkomplizierten JavaScript-Konfiguration. Kombiniert mit dem DNScale-Provider erhalten Sie versionskontrollierte DNS-Änderungen, sichere Preview-vor-Push-Workflows und die Möglichkeit, mehrere Domains aus einer einzigen Datei zu verwalten. Ob Sie eine Domain oder Hunderte verwalten — DNSControl bietet die Werkzeuge, um es zuverlässig und skalierbar zu tun.
dnscontrol push — starten Sie noch heute.