Nel precedente articolo di questa serie in due parti, Introduzione al DNS (Domain Name System), Ho descritto come il database DNS è strutturato e come configurare i servizi di nome su un client. Ho anche elencato e descritto alcuni dei record DNS più comuni che potresti incontrare quando costruisci un server dei nomi o semplicemente cerchi di interpretare i risultati di un comando dig.

In questo articolo, vi mostro come costruire il proprio name server utilizzando BIND (Berkeley Internet Name Domain)., Non è così difficile come si potrebbe pensare, soprattutto perché si può fare in due fasi.

In questo articolo, inizierai imparando come creare un server dei nomi nella cache, quindi passerai e imparerai come aggiornarlo a un server dei nomi di dominio primario (master) completo per la tua rete, completo di file di zona in avanti e indietro.

Impostare un server DNS usando BIND

Impostare un server dei nomi usando BIND è abbastanza semplice, quindi ti mostrerò come farlo su qualsiasi computer che potresti avere a disposizione per la sperimentazione., Questo piccolo progetto di laboratorio ti mostrerà come installare e configurare BIND sul tuo computer come server dei nomi di cache, testarlo, quindi configurarlo come server dei nomi primario con un file di zona che puoi usare come risolutore dei nomi per la tua rete o solo per i test.

Impostare un server dei nomi su qualsiasi computer GNU / Linux disponibile è tecnicamente possibile perché non interferirà con altri host sulla rete o il loro funzionamento. Tuttavia, probabilmente non dovresti farlo su un computer che non possiedi o che hai il diritto di modificare a meno che tu non abbia il permesso esplicito di farlo.,

La mia configurazione

Hai solo bisogno di un computer per eseguire tutte le attività tranne una in questo progetto di laboratorio. Uso questa configurazione sul mio ThinkPad molto più potente perché i name server forniti da DHCP (Dynamic Host Configuration Protocol) quando mi connetto a reti non domestiche utilizzando connessioni cablate o wireless a volte possono essere inaffidabili. Per dimostrare che quasi tutti gli host possono funzionare bene come server dei nomi, ho testato questo progetto su un vecchio netbook ASUS EeePC 900.,

Userò l’indirizzo IP privato del mio ASUS per questo progetto, ma dovresti usare l’indirizzo IP dell’host che stai usando.

Il file hosts

Per prima cosa, diamo un’occhiata al file /etc/hosts. Nel suo stato predefinito, ci dovrebbero essere solo due righe nel file hosts, le prime due righe viste nel listato 1, sotto.

Listato 1: È possibile mantenere un semplice file hosts per eseguire la funzione di un resolver in piccole reti.,

Sebbene sia possibile aggiungere nomi host e i rispettivi indirizzi IP come mostrato nel listato 1, questa non è una soluzione ottimale per nominare i servizi, specialmente quando si viaggia. Se ci sono altre voci nel file hosts, potrebbe essere necessario commentarle per la durata di questo progetto se interferiscono con la denominazione o gli indirizzi IP. La maggior parte di voi non avrà voci diverse dalle due linee predefinite.,

Preparazione

Un server dei nomi nella cache non può sostituire l’uso di/etc / hosts per risolvere i nomi host sulla rete interna; tuttavia, rispetto all’utilizzo di un ISP o di un altro server dei nomi pubblici, un server dei nomi nella cache può migliorare le prestazioni quando si risolvono nomi esterni www.cnn.com. La parte migliore è che impostare un server dei nomi di cache è abbastanza facile.

Prima di iniziare, è necessario prepararsi eseguendo i seguenti passaggi.

In primo luogo, fare copie di backup dei file/etc /hosts,/etc / named.conf, resolv.conf, e /etc / sysconfig / iptables.,

Se non sono già installati, utilizzare il gestore dei pacchetti della distribuzione per installare i seguenti RPM di BIND: bind, bind-chroot e bind-utils. Per consentire all’host lab di utilizzare il server dei nomi nella cache, è necessario aggiungere una riga del server dei nomi per puntare al proprio host in /etc/resolv.conf. Ad esempio, se il tuo indirizzo IP lab host è 192.168.0.203, così come il mio epc, aggiungi la seguente riga all’inizio dell’elenco dei name server in /etc/resolv.conf:

name server 192.168.0.203

Assicurarsi di utilizzare l’indirizzo IP dell’host su cui si sta eseguendo questo progetto.,

È possibile utilizzare l’indirizzo IP del localhost, 127.0.0.1 invece dell’indirizzo IP esterno. Dovresti anche commentare qualsiasi riga che punta ad altri host come server dei nomi. Assicurati di salvare la risoluzione rivista.file conf.

Queste modifiche avranno effetto immediato e non è richiesto alcun riavvio o riavvio del servizio. Ora tentare di eseguire il ping di un host pubblico comune che non blocca ICMP (Internet Control Message Protocol) pacchetti; sentitevi liberi di usare il mio firewall, che è un Raspberry Pi.,

ping wally2.both.org

Dovresti ottenere un errore “host sconosciuto” o “Nome o servizio non noto” perché al momento non hai un servizio DNS funzionante o un resolver definito nella risoluzione.file conf. Ora usa il comando dig per vedere se name services funziona.

dig wally2.both.com

Si dovrebbe ottenere l’errore, “Connessione scaduta; nessun server potrebbe essere raggiunto.”

Configura un server dei nomi nella cache

Un server dei nomi nella cache non è una fonte autorevole per nessun dominio., Semplicemente memorizza nella cache i risultati di tutte le richieste di risoluzione dei nomi dalla rete che serve per accelerare le risposte alle richieste future per lo stesso host remoto.

Nota: Il nome.il file conf è molto particolare sulla sintassi e in particolare sulla punteggiatura. Il punto e virgola viene utilizzato per delineare la fine di una voce e la fine di una stanza, nonché la fine di una riga. Assicurarsi di aggiungerli correttamente come mostrato nei campioni.

Per la configurazione iniziale del server dei nomi di cache apportando un paio di modifiche al /etc/named predefinito.il file conf è necessario, quindi modifica quel file usando il tuo editor preferito., Innanzitutto, aggiungi l’indirizzo IP dell’host di test locale alla riga “listen-on port 53” come mostrato nel listato 2, di seguito. Ciò consente a named di ascoltare l’indirizzo IP esterno dell’host, in modo che anche altri computer possano utilizzarlo come server dei nomi.

Per impostazione predefinita, BIND si riferisce ai server dei nomi root di Internet per individuare i server dei nomi autorevoli per un dominio. È possibile specificare altri server chiamati “Forwarders” a cui l’istanza locale di BIND invierà richieste anziché i server root. Ciò aumenta la possibilità di dirottamento DNS.,

Aggiungi una riga “spedizionieri” come mostrato di seguito. Questo indica al tuo server DNS di memorizzazione nella cache dove ottenere gli indirizzi IP quando non sono già memorizzati nella cache localmente. Gli indirizzi IP nell’elenco qui sotto sono per i server DNS pubblici di Google È possibile utilizzare il proprio ISP locale o OpenDNS o qualche altro server di nomi pubblici come spedizioniere. Non è necessario definire alcun forwarder e, in tal caso, BIND utilizzerà i server root Internet come definito nel file /var/named/named.ca per individuare i server dei nomi autorevoli per i domini se non sono definiti forwarder., Ma per questo esercizio, si prega di definire gli spedizionieri come ho nel Listato 2.

Commenta la riga IPV6 perché non stiamo usando IPV6 nell’ambiente di laboratorio. Si noti che le due barre “/ / ” indicano i commenti nel nome.file conf.

Listato 2: Il/etc / named.file conf fornisce la semplice configurazione necessaria per impostare un server dei nomi di memorizzazione nella cache. Le linee che devono essere aggiunte o modificate sono evidenziate in grassetto.

Aggiungere l’indirizzo di rete locale, 192.168.0.0/24, alla riga allow-query., Questa riga specifica le reti da cui verranno accettate le query DNS da questo server DNS.

Avvia il servizio name

Ora avvia il servizio named e configura il servizio named per l’avvio ad ogni avvio. Io uso il comando systemctl sul mio host Fedora 25, ma il comando potrebbe essere diverso sul tuo host, a seconda della distribuzione che stai usando. Si noti che il nome del servizio di risoluzione BIND è denominato.,

systemctl enable named
systemctl start named

Il primo test che è possibile eseguire per garantire che il caching nome del server è quello di utilizzare scavare per individuare il database DNS informazioni per wally2.both.org. Alla prova le tue memorizzazione nella cache del server di nome, utilizzare il comando dig per ottenere l’Indirizzo IP(es) per alcuni comuni, siti Internet, come www.opensource.com, CNN, via cavo, e tutti gli altri che ti piace. I risultati dovrebbero ora mostrare il tuo host come server che risponde.,

A questo punto il tuo server dei nomi di cache risolverà correttamente gli host su Internet e questo perché quelle richieste DNS per gli host pubblici vengono inoltrate ai server dei nomi pubblici di Google—fare riferimento alla riga “forwarders” in named.conf. Tuttavia, si dipende ancora dal file/etc / hosts per i servizi di nomi interni. La creazione di un server dei nomi primario può risolvere questo problema.

Creazione di un server dei nomi primari

Una volta creato un server dei nomi nella cache, convertirlo in un server dei nomi primari a tutti gli effetti non è troppo difficile., Un server dei nomi primario è l’origine autorevole per il dominio che rappresenta.

È necessario cambiare nome.conf di nuovo e creare un paio di nuovi file. Creerai un dominio chiamato Example.com, che è un nome di dominio riservato per scopi di esempio in documenti come questo. Il Example.com il dominio ha un indirizzo IP su Internet e un sito Web molto scarso, ma puoi usare il nome nel resto del tuo progetto di laboratorio senza causare problemi a nessuno. Userai il Example.com dominio come nome di dominio interno per il resto di questo esercizio.,

I due nuovi file che creerai sono i file di zona forward e reverse, che inserirai nella directory /var/named. Questa posizione è specificata dalla direttiva” directory ” nel nome.file di configurazione conf.

Crea il file forward zone

Il file forward zone contiene record “A” che accoppiano i nomi degli host nella zona, ovvero il dominio, con i rispettivi indirizzi IP. Può anche contenere record CNAME, che sono alias per i nomi host reali nei record A e record MX per i server di posta.

Crea un file di zona di inoltro di base, / var / named / example. com.,e aggiungere le seguenti righe ad esso. Il tuo file di zona dovrebbe apparire come il file di zona di esempio nel listato 3, sotto, quando hai finito.

; Authoritative data for example.com zone
;
$TTL 1D
@ IN SOA epc.example.com root.epc.example.com. (
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
$ORIGIN example.com.
example.com. IN NS epc.example.com.
epc IN A 127.0.0.1
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
test1 IN A 192.168.25.21
t1 IN CNAME test1
test2 IN A 192.168.25.22
test3 IN A 192.168.25.23
test4 IN A 192.168.25.24
; Mail server MX record
example.com. IN MX 10 mail.example.com.

Listato 3: Il file di zona in avanti per il Example.com dominio contiene i nomi host e i relativi indirizzi IP per questo dominio.

La prima riga di non commento nel listato 3 è l’identificatore Time to Live, che in questo caso è un giorno per tutti i record che non sono altrimenti specificati. D sta per Giorno. Gli specificatori nella linea SOA (Start of Authority) sono altrettanto ovvi., I dettagli dei parametri nel record SOA sono descritti in dettaglio qui.

Il record NS deve avere l’FQDN (Fully Qualified Domain Name) dell’host su cui si sta eseguendo questo progetto lab. Ci deve essere anche un record A nel file con un indirizzo IP valido per l’host. In questo caso, è necessario utilizzare l’indirizzo IP localhost di 127.0.0.1.

Le voci mostrate sopra ti daranno alcuni nomi host con cui sperimentare.

Assicurarsi di utilizzare la data odierna e aggiungere un contatore a partire da 01 per il numero di serie. Il numero di serie di cui sopra è il primo cambiamento del 4 marzo 2017., Il numero di serie viene incrementato ogni volta che il file di zona viene modificato. Se ci fossero server dei nomi secondari che hanno utilizzato questo per un primario, non verrebbero aggiornati a meno che il numero di serie non venga incrementato.

Aggiungi i file di zona in avanti a named.conf

Prima che il server DNS funzioni, tuttavia, è necessario creare una voce in /etc/named.conf che punterà al tuo nuovo file di zona. Aggiungi le seguenti righe sotto la voce per la zona suggerimenti di primo livello ma prima delle righe “includi”.

zone "example.com" IN {
type master;
file "example.com.zone";
};

Listato 4: Aggiungi queste righe al nome.file conf per aggiungere l’esempio.,file di zona com nella configurazione del resolver.

Ora riavvia named per rendere effettive queste modifiche. Testare il server dei nomi utilizzando i comandi dig e nsloookup per ottenere gli indirizzi IP per gli host configurati nel file forward zone. Si noti che l’host non deve esistere sulla rete per i comandi dig e nslookup per restituire un indirizzo IP.

Tenere presente che l’utilizzo dell’FQDN per questi comandi è necessario ad eccezione del comando nslookup purché le voci di dominio e ricerca di Example.com sono forniti in/etc / resolv.file conf., In questo caso, probabilmente non lo sono, quindi usa gli FQDN per tutti i test in questo progetto.

Utilizzando i server dei nomi root

Si noti che i server dei nomi root sono indicati come server autorevoli per Amazon.com ricerca. Ma ricorda che stai usando i server dei nomi pubblici di Google come spedizionieri. Ora commenta la linea degli spedizionieri in nome.conf e riavvio nominato. Eseguire nuovamente i comandi precedenti per confrontare i risultati restituiti. I risultati dovrebbero essere simili a quelli qui sotto nel listato 5.

Listato 5: I risultati di una ricerca su www.Amazon.,com avere alcune informazioni interessanti tra cui i tempi di vita per i vari tipi di record.

Quando l’ho fatto, la prima chiamata per risolvere l’indirizzo esterno per Amazon ha richiesto 3857ms mentre i dati erano localizzati e restituiti. I risultati successivi per eseguire la stessa query erano 1ms, il che mostra il vantaggio di memorizzare nella cache i risultati del resolver localmente. Si noti i numeri 1800, 300 e 60 nelle linee della sezione risposta e 1831 nelle linee della sezione autorità: questi sono TTL (Tempi da vivere) in secondi., Se si esegue la ricerca più volte, questi numeri cambieranno, mostrando la quantità di tempo che i record hanno rimanente per vivere nella cache locale.

Creare il file di zona inversa

Una zona inversa per il tuo dominio fornirà la possibilità di eseguire ricerche inverse. Molte organizzazioni non lo fanno internamente, ma le ricerche inverse possono essere utili per determinare i problemi. Molte configurazioni di lotta contro lo spam, come SpamAssassin, cercano ricerche inverse per verificare i server di posta elettronica validi.

Creare il file di zona inversa, / var / named / example. com. rev e aggiungere i seguenti contenuti., Assicurarsi di utilizzare un numero di serie appropriato.

; Authoritative data for example.com reverse zone
;
$TTL 1D
@ IN SOA test1.example.com root.test1.example.com. (
2017031501 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS epc.example.com.
example.com. IN NS epc.example.com.
1 IN PTR mail.example.com.
1 IN PTR server.example.com.
21 IN PTR test1.example.com.
22 IN PTR test2.example.com.
23 IN PTR test3.example.com.
24 IN PTR test4.example.com.

Listato 6: Utilizzare questo file di zona inversa, ad esempio.com.rev, per il server dei nomi.

Puoi anche nominare il tuo file di zona inversa /var/named/25.168.192.in-addr.arpa, che segue le convenzioni precedenti. Puoi effettivamente nominarlo tutto ciò che vuoi perché lo indicherai esplicitamente nel nome.conf file, ma l’utilizzo di una delle due convenzioni renderà più facile per gli altri seguire il tuo lavoro.

Aggiungi la zona inversa a named.conf:

zone "25.168.192.in-addr.arpa" IN {
type master;
file "example.com.rev";
};

Listato 7: Aggiunta di questa stanza al nome.,file conf consente ricerche inverse.

Aggiungi la strofa nel listato 7 al/etc / named.file conf per puntare alla nuova zona inversa. Ora ricarica named e prova la tua zona inversa usando i comandi nel Listato 8. I risultati dovrebbero essere simili a quelli qui sotto.

Listato 8: Dopo aver riavviato named dovresti vedere risultati simili a questi quando fai una ricerca inversa su un indirizzo IP nella zona inversa.

Assicurati di testare alcune delle altre voci inverse nella tua rete e prova anche le seguenti e altre ricerche inverse con cui vuoi sperimentare., L’opzione-x significa ricerca inversa.

dig -x 192.168.25.23
dig -x 192.168.25.1

Si noti che non tutti gli host che hanno voci nella zona di inoltro devono avere voci nella zona inversa, ma se lo fanno si ottengono risultati più coerenti.

A questo punto, hai un server dei nomi funzionante che usa BIND. Tuttavia, gli host esterni non possono ancora utilizzare questo server dei nomi perché il firewall non deve ancora essere configurato per consentire le richieste DNS.

Configurazione di IPTables per DNS

Puoi fare questo passaggio se vuoi che altri host sulla tua rete locale usino il tuo host come server dei nomi.,

Il firewall sul tuo host di test probabilmente blocca l’accesso al tuo host per i servizi dei nomi. IPTables deve essere configurato per consentire pacchetti UDP (User Datagram Protocol) in ingresso sul server dei nomi in modo che altri host possano utilizzarlo per la risoluzione dei nomi. Utilizzare i seguenti comandi per aggiungere le voci richieste e salvarle.

Aggiungi una regola al tuo firewall IPTables o firewalld che consente i pacchetti in arrivo sulla porta 53 (dominio) per UDP e salva il nuovo set di regole., Assicurati di inserire la nuova regola dopo la riga-A INPUT-m state RELATED state RELATED,ESTABLISHED-j ACCEPT, quindi dovrai contare il numero di righe di INPUT nella tabella dei filtri per farlo. Il numero 7 nel seguente comando significa che questa regola verrà inserita nella posizione numero 7 nelle regole di INPUT esistenti.

iptables -t filter -I INPUT 7 -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

Puoi salvare le tue nuove regole del firewall se vuoi, e lo faresti se questa fosse un’installazione permanente e non un progetto di laboratorio. Quindi prova questo da uno degli altri host usando il comando nel listato 9, sotto., L’argomento @ epc indica al comando dig di utilizzare il server dei nomi specificato con il nome host epc. È necessario sostituire l’indirizzo IP del server DNS appena creato o un nome host risolvibile sulla rete che punta al nuovo server dei nomi. Ovviamente, puoi sempre aggiungere quel nome host con il suo indirizzo IP al file / etc / hosts dell’host che stai usando per il test remoto.

Listato 9: Verifica del risolutore del nome creato da un host diverso sulla stessa rete.,

Cleanup

Per la pulizia, è necessario eseguire le seguenti attività utilizzando gli strumenti appropriati per la distribuzione. Si può solo desiderare di mantenere questo name server per la rete se non si dispone già di uno.

  1. Ripristina il file /etc/hosts originale.
  2. Stop denominato sull’host resolver utilizzato per questo progetto lab.
  3. Disabilita il servizio denominato.
  4. Elimina i file di zona.
  5. Ripristina il nome originale.file conf.
  6. Ripristina la risoluzione originale.file conf.,

Considerazioni finali

Il funzionamento dei servizi dei nomi mi è sembrato molto oscuro fino a quando non ho effettivamente creato un server dei nomi per la mia rete usando BIND. È abbastanza semplice e può migliorare le prestazioni di ricerca DNS. Avere il proprio server dei nomi può anche prevenire molte delle interruzioni del servizio dei nomi relativamente minori ma fastidiose causate da server dei nomi ISP mal mantenuti.

Nota che, anche se il mio piccolo EeePC è in esecuzione con il 100% di utilizzo della CPU per Seti@Home, risponde estremamente rapidamente alle richieste del risolutore., Dovresti essere in grado di provare questo progetto su qualsiasi host Linux che hai a disposizione con un impatto minuscolo. Spero che molti di voi cercheranno di impostare il proprio server dei nomi e sperimentarlo. Le specifiche dell’installazione del server dei nomi dipenderanno dai dettagli dell’host e della rete.