Neu: PostScale -- E-Mail-API für transaktionale, eingehende und maskierte Adressen. PostScale

    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:

    1. DNSControl installiert (Version 4.0 oder neuer) - DNSControl installieren
    2. Ein DNScale-Konto mit einem API-Schlüssel - API-Schlüssel erhalten
    3. 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" >> .gitignore

    Ihre 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ür www

    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 preview

    Dies 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

    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.