Questo tutorial ti mostrerà come configurare ed eseguire il tuo server dei nomi autorevole su Debian 10 Buster con il software BIND 9 ampiamente utilizzato.
Nota :questo tutorial mostra il metodo della riga di comando. Se desideri modificare i record DNS da una GUI web, ti consiglio di configurare server DNS autorevoli con Webmin, che è un pannello di controllo del server gratuito e open source.
Cos'è un server DNS autorevole?
Se possiedi un nome di dominio e desideri che il tuo server DNS gestisca la risoluzione dei nomi per il tuo nome di dominio invece di utilizzare il server DNS del registrar di domini, dovrai configurare un server DNS autorevole.
Un server DNS autorevole viene utilizzato dai proprietari di nomi di dominio per archiviare i record DNS. Fornisce risposte autorevoli ai resolver DNS (come 8.8.8.8 o 1.1.1.1), che interrogano i record DNS per conto degli utenti finali su PC, smartphone o tablet.
Informazioni su BIND
BIND (Berkeley Internet Name Domain) è un software DNS open source, flessibile e completo, ampiamente utilizzato su Unix/Linux grazie alla sua stabilità e alta qualità. È stato originariamente sviluppato da UC Berkeley e successivamente, nel 1994, il suo sviluppo è stato spostato a Internet Systems Consortium, Inc (ISC).
BIND può fungere contemporaneamente da server DNS autorevole per una zona e da un resolver DNS. Un risolutore DNS può anche essere chiamato server dei nomi ricorsivo perché esegue ricerche DNS ricorsive per gli utenti finali. Tuttavia, assumere due ruoli contemporaneamente non è vantaggioso. È buona norma separare i due ruoli su due macchine diverse.
In un articolo precedente, ho spiegato i passaggi per configurare un resolver DNS locale su Debian 10 Buster. Questo tutorial ti mostrerà come configurare BIND9 su Debian 10 Buster come server DNS solo autorevole con ricorsione disabilitata.
Prerequisiti
Per seguire questo tutorial, dovresti aver già acquistato un nome di dominio. Ho registrato il mio nome di dominio su NameCheap perché il prezzo è basso e offrono protezione della privacy a Whois gratuita per tutta la vita.
Hai anche bisogno di due server. Un server è per il server DNS master e l'altro è per il server DNS slave. Idealmente i due server dovrebbero trovarsi in posizioni fisiche diverse. Se un server DNS è offline, l'altro server DNS può comunque rispondere alle query DNS per il tuo nome di dominio.
Ogni server ha bisogno di soli 512 MB di RAM e qui ci sono i provider di hosting che consiglio. Li ho usati tutti.
- Vultr:a partire da $ 2,5 al mese. Carta di credito richiesta. Puoi creare un account su Vultr tramite il mio link di riferimento per ottenere $ 50 di credito gratuito.
- DigitalOcean:a partire da $ 5 al mese. Non è richiesta alcuna carta di credito. Puoi usare Paypal. Puoi creare un account su DigitalOcean tramite il mio link di riferimento per ottenere $ 50 di credito gratuito.
Dopo aver acquistato due server, installa Debian 10 su di essi e segui le istruzioni seguenti.
Si noti che è necessario disporre dei privilegi di root durante l'installazione del software su Debian. Puoi aggiungere sudo all'inizio di un comando, oppure usa su -
comando per passare all'utente root.
Configura un server DNS autorevole su Debian 10 Buster con BIND9
Devi eseguire i comandi in questa sezione su entrambi i server.
Accedi ai due server tramite SSH ed esegui i seguenti comandi per installare BIND 9 sul server Debian 10 dal repository predefinito. BIND 9 è la versione attuale e BIND 10 è un progetto morto.
sudo apt update sudo apt install bind9 bind9utils bind9-doc
Controlla il numero di versione.
named -v
Esempio di output:
BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c>
Per controllare il numero di versione e le opzioni di build, esegui
named -V
Per impostazione predefinita, BIND si avvia automaticamente dopo l'installazione. Puoi verificarne lo stato con:
systemctl status bind9
Uscita:
● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en Active: active (running) since Sun 2019-07-14 10:27:56 UTC; 4min 6s ago Docs: man:named(8) Main PID: 1481 (named) Tasks: 4 (limit: 1149) Memory: 13.7M CGroup: /system.slice/bind9.service └─1481 /usr/sbin/named -u bind
Suggerimento:se il comando precedente non si chiude immediatamente, premi Q.
Se non è in esecuzione, avvialo con:
sudo systemctl start bind9
E abilita l'avvio automatico all'avvio:
sudo systemctl enable bind9
Il server BIND verrà eseguito come bind
utente, che viene creato durante l'installazione, ed è in ascolto sulla porta TCP e UDP 53, come si può vedere eseguendo il seguente comando:
sudo netstat -lnptu | grep named
Il demone BIND si chiama named . (Un demone è un pezzo di software che viene eseguito in background.) Il named
binary è installato da bind9
pacchetto e c'è un altro importante binario:rndc
, il controller del demone del nome remoto, installato da bind9utils
pacchetto. Il rndc
binary viene utilizzato per ricaricare/arrestare e controllare altri aspetti del demone BIND. La comunicazione avviene tramite la porta TCP 953.
Ad esempio, possiamo controllare lo stato del server dei nomi BIND.
sudo rndc status
Il file di configurazione BIND principale /etc/bind/named.conf
origina le impostazioni da altri 3 file.
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
- /etc/bind/named.conf.default-zones
Di default, il server BIND9 su Debian fornisce un servizio ricorsivo per localhost e client di rete locale. Poiché stiamo configurando un server DNS autorevole, dobbiamo disabilitare la ricorsione. Modifica il /etc/bind/named.conf.options
file.
sudo nano /etc/bind/named.conf.options
Aggiungi le seguenti righe nella clausola options {…}.
// hide version number from clients for security reasons. version "not currently available"; // disable recursion on authoritative DNS server. recursion no; // enable the query log querylog yes; // disallow zone transfer allow-transfer { none; };
Tecnicamente parlando, devi solo aggiungere recursion no;
per disabilitare la ricorsione, ma è buona norma aggiungere le altre 3 direttive. Salva e chiudi il file. Quindi riavvia BIND.
sudo systemctl restart bind9
Configurazione del server DNS principale
Scegli uno dei due server come server DNS principale. Lo chiameremo ns1.example.com
.
Il server DNS principale conserva la copia principale del file di zona. Le modifiche ai record DNS vengono effettuate su questo server. Un dominio può avere una o più zone DNS. Ogni zona DNS ha un file di zona che contiene tutti i record DNS in quella zona. Per semplicità, questo articolo presuppone che tu voglia utilizzare una singola zona DNS per gestire tutti i record DNS per il tuo nome di dominio.
Il /etc/bind/named.conf.default-zones
file definisce la zona principale e la zona localhost. Per aggiungere una zona per il tuo nome di dominio, modifica /etc/bind/named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Aggiungi le seguenti righe a questo file. Sostituisci example.com con il tuo nome di dominio. Sostituisci 12.34.56.78 con l'indirizzo IP del server DNS slave.
zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-query { any; }; allow-transfer { 12.34.56.78; }; };
Nella configurazione precedente, abbiamo creato una nuova zona con la zone
clausola e abbiamo specificato che questa è la zona master. Il file di zona è /etc/bind/db.example.com
, dove aggiungeremo i record DNS. Il trasferimento di zona sarà consentito solo per il server DNS slave.
Invece di creare un file di zona da zero, possiamo utilizzare un file modello di zona. Copia il contenuto di db.empty
in un nuovo file.
sudo cp /etc/bind/db.empty /etc/bind/db.example.com
Un file di zona può contenere 3 tipi di voci:
- Commenti :inizia con un punto e virgola (;)
- Direttive :inizia con il simbolo del dollaro ($)
- Record di risorse :noto anche come record DNS
Un file di zona è in genere costituito dai seguenti tipi di record DNS.
- Il record SOA (Start of Authority) :definisce le caratteristiche chiave di una zona. È il primo record DNS nel file di zona ed è obbligatorio.
- Registro NS (server dei nomi) :specifica quali server vengono utilizzati per archiviare i record DNS e rispondere alle query DNS per un nome di dominio. Devono esserci almeno due record NS in un file di zona.
- Registro MX (Mail Exchanger) :specifica quali host sono responsabili della consegna delle e-mail per un nome di dominio.
- Un record (Indirizzo) :converte i nomi DNS in indirizzi IPv4.
- Record AAAA (Quad A) :converte i nomi DNS in indirizzi IPv6.
- Registro CNAME (Nome canonico) :Viene utilizzato per creare alias per un nome DNS.
- Registro TXT :SPF, DKIM, DMARC, ecc.
Ora modifichiamo il file di zona.
sudo nano /etc/bind/db.example.com
Per impostazione predefinita, si presenta così:
Puoi invece cambiarlo in questo.
Dove
- Il
$TTL
La direttiva definisce il Time to Live predefinito valore per la zona, che è il tempo in cui un record DNS può essere memorizzato nella cache su un risolutore DNS. Questa direttiva è obbligatoria. Il tempo è specificato in secondi. - Il
$ORIGIN
definisce il dominio di base. - I nomi di dominio devono terminare con un punto (.), che è il dominio principale. Quando un nome di dominio termina con un punto, è un nome di dominio completo (FQDN).
- Il simbolo @ fa riferimento al dominio di base.
IN
è la classe DNS. Sta per Internet. Esistono altre classi DNS ma vengono utilizzate raramente.
Il primo record in un file di zona è il record SOA (Start of Authority). Questo record contiene le seguenti informazioni:
- Il server DNS principale .
- Indirizzo email dell'amministratore di zona . RFC 2142 consiglia l'indirizzo email [email protected] . Nel file di zona, questo indirizzo email assume la forma:hostmaster.example.com perché il simbolo @ ha un significato speciale nel file di zona.
- Numero di serie della zona . Il numero di serie è un modo per tenere traccia dei cambiamenti nella zona da parte del server DNS slave. Per convenzione, il numero di serie ha un formato di data:
yyyymmddss
, dove aaaa è il numero di quattro cifre dell'anno, mm è il mese, gg è il giorno e ss è il numero di sequenza del giorno. È necessario aggiornare il numero di serie quando vengono apportate modifiche al file di zona. - Aggiorna valore . Quando viene raggiunto il valore di aggiornamento, il server DNS slave tenterà di leggere il record SOA dal server DNS master. Se il numero di serie aumenta, viene avviato un trasferimento di zona.
- Riprova valore . Definisce l'intervallo di tentativi in secondi se il server DNS slave non riesce a connettersi al server DNS master.
- Scadenza :se il server DNS slave non riesce a contattare il server DNS master per questo periodo di tempo, lo slave smetterà di rispondere alle query DNS per questa zona.
- TTL cache negativo :Definisce il valore del tempo residuo delle risposte DNS per nomi DNS inesistenti (NXDOMAIN).
I record TXT sono generalmente racchiusi tra virgolette. Se aggiungi il record DKIM, devi anche racchiudere il valore tra parentesi.
Salva e chiudi il file. Quindi eseguire il comando seguente per verificare se sono presenti errori di sintassi nel file di configurazione principale. Un output silenzioso indica che non sono stati trovati errori.
sudo named-checkconf
Quindi controlla la sintassi dei file di zona.
sudo named-checkzone example.com /etc/bind/db.example.com
Se sono presenti errori di sintassi nel file di zona, è necessario correggerlo o questa zona non verrà caricata. Il messaggio seguente indica che non ci sono errori di sintassi.
zone example.com/IN: loaded serial 2019011503 OK
Quindi riavvia BIND9.
sudo systemctl restart bind9
Se stai utilizzando il firewall semplice (UFW), apri la porta TCP e UDP 53.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Se stai utilizzando direttamente il firewall iptables, esegui il comando seguente.
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
Configurazione del server DNS slave
Ora utilizziamo l'altro server come server DNS slave, che si chiamerà ns2.example.com
.
Per prima cosa, modifica il named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Aggiungi una zona come di seguito. Sostituisci 12.34.56.78 con l'indirizzo IP del server DNS principale.
zone "example.com" { type slave; file "db.example.com"; allow-query { any; }; masters { 12.34.56.78; }; };
Nella configurazione precedente, abbiamo specificato che si tratta di un server DNS slave per example.com
zone e accetterà i trasferimenti di zona solo dal server DNS principale.
Salva e chiudi il file. Quindi esegui il comando seguente per verificare se ci sono errori di sintassi nel file di configurazione principale.
sudo named-checkconf
Se non vengono rilevati errori, riavvia BIND9.
sudo systemctl restart bind9
I file di zona sul server DNS slave vengono caricati da un trasferimento di zona, utilizzato per sincronizzare le modifiche ai record DNS dal server DNS master al server DNS slave. Dopo il riavvio di BIND9, il trasferimento di zona inizierà immediatamente. Controlla il log di BIND9 con il seguente comando.
sudo journalctl -eu bind9
Puoi vedere messaggi come di seguito, che indicano che il trasferimento della zona è riuscito.
named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)
Il file di zona verrà salvato come /var/cache/bind/db.example.com
sul server DNS slave.
Se stai utilizzando il firewall semplice (UFW), apri la porta TCP e UDP 53.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Se stai utilizzando direttamente il firewall iptables, esegui il comando seguente.
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT
Ulteriori informazioni sul trasferimento di zona
Il server DNS slave contatterà nuovamente il master quando viene raggiunto il tempo di aggiornamento nel record SOA e se il numero di serie sul master è maggiore di quello sullo slave, verrà avviato un trasferimento di zona. Esistono due tipi di trasferimenti di zona:
- Trasferimento di zona completa (AXFR):viene trasferita la copia completa del file di zona.
- Trasferimento di zona incrementale (IXFR):vengono trasferiti solo i record DNS modificati.
Entrambi i tipi di trasferimento di zona utilizzano la porta TCP 53. Per impostazione predefinita, BIND sul server DNS slave richiederà un trasferimento di zona incrementale e BIND sul server DNS master consentirà il trasferimento di zona incrementale solo quando la zona è dinamica.
L'intervallo di trasferimento della zona è un fattore importante della velocità di propagazione delle modifiche ai record DNS. Invece di attendere il contatto del server DNS slave, il master BIND avviserà lo slave quando vengono apportate modifiche alla zona. Ciò può ridurre considerevolmente il tempo di propagazione delle modifiche alle zone su Internet.
Zona inversa
Una zona inversa contiene record PTR che associano un indirizzo IP a un nome DNS. È la controparte del record DNS A. Il record PTR è spesso necessario affinché i server di posta superino i filtri antispam. Questo record non appartiene a un dominio. Devi creare un record PTR nel pannello di controllo del tuo provider di hosting o chiedere al tuo ISP, quindi non tratterò la creazione di zone inverse in BIND.
Modifica il record NS e crea il record di colla
Ora devi andare al sito Web del registrar di domini per modificare il record NS per il tuo dominio, in modo che Internet sappia che stai utilizzando il tuo server DNS. Normalmente utilizzi nomi host nel record NS come ns1.example.com
e ns2.example.com
.
name server 1: ns1.example.com name server 2: ns2.example.com
Se hai un nome di dominio example.com
e utilizzi un sottodominio per i server DNS autorevoli (ns1.example.com
e ns2.example.com
), quindi devi anche creare un record di colla presso il tuo registrar di domini, in modo che Internet possa conoscere l'indirizzo IP del tuo server DNS. Il record di colla è un record A per ns1.example.com
e ns2.example.com
.
ns1.example.com IP-address-of-master-server ns2.example.com IP-address-of-slave-server
Le informazioni di cui sopra verranno inviate a un operatore del registro che gestisce i server DNS TLD tramite l'Extensible Provisioning Protocol (EPP), in modo che i server DNS TLD conoscano il nome e gli indirizzi IP dei server DNS autorevoli per il tuo nome di dominio. A seconda del registrar di domini che utilizzi, il tuo record NS potrebbe essere propagato istantaneamente o potrebbero essere necessarie fino a 24 ore per propagarsi. Puoi andare su https://dnsmap.io per verificare se il tuo nuovo record NS è attivo.
Ti mostrerò come farlo su NameCheap .
Se hai acquistato un nome di dominio su NameCheap, accedi al tuo account NameCheap. Seleziona l'Domain list
menu sulla barra laterale sinistra, quindi fai clic su Gestisci pulsante all'estrema destra.
Seleziona DNS avanzato .
Scorri fino in fondo alla pagina, troverai il server DNS personale sezione. Fai clic su Aggiungi server dei nomi pulsante per aggiungere i tuoi server dei nomi:ns1.example.com
e ns2.example.com
. Devi inserire gli indirizzi IP dei tuoi name server.
Dopo aver aggiunto i tuoi due name server, fai clic sul pulsante di ricerca per verificare se sono stati aggiunti correttamente. In tal caso, i record di colla appariranno in fondo a questa pagina.
Ora fai clic su Domain
scheda e utilizza il tuo server DNS personalizzato.
A seconda del registrar di domini che utilizzi, il tuo record NS potrebbe essere propagato istantaneamente o potrebbero essere necessarie fino a 24 ore per propagarsi. Puoi andare su https://dnsmap.io per verificare se il tuo nuovo record NS è attivo.
Dopo che il record di colla e il record NS sono stati propagati a Internet, i tuoi server DNS risponderanno alle query DNS per il tuo nome di dominio. Puoi controllare il registro delle query con:
sudo journalctl -eu bind9
Puoi anche usare dig
utility per controllare il record NS del tuo nome di dominio.
dig NS example.com
Se il record NS e il record di colla sono stati propagati a Internet, dovresti vedere i tuoi server dei nomi nella sezione delle risposte. Se vedi il SERVFAIL
errore, probabilmente è perché non hai aperto la porta UDP 53 sui tuoi server dei nomi.
Cose da sapere
- Il termine
master DNS server
implica solo che questo server memorizzi la copia principale del file di zona. Non ha una priorità più alta quando si tratta di risoluzione DNS. - Aggiorna sempre il numero di serie SOA quando apporti modifiche a un file di zona.
Abilitazione del Risolutore
BIND può fungere da server DNS autorevole per una zona e un Resolver DNS allo stesso tempo. È buona norma separare i due ruoli su due macchine diverse e in questo articolo abbiamo disabilitato il resolver in BIND. Se vuoi davvero abilitare il resolver, segui le istruzioni seguenti.
Modifica il file di configurazione BIND.
sudo nano /etc/bind/named.conf.options
Trova le seguenti righe.
// disable recursion on authoritative DNS server. recursion no;
Modificali come segue, in modo che solo un indirizzo IP affidabile possa inviare query ricorsive al tuo risolutore DNS e il tuo server non sarà un risolutore aperto.
// allow recursion for trusted clients only. recursion yes; allow-query { localhost; 12.34.56.78; };
Sostituisci 12.34.56.78 con il tuo indirizzo IP. Salva e chiudi il file. Assicurati che la definizione della tua zona sia in /etc/bind/named.conf.local
file ha la seguente opzione, quindi Internet può interrogare i record DNS nella tua zona.
allow-query { any; };
Quindi riavvia BIND.
sudo systemctl restart bind9
Vai su https://openresolver.com/ per verificare se il tuo server BIND è un risolutore aperto.