Maak kennis met PostScale -- e-mail-API voor transactionele, inkomende en gemaskeerde adressen. PostScale

    DNS beheren met DNSControl

    Leer hoe je je DNS-zones en -records als code beheert met DNSControl en de DNScale-provider. Definieer je volledige DNS-configuratie in JavaScript.

    DNSControl laat je DNS beheren met een JavaScript-gebaseerd configuratiebestand. Je definieert je zones en records in dnsconfig.js, bekijkt wijzigingen vooraf met dnscontrol preview en past ze toe met dnscontrol push. De DNScale-provider integreert rechtstreeks met de DNScale API, waardoor je volledige controle hebt over je DNS-infrastructuur als code.

    Vereisten

    Voordat je begint, zorg dat je het volgende hebt:

    1. DNSControl geinstalleerd (versie 4.0 of hoger) - DNSControl installeren
    2. Een DNScale-account met een API-sleutel - Haal je API-sleutel op
    3. Basiskennis van JavaScript-syntax

    Configuratie

    DNSControl gebruikt een creds.json-bestand voor providerreferenties. Maak dit bestand aan in je projectmap:

    {
      "dnscale": {
        "TYPE": "DNSCALE",
        "api_key": "your-api-key-here"
      }
    }

    De provider maakt standaard verbinding met https://api.dnscale.eu/v1. Om een aangepast API-endpoint te gebruiken, voeg api_url toe:

    {
      "dnscale": {
        "TYPE": "DNSCALE",
        "api_key": "your-api-key-here",
        "api_url": "https://custom-api.example.com/v1"
      }
    }

    Houd creds.json buiten versiebeheer. Voeg het toe aan je .gitignore:

    echo "creds.json" >> .gitignore

    Je eerste zone aanmaken

    Maak een dnsconfig.js-bestand met een basale zonedefinitie:

    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")
    );

    Deze configuratie:

    • Declareert de DNScale-provider met referenties uit creds.json
    • Maakt een zone aan voor example.com
    • Voegt twee A-records toe: een op het apex (@) en een voor www

    Wanneer je dnscontrol push uitvoert, maakt DNScale de zone automatisch aan als deze nog niet bestaat.

    DNS-records beheren

    A-records

    Wijs hostnamen naar IPv4-adressen:

    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-records

    Voeg IPv6-ondersteuning toe:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      AAAA("@", "2001:db8::1"),
      AAAA("www", "2001:db8::1")
    );

    CNAME-records

    Maak aliassen voor subdomeinen:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      CNAME("blog", "example.github.io."),
      CNAME("docs", "readthedocs.io.")
    );

    ALIAS-records

    Gebruik ALIAS voor CNAME-achtig gedrag op apex-niveau:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      ALIAS("@", "loadbalancer.example.net.")
    );

    MX-records

    Configureer e-mailbezorging:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      MX("@", 10, "mail.example.com."),
      MX("@", 20, "mail2.example.com.")
    );

    TXT-records

    Voeg SPF-, DKIM- of verificatierecords toe:

    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-records

    Bepaal welke certificaatautoriteiten certificaten mogen uitgeven voor je domein:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      CAA("@", "issue", "letsencrypt.org"),
      CAA("@", "issuewild", "letsencrypt.org"),
      CAA("@", "iodef", "mailto:security@example.com")
    );

    SRV-records

    Definieer servicelocaties:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      SRV("_sip._tcp", 10, 60, 5060, "sip.example.com.")
    );

    PTR-records

    Maak reverse DNS-entries aan:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      PTR("1", "server.example.com.")
    );

    SSHFP-records

    Publiceer SSH-hostsleutelfingerprints:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      SSHFP("@", 1, 1, "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3")
    );

    TLSA-records

    Koppel TLS-certificaten aan domeinnamen:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      TLSA("_443._tcp", 3, 1, 1, "abc123def456...")
    );

    HTTPS- en SVCB-records

    Configureer service binding voor moderne HTTPS-verbindingen:

    D("example.com", REG_NONE, DnsProvider(DSP_DNSCALE),
      HTTPS("@", 1, ".", "alpn=h2,h3"),
      SVCB("_dns.resolver", 1, "dns.example.com.", "alpn=dot")
    );

    Geavanceerde configuratie

    Meerdere domeinen

    Beheer meerdere domeinen in één configuratiebestand:

    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.")
    );

    Variabelen gebruiken

    Aangezien dnsconfig.js JavaScript is, kun je variabelen gebruiken om herhaling te verminderen:

    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
    );

    Macro's met functies

    Maak herbruikbare recordpatronen met JavaScript-functies:

    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- en push-workflow

    DNSControl gebruikt een tweestaps-workflow: bekijk eerst je wijzigingen, pas ze daarna toe.

    Wijzigingen bekijken

    dnscontrol preview

    Dit maakt verbinding met de DNScale API, vergelijkt je dnsconfig.js met de huidige live records en toont wat er zou veranderen:

    ******************** Domain: example.com
    1 correction (dnscale)
    #1: CREATE A www.example.com 192.0.2.1 ttl=3600

    Wijzigingen toepassen

    Als je tevreden bent met de preview, pas de wijzigingen toe:

    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

    Versiebeheer voor je configuratie

    Bewaar dnsconfig.js in Git om elke DNS-wijziging bij te houden:

    git init
    echo "creds.json" >> .gitignore
    git add dnsconfig.js .gitignore
    git commit -m "Initial DNS configuration"

    Altijd preview voor push

    Voer dnscontrol preview uit voor elke dnscontrol push. Dit vangt fouten op voordat ze live DNS beinvloeden.

    Gebruik CI/CD voor geautomatiseerde deployments

    Voeg DNSControl toe aan je CI/CD-pipeline. Voer preview uit bij pull requests en push bij merge naar main:

    # .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 }}

    Houd referenties veilig

    Commit nooit creds.json. Gebruik omgevingsvariabelen of een secrets manager in CI/CD.

    Volledig voorbeeld

    Hier is een compleet dnsconfig.js voor een typische website met 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-subdomein
      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-mailbeveiliging
      TXT("@", "v=spf1 include:_spf.google.com ~all"),
      TXT("_dmarc", "v=DMARC1; p=reject; rua=mailto:dmarc@mywebsite.com"),
     
      // Certificaatautoriteit-autorisatie
      CAA("@", "issue", "letsencrypt.org"),
      CAA("@", "issuewild", "letsencrypt.org"),
     
      // HTTPS service binding
      HTTPS("@", 1, ".", "alpn=h2,h3")
    );

    Volgende stappen

    Conclusie

    DNSControl brengt DNS-as-code naar je workflow met een eenvoudige JavaScript-configuratie. Gecombineerd met de DNScale-provider krijg je versiebeheerde DNS-wijzigingen, veilige preview-voor-push-workflows en de mogelijkheid om meerdere domeinen vanuit één bestand te beheren. Of je nu één domein of honderden beheert, DNSControl biedt de tools om het betrouwbaar en op schaal te doen.

    dnscontrol push je DNS vandaag nog.