Activitat AC102 - Servidor DNS a Linux
Objectiu
Instal·lació i configuració bàsica d’un servei de DNS a Linux sota els 3 modes de funcionament principals.
Intruccions
Utilitzarem les màquines que heu utilitzat al NF1.**
Introducció
En aquest cas ens interessa començar a veure com funciona un servidor de DNS a Linux, i per això utilitzarem la Ubuntu Server 22, que treballarà de servidor i client alhora. A nivell de xarxa, podeu fer-vos-ho fàcil i deixar un únic adaptador en mode adaptador pont.
Per la tria de software tenim múltiples opcions, tals com PowerDNS, dnsmasq, etc., però ho farem amb el software més utilitzat i potent, el BIND.
Per tant, el primer que caldrà fer és instal·lar-lo a partir de les següents comandes:
apt-get install bind9 bind9-utils
Per defecte, ens quedarà activat dins el sistema com a servei i el nom del procés el reconeixereu com a ‘named’.
Recordeu, una cosa és vosaltres fent consultes a través del vostre client DNS, el resolver, i l’altra, el servidor de DNS, que en aquest cas, estarà a la mateixa màquina.
Si feu un netstat -putan veureu com ara per la IP 127.0.0.1 teniu un procés ‘named’ escoltant pel port 53.
Els fitxers de configuració de BIND es troben a la carpeta /etc/bind, i el seu fitxer principal és el named.conf.
Tot i així, des del mateix fitxer, es fan ‘includes’ a d’altres fitxers, on cadascun d’ells té una funció específica.
BIND a més porta una eina de control des de consola, anomenada ‘rndc’, que ens permetrà interactuar amb el procés principal.
Podeu comprovar que tot funciona correctament amb un ‘rndc status’.
Si fem un cat de named.conf veiem el següent:
En el fons és un fitxer que agrupa els fitxers que formen part de les configuracions de BIND.
Si anem a mirar el named.conf.options, hi trobarem opcions generals de configuració del servei, com per exemple, el seu directori de treball, les interfícies de xarxa on escolta, o si ha de fer de forwarder, si s’admet el mode recursiu, si es permeten transferències de zona, etc.
El named.conf.local és el fitxer on haurem d’afegir les nostres opcions de configuració local, i al fitxer named.conf.default-zones, aquelles zones per les quals volem donar servei.
Per altra banda, hi trobareu fitxers, de tipus db.*, que son zones o bé per defecte, preparades i buides, o de resolució inversa per rangs privats.
Els root servers es carreguen automàticament de /usr/share/dns/root.hints, per si els voleu consultar.
Anem doncs, a aplicar diverses configuracions per veure’n el seu funcionament. Podríem començar per la directiva listen-on, que indica per quines interfícies volem activar el servei. En aquest cas doncs, com que només ho consultarem de forma local, caldrà que ho limitem a 127.0.0.1. Per això desactivem la directiva que hi ha i la canviem per listen-on port 53 {127.0.0.1; };. Si volem afegir la xarxa de l’institut o la IP del nostre Windows o d’algun company, només cal que ho afegim dins el {}, separats per ;.
Gràcies a la comanda named-checkconf podem veure si hem comès un error a la configuració abans de llançar el restart del servei.
Per altra banda, no cal que tinguem el protocol IPv6 actiu. Si voleu, proveu a veure si ho podeu desactivar.
Tot seguit, anem a configurar el BIND sota diferents modes de treball.
En mode memòria cau
Configurarem el servidor de forma que el nostre resolver el consulti, i aquest servidor DNS faci de memòria cau de les consultes que farà als diferents servidors DNS autoritatius dels dominis que busquem. Per tant, no caldrà que creem cap fitxer de zona directa ni inversa en aquest apartat.
La seva funció és emmagatzemar a la memòria cau les respostes abans de passar-les als clients. Això li permetrà que les futures consultes repetides es puguin consultar directament i per tant, més ràpidament.
Evidentment, aquest tipus de servidor no emet respostes amb autoritat. Aquest és un mode que es pot combinar amb d’altres de forma que podem treballar de les següents maneres:
- Únicament memòria cau
- Cau i recursiu, d’aquesta manera es farà resolució externa sobre els dominis que on coneguem, i hi haurà cau sobre els que s’han consultat prèviament. És el més habitual. - Cau amb forward. No es treballarà en mode recursiu directe, sinó que aquestes peticions es passaran a un servidor amb la responsabilitat de resoldre les consultes externes. Al tenir memòria cau les que ja s’hagin passat prèviament es resoldran directament.
- Memòria cau desactivada. Sempre es fan les consultes, no s’emmagatzemen.
Ara ens cal indicar el mode de consultes. Ara mateix només el volem fer servir en mode cau, de forma que cal tenir en compte les següents 3 directives:
•allow-query-cache: permet que s’emmagatzemi en la memòria cau qualsevol tipus de consulta i resposta que es realitzi.
•Allow-query: indica qui pot fer consultes al servidor. Es podria bloquejar a utilitzar el servidor a només certs hosts.
•Recursion: indica que es permet la resolució de noms consultant altres servidors de DNS. Per defecte està activat a ‘yes’.
Totes les opcions que podem definir amb {any}, poden tenir les següents opcions enlloc de any:
•None
•Una adreça IP o una xarxa
•Una llista de hosts en mode ACL
Ho veureu més clar a l’exemple:
Així doncs, amb els 3 valors descrits anteriorment, tindríem un servidor amb cau i recursiu.
Ara amb un dig podríem fer la prova de consulta sobre un domini com per exemple google.es.
Abans de fer la prova però, recordeu que no li hem dit al nostre resolver que consulti al servidor DNS, sinó que tirarà de la informació que ha agafat per DHCP com a adaptador pont. O ho canviem o fem la consulta de dig amb el @127.0.0.1.
Si pel que sigui cal esborrar el valor de la cau del servidor, sempre podem llançar un ‘rndc flush’. També si hem fet canvis al BIND i no volem fer un restart podem fer un ‘rndc reload’.
En mode forward
Per treballar en mode forwarder, només ens cal afegir un parell de valors a la configuració anterior. A través de la directiva ‘forwarders’, ens cal dir quins seran els servidors que farem servir com a tal. I a través de la directiva ‘forward only’, indicarem que el servidor treballa exclusivament en mode forward, de manera que qualsevol consulta anirà cap al forward, independentment de la cau i les zones pròpies.
Cal tenir en compte que al servidor de forward no cal notificar-li res, simplement rebrà moltes consultes d’un servidor determinat. Podeu fer la prova amb un company, i per tal de comprovar les seves peticions, podeu activar els logs de forma provisional amb la comanda ‘rndc querylog’. Aquests aniran al fitxer de syslog. Amb la mateix comanda podeu desactivar-los.
Mode autoritatiu – creació de zona
Arribats a aquest punt, ens interessa configurar el servidor de DNS per tal que sigui l’autoritatiu d’una zona. En aquest cas evidentment actuarà com a servidor primari. Més endavant el configurarem per tal que pugui fer transferència de zona a un secundari i aprendrem com configurar un secundari. Recordeu que al secundari no s’hi apliquen els canvis a la zona, sinó que aquests ‘arriben’ a partir de la transferència de zona del primari.
Per cada fitxer de zona caldrà definir una entrada al fitxer de configuració global de BIND indicant el nom de la zona, el tipus i el nom del fitxer.
Aquí en teniu la sintaxi i un exemple :
Tal com veieu, nom de la zona es refereix a la zona del nom de domini, i el tipus, que en aquest exercici serà master, es refereix al paper que tindrà el servidor DNS respecte a aquella zona. Hint indicarà que cal consultar els servidors arrel (les configuracions en mode cau que hem vist abans) i slave que el paper del servidor DNS es de secundari autoritatiu.
Per últim caldrà indicar on estarà el fitxer de zona, que per conveniència, l’acabarem sempre amb .db. De moment estem parlant sempre de zones de resolució directa, les inversa ho deixem per més endavant.
Així doncs si volem fer que el servidor sigui l’autoritatiu per un domini (de proves) de nom exercici3asix.com, caldrà que:
- Afegim a named.conf.local el següent:
zone “exercici3asix.com” {
notify no;
type master;
file “exercici3asix.com.db”;
};
Amb això simplement li haurem dit al server DNS que és l’autoritatiu, de tipus master, pel domini exercici3asix.com, però encara no hem definit contingut pel fitxer de zona.
Per crear-lo, ens aprofitarem de la plantilla de /etc/bind/db.empty i en farem una copia a /var/cache/bind/exercici3asix.com.db. Allà caldrà crear-li contingut perquè quedi com aquest:
Un cop tot activat, podeu recarregar el servidor amb un ‘rndc reload’ o un ‘systemctl restart bind9’.
Si ara feu una consulta amb el dig sobre www.exercici3asix.com amb @127.0.0.1 us hauria de resoldre correctament.
A nivell de logs, per defecte aquests van a /var/log/syslog etiquetats pel seu procés, el ‘named’, però son altament configurables i classificables. Tot i que queda fora de l’abast de l’exercici, podeu trobar més info i exemples als següents links:
https://ixnfo.com/en/configuring-bind9-logs.html
https://stackoverflow.com/questions/11153958/how-to-enable-named-bind-dns-full-logging