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:
- DNSControl installato (versione 4.0 o successiva) - Installa DNSControl
- Un account DNScale con una chiave API - Ottieni la tua chiave API
- 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" >> .gitignoreCreare 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 perwww
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 previewQuesto 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=3600Applicare 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
- Leggi la documentazione DNSControl per il riferimento completo della configurazione
- Scopri i Tipi di record DNS supportati da DNScale
- Comprendi le Zone DNS e come funzionano
- Esplora i Metodi di importazione zone per migrare il DNS esistente
- Configura la Sicurezza email con SPF, DKIM e DMARC
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.