Vi presentiamo PostScale -- API email per invii transazionali, ricezione e indirizzi mascherati. PostScale

    Gestire il DNS con DNSControl

    Scopri come gestire le tue zone e i record DNS come codice usando DNSControl con il provider DNScale. Definisci l'intera configurazione DNS in JavaScript.

    DNSControl ti permette di gestire il DNS con un file di configurazione basato su JavaScript. Definisci le tue zone e i record in dnsconfig.js, visualizzi l'anteprima delle modifiche con dnscontrol preview e le applichi con dnscontrol push. Il provider DNScale si integra direttamente con l'API di DNScale, dandoti il pieno controllo della tua infrastruttura DNS come codice.

    Prerequisiti

    Prima di iniziare, assicurati di avere:

    1. DNSControl installato (versione 4.0 o successiva) - Installa DNSControl
    2. Un account DNScale con una chiave API - Ottieni la tua chiave API
    3. Familiarità di base con la sintassi JavaScript

    Configurazione

    DNSControl utilizza un file creds.json per le credenziali del provider. Crea questo file nella directory del tuo progetto:

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

    Il provider si connette a https://api.dnscale.eu/v1 per impostazione predefinita. Per utilizzare un endpoint API personalizzato, aggiungi api_url:

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

    Mantieni creds.json fuori dal controllo di versione. Aggiungilo al tuo .gitignore:

    echo "creds.json" >> .gitignore

    Creare la tua prima zona

    Crea un file dnsconfig.js con una definizione di zona di base:

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

    Questa configurazione:

    • Dichiara il provider DNScale usando le credenziali da creds.json
    • Crea una zona per example.com
    • Aggiunge due record A: uno all'apex (@) e uno per www

    Quando esegui dnscontrol push, DNScale crea automaticamente la zona se non esiste ancora.

    Gestione dei record DNS

    Record A

    Punta gli hostname a indirizzi IPv4:

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

    Record AAAA

    Aggiungi il supporto IPv6:

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

    Record CNAME

    Crea alias per i sottodomini:

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

    Record ALIAS

    Usa ALIAS per un comportamento simile a CNAME a livello di apex:

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

    Record MX

    Configura la consegna delle email:

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

    Record TXT

    Aggiungi record SPF, DKIM o di verifica:

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

    Record CAA

    Controlla quali autorità di certificazione possono emettere certificati per il tuo dominio:

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

    Record SRV

    Definisci la posizione dei servizi:

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

    Record PTR

    Crea voci DNS inverse:

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

    Record SSHFP

    Pubblica i fingerprint delle chiavi SSH dell'host:

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

    Record TLSA

    Associa certificati TLS ai nomi di dominio:

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

    Record HTTPS e SVCB

    Configura il service binding per connessioni HTTPS moderne:

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

    Configurazione avanzata

    Domini multipli

    Gestisci diversi domini in un unico file di configurazione:

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

    Uso delle variabili

    Poiché dnsconfig.js è JavaScript, puoi usare variabili per ridurre la ripetizione:

    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 con funzioni

    Crea pattern di record riutilizzabili usando funzioni JavaScript:

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

    Flusso di lavoro: anteprima e push

    DNSControl utilizza un flusso di lavoro a due fasi: prima visualizzi l'anteprima delle modifiche, poi le applichi.

    Anteprima delle modifiche

    dnscontrol preview

    Questo si connette all'API di DNScale, confronta il tuo dnsconfig.js con i record live attuali e mostra cosa cambierebbe:

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

    Applicare le modifiche

    Una volta soddisfatto dell'anteprima, applica le modifiche:

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

    Best practice

    Controllo di versione della configurazione

    Mantieni dnsconfig.js in Git per tracciare ogni modifica DNS:

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

    Sempre anteprima prima del push

    Esegui dnscontrol preview prima di ogni dnscontrol push. Questo individua gli errori prima che influenzino il DNS live.

    Usa CI/CD per deployment automatizzati

    Aggiungi DNSControl alla tua pipeline CI/CD. Esegui preview sulle pull request e push al merge su 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 }}

    Mantieni le credenziali al sicuro

    Non committare mai creds.json. Usa variabili d'ambiente o un gestore di secret nel CI/CD.

    Esempio completo

    Ecco un dnsconfig.js completo per un tipico sito web con email:

    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),
     
      // Sito web
      A("@", SERVER_IP),
      AAAA("@", "2001:db8::50"),
      CNAME("www", "mywebsite.com."),
     
      // Sottodominio API
      A("api", "203.0.113.51", TTL(300)),
     
      // Email (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."),
     
      // Sicurezza email
      TXT("@", "v=spf1 include:_spf.google.com ~all"),
      TXT("_dmarc", "v=DMARC1; p=reject; rua=mailto:dmarc@mywebsite.com"),
     
      // Autorizzazione autorità di certificazione
      CAA("@", "issue", "letsencrypt.org"),
      CAA("@", "issuewild", "letsencrypt.org"),
     
      // HTTPS service binding
      HTTPS("@", 1, ".", "alpn=h2,h3")
    );

    Prossimi passi

    Conclusione

    DNSControl porta il DNS-as-code nel tuo flusso di lavoro con una configurazione JavaScript semplice e diretta. Combinato con il provider DNScale, ottieni modifiche DNS sotto controllo di versione, flussi di lavoro sicuri con anteprima prima del push e la possibilità di gestire più domini da un unico file. Che tu gestisca un dominio o centinaia, DNSControl fornisce gli strumenti per farlo in modo affidabile e scalabile.

    dnscontrol push il tuo DNS oggi.