Servidor DNS

De SergiTurWiki

Share/Save/Bookmark
Dreceres ràpides: navegació, cerca
Aquesta wiki forma part dels materials d'un curs
Curs: DissenyXarxesLinux, LinuxAdministracioAvancada
Fitxers: ServidorsDHCPiDNS.pdf (ServidorsDHCPiDNS.odp), Fitxer:DNSIOC.pdf
Repositori SVN: https://svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%c3%a7ada/moodle/sessio6/
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas

Vegeu també Client DNS

Contingut

DNS (Domain Name System)

DNS és un conjunt de protocols i serveis, la funció principal dels quals és l'assignació de dominis d'Internet a adreces IP numèriques. El fet d'assignar un nom (p.e. www.upc.edu) a una adreça IP (p.e 147.83.20.2) permet als usuaris utilitzar noms en comptes d'haver de recordar un codi numèric. Un altre dels avantatges de DNS és que permet abstraure el nom de màquina de la seva adreça IP (poden així variar sense tenir que modificar el nom de la màquina).

Sistemes de noms plans i jeràrquics

Hi ha dos tipus de sistemes de resol·lució de noms:

  • Plans: els noms de màquina de la xarxa són plans i no existeix el concepte de zona. Aquest tipus de sistemes no permeten reutilitzar noms de màquina ni definir els conceptes de domini, subdomini, etc.
  • Jeràrquics: Es poden definir dominis, zones i subdominis de forma que els noms de màquina puguin ser reutilitzats. Per exemple, el nom de màquina www, es pot tornar a utilitzar en diferents dominis. Exemples: www.iesebre.com, www.google.com, www.domini.com...

També podem parlar de sistemes:

  • Centralitzats: un sol servidor de DNS (o servidor que comparteix el fitxer /etc/hosts). Aquest sistemes són poc escabal·lables ja que les peticions al servidor centralitzat augmenten molt amb el nombre de clients.
  • Distribuïts: Múltiples servidors de noms es reparteixen la càrrega de proveir de resol·lució de noms als clients d'una xarxa. És el cas del sistema actual de DNS utilitzat a Internet i moltes xarxes LAN. Els servidors es reparteixen la feina, encarregant-se de zones de la xarxa. Aquests tipus de sistemes normalment s'apliquen a sistemes jerarquics.

Antecedents de DNS. Fitxer /etc/hosts

Per saber més sobre el fitxer /etc/hosts, consulteu l'article Client DNS.

Característiques

  • Domain Name System (DNS) és una base de dades distribuïda i jeràrquica que emmagatzema la informació associada als dominis de xarxes com per exemple Internet.
  • L'assignació de noms a adreces IP és la funcionalitat més comuna però no l'única.
  • Inicialment, DNS va néixer de la necessitat de recordar fàcilment els noms de les màquines. S'utilitzava el fitxer /etc/hosts per traduir IPs en noms de domini. El creixement explosiu de la xarxa va demostrar la poca escalabilitat d'aquest sistema i va sorgir el sistema DNS modern, on la càrrega i la informació de DNS es troba distribuïda de forma jeràrquica a diferents màquines d'Internet.

Terminologia

  • nameserver: Servidor de noms DNS.
  • resolver: client DNS.
  • Domini: Vegeu #Com funcionen els noms de domini.
  • Zona: Normalment les zones són igual o més petites que un domini. Un domini privat o petit com iesebre.com pot tenir suficient amb una sola zona, però els dominis grans com els dominis de primer nivell (.com) o dominis de segon nivells grans (p.ex. hp.com) poden delegar la gestió de la resolució de noms en diferents zones. Un servidor de DNS pot gestionar una o més zones i no totes les zones d'un mateix domini han de ser gestionades per un sol servidor de DNS.
  • autorithy/authoritative: Es diu que un servidor de DNS té autoritat sobre les zones que gestiona
  • delegació: Les zones grans com per exemple una zona de primer nivell com .edu bàsicament el que farà és delegar el domini als servidors de zona dels subdominis.
  • Query: o petició. És la consulta que fa un client o un servidor de DNS a un altre servidor de DNS.
  • Authoritative (autoritzat): Consulteu #Servidor de noms autoritzat

Servidor de noms autoritzat

Un servidor de noms autoritzat (authoritative) és un servidor de noms que dona respostes aconseguides per ell mateix, ja sigui de la seva base de dades (fitxers locals) o de fitxers locals que s'ha obtingut per tècniques de transferència de zona (per exemple un servidor esclau pot ser autoritzat). Els servidors sempre són autoritzats per a una o varies zones d'Internet però no per a totes. Existeix una jerarquia DNS que permet repartir la responsabilitat dels dominis d'Internet entre varies màquines. Quan a un servidor de DNS li fan un pregunta sobre un domini del qual no és el servidor autoritzat, aleshores el servidor de DNS ha de consultar a altres servidors per a obtenir la resposta (en el cas que la pregunta sigui recursiva) o informarà al client de a quin servidor li pot fer la consulta (si la pregunta és iterativa).

És diu que un servidor de DNS és només autoritzat (authoritative-only) quan només respon a preguntes sobre dominis dels quals és un servidor autoritzat.

Tant els servidors esclaus com els servidors masters poden ser servidors autoritzats.

Cada nom de domini ha de tenir assignat un conjunt de servidors dns autoritzats. Aquests servidors es registren al domini pare com a registres NS.

Quan es registra un nom de domini tipus elmeudomini.com cal proveir al top level domain (.com) de la IP de com a mínim un servidor de DNS primari i un de secundari. Això es fa així per garantir que si el servidor de DNS primari falla, al menys tenir l'opció d'un de secundari.

Sovint els servidors primaris són servidors master i els secundaris es configuren com esclaus (encara que pot no ser així ja que no és normatiu).

Resposta autoritzada:

Un servidor DNS autoritzat indica que indica que les respostes són autoritzades utilitzant una marca a les respostes DNS. Aquesta marca s'anomena AA (Authoritative Answer). Aquesta marca la podem observar amb ordres com dig. Per exemple, si feu una consulta al vostre servidor de DNS i no teniu els DNS de la UPC us retornara una resposta normal (no autoritzada):

$ dig www.upc.edu @80.58.61.250

; <<>> DiG 9.6.1-P2 <<>> www.upc.edu @80.58.61.250
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47848
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.upc.edu.			IN	A  

;; ANSWER SECTION:
www.upc.edu.		1953	IN	CNAME	www.upc.es.
www.upc.es.		2987	IN	A	147.83.2.135 

;; Query time: 47 msec
;; SERVER: 80.58.61.250#53(80.58.61.250)
;; WHEN: Tue Jan 26 11:18:18 2010
;; MSG SIZE  rcvd: 69

En canvi si feu la consulta al servidors DNS de la UPC (els podeu obtenir amb $ dig soa www.upc.edu) veureu que hi ha una secció anomenada AUTHORITY SECTION:

$ dig www.upc.edu @147.83.2.10
; <<>> DiG 9.6.1-P2 <<>> www.upc.edu @147.83.2.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47038
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.upc.edu.			IN	A

;; ANSWER SECTION:
www.upc.edu.		8400	IN	CNAME	www.upc.es.
www.upc.es.		3600	IN	A	147.83.2.135

;; AUTHORITY SECTION:
upc.es.			172800	IN	NS	backus.upc.es.
upc.es.			172800	IN	NS	euler.upc.es.

;; ADDITIONAL SECTION:
euler.upc.es.		172800	IN	A	147.83.2.10
backus.upc.es.		172800	IN	A	147.83.2.3

;; Query time: 72 msec
;; SERVER: 147.83.2.10#53(147.83.2.10)
;; WHEN: Tue Jan 26 11:21:02 2010
;; MSG SIZE  rcvd: 142

Com funcionen els noms de domini

Possiblement la millor manera d'entendre com funcionen els noms de domini és amb un exemple. Si volem resoldre la IP per al nom de domini:

  • atonito.lsi.upc.edu

Si executem la comanda

$ ping atonito.lsi.upc.edu
PING atonito.lsi.upc.edu (147.83.20.2) 56(84) bytes of data.

obtindrem que la IP és 147.83.20.2

Les parts que composen aquest nom de domini són:

  • Root. Els noms de domini tenen una estructura d'arbre similar a la dels sistemes de fitxers en linux. Tot nom de domini parteix d'una arrel (representada per . ). Així l'adreça atonito.lsi.upc.edu és en realitat atonito.lsi.upc.edu. (amb punt). El punt indica que la resolució de nom de domini s'ha d'iniciar al servidor root:
         o A.ROOT-SERVERS.NET.
         o B.ROOT-SERVERS.NET.
         o C.ROOT-SERVERS.NET.
         o ...
         o M.ROOT-SERVERS.NET. 
  • TLD (top-level domain). El primer nivell del domini indica el top-level domain (edu). Altres top-level domains són es, org, edu, com, bizz, etc. Existeixen un nombre limitat de dominis de primer nivell gestionats normalment per la ICAAN.
  • Subdominis. La resta de parts del nom de domini són subdominis del domini precedent (lsi és subdomini de upc.edu).
  • Host. Normalment, encara que no sempre, l'última part del nom de domini (p.e. atonito) correspon al nom d'una màquina dins d'un domini (lsi.upc.edu).

NOTA: Els noms de domini no són sensibles a majúscules i minúscules (case sensitive) i per tant poden escriure's de qualsevol de les dues formes.

Root Servers

Els servidors d'arrel de DNS són els servidors principals de DNS i els que saben on estan els servidors de noms per a cadascuna de les zones de més alt nivell d'Internet ( Top Level Domains).

Hi ha tretze servidors arrel d'Internet (cadascun amb les seves repliques de seguretat) distribuïts per tota la xarxa. Aquests servidors reben milers de consultes per segon. Cadascun d'aquests servidors té una lletra (de la A a la M) i amb el nom de màquina lletra.root-servers.net:

Letter Old name Operator Location A B C D E F G H I J K L M
ns.internic.net 	VeriSign 	Dulles, Virginia, USA
ns1.isi.edu 	Information Sciences Institute 	Marina Del Rey, California, USA
c.psi.net 	Cogent Communications 	distribuït utilitzant anycast
terp.umd.edu 	University of Maryland 	College Park, Maryland, USA
ns.nasa.gov 	NASA 	Mountain View, California, USA
ns.isc.org 	Internet_Systems_Consortium 	distribuït utilitzant anycast
ns.nic.ddn.mil 	United States Department of Defense 	Columbus, Ohio, USA
aos.arl.army.mil 	U.S. Army Research Lab (https://www.arl.army.mil/) 	Aberdeen Proving Ground, Maryland, USA
nic.nordu.net 	Autonomica (http://www.autonomica.se/) 	distribuït utilitzant anycast 
	VeriSign 	distribuït utilitzant anycast
	RIPE NCC 	distribuït utilitzant anycast
	ICANN 	Los Angeles, California
	WIDE Project 	distribuït utilitzant anycast

(extret de la wikipedia)

Top Level Domains (TLD)

Un domini de primer nivell és l'última part d'un domini d'Internet; és a dir, les lletres que segueixen l'últim punt del domini. Per exemple, al nom de domini ca.wikipedia.org, el domini de primer nivell és org.

La Internet Assigned Numbers Authority - IANA (Autoritat per l'assignació de nombres a Internet) actualment classifica els dominis de primer nivell en tres tipus:

  • Domini de primer nivell territorial (en anglès: country code top-level domain o ccTLD): És el tipus que té cada estat o territori depenent. Té dues lletres, per exemple jp pel Japò.
  • Domini de primer nivell genèric (en anglès: generic top-level domain o gTLD): En teoria els fan servir les organitzacions d'una classe particular (per exemple, com per organitzacions comercials). Té tres o més lletres. La majoria de gTLDs són d'ús internacional, però per raons històriques els dominis mil i gov són restringits pel govern federal i l'exèrcit dels EUA respectivament. Aquests dominis es subclassifiquen en dominis de primer nivell patrocinats sTLD, com .cat, .aero, .coop i .museum, i dominis de primer nivell no patrocinats uTLD, com .biz, .info, .name i .pro.
  • Domini de primer nivell d'infraestructura: L'únic d'aquest tipus confirmat és arpa, encara que se sap que .root ha existit per raons no conegudes.

Una llista completa dels TLDs existents, en preparació i retirats, es pot trobar a http://ca.wikipedia.org/wiki/Domini_de_primer_nivell.

Com es resol una adreça IP amb DNS en la pràctica?

Tal i com podem observar en el següent gràfic:

el procés de resolució DNS es composa d'una sèrie de peticions a servidors DNS per tal de resoldre la pregunta: quina és la IP de la màquina www.utsc.toronto.ca?. Tal i com veurem més endavant, el primer pas per resoldre aquesta pregunta és consultar la cache. Si la cache no disposa de la informació aleshores la petició es redirecciona a algun dels servidors root. Aquest procés es repeteix fins trobar amb el servidor DNS final capaç de contestar a la pregunta.

En el nostre exemple el procés seria:

  • El client demana al root server (A.ROOT-SERVERS.NET) l'adreça de la màquina atonito.lsi.upc.edu. Si executem:
$ dig +norec +noques +nostats +nocmd atonito.lsi.upc.edu @A.ROOT-SERVERS.NET.

obtindrem una llista de les màquines que resolen els dominis .net

    • Repetim el procés. Aquest cop executem:
$ dig +norec +noques +nostats +nocmd atonito.lsi.upc.edu @L3.NSTLD.COM. 

Un altre cop obtindrem una llista de les màquines que resolen el domini upc.edu (backus.upc.es i euler.upc.es).

  • Repetim el procés i executem:
$ dig +norec +noques +nostats +nocmd atonito.lsi.upc.edu @backus.upc.es. 

Finalment aquest servidor DNS és capaç de resoldre la IP.

Peticions iteratives versus peticions recursives

Si us fixeu en l'exemple de l'apartat anterior, no tots els servidors de DNS que hi intervenen realitzen la mateixa tasca. De fet, excepte el servidor local, la resta de servidors no responen a la pregunta si no que delegen la feina a una altre servidor. En canvi el servidor local, realitza de forma recursiva la mateixa pregunta a diferents servidors. Això és així per què la petició del client al servidor local ha estat una petició recursiva.

Hi ha dos tipus de peticions (querys):

  • Recursives: Es demana al servidor que sigui ell qui proveeixi d'una resposta a la petició o en tot cas que mostri un missatge d'error si no pot respondre a la petició.
  • Iteratives (no recursives): El servidor pot delegar la resposta a la petició a un altre servidor. El servidor respon amb la millor resposta possible que coneix (poden intervenir les memòries cau...). Sempre es respon amb tots els servidors de DNS possibles i és que hi ha fet la petició qui decidirà a qui fer la següent petició.

Normalment les peticions de clients a servidors de DNS locals són recursives i les peticions entre servidors de DNS són iteratives. Aquestes últimes només succeïxen quan el servidor local no té la resposta a la petició (per no tenir-la en memòria cau i no ser l'encarregat de la zona a la qual pertany la petició).

Consulteu nslookup per veure com fer una consulta no recursiva.

Consulteu Servidor_DNS#Configurar_el_nostre_servidor_per_acceptar_peticions_recursives per veure quines màquines poden fer peticions recursives.

Com s'escull entre els diferents servidors d'una zona?

Com ja hem comentat, pot haver-hi més d'un servidor que siguin els encarregats d'una zona. Quin escollim? Doncs bé DNS utilitza el que s'anomena RoundTrip Time (RTT). Cada cop que un servidor fa una consulta a un altre servidor de DNS, es mesura quan temps tarda en rebre la resposta. Si un servidor de DNS rep una resposta conforme una zona està gestionada per dos servidors del quals encara no coneix el seu RTT, aleshores pregunta a tots dos per obtenir un valor de RTT. El pròxim cop només preguntarà al que té el RTT més baix (el més ràpid).

Cache, ttl i propagació

L'alt volum de peticions que genera un sistema com DNS ha provocat que els dissenyadors busquessin una forma alternativa per tal de reduir la carrega dels servidors DNS. El mecanisme utilitzat és que un cop un client de DNS rep una resposta de resolució de nom de domini d'un servidor DNS emmagatzema aquesta resposta en una cache durant un cert temps anomenat TTL (time to live).

NOTA: tingueu en compte que un servidor no pot memoritzar en memòria cau un valor de forma indefinida. Això provocaria que els canvis no es propaguessin mai

La contrapartida d'aquest sistema de cache és que apareix l'efecte de propagació. La cache i el TTL provoquen que si un nom de domini canvia d'IP aquest canvi tardi un cert temps en propagar-se per tot els servidors DNS del mon (en alguns casos pot arribar a tardar 3 dies).

Consulteu l'apartat cache per saber per que hi ha dos TTL (negatiu i positiu).

Informació addicional:

Cache

En el procés de resolució vist als apartats anteriors hem suposat que no intervenen les memòries cau (cache). Per optimitzar el procés, el servidor local pot referir-se directament al servidor que té l'autoritat de la zona demanada, sempre i quan sàpiga quin és el servidor de DNS encarregat d'aquesta zona. D'aquesta manera les peticions són més ràpides.

A l'exemple anterior:

www.utsc.utoronto.ca

Li pot preguntar directament, si el té en cau, al servidor de DNS de la zona:

utsc.utoronto.ca

Sinó al servidor de la zona:

utoronto.ca

i així fins arribar a l'arrel. Aquí serà lo més lluny que arribarà ja que tot servidor de DNS té una llista dels servidors root de DNS.

Hi ha dos tipus de cache:

  • Cache positiva: On s'emmagatzemen les IP de les màquines que s'han resolt correctament
  • Cache negativa: On s'emmagatzemen les màquines que no han tingut resolució.

Sol haver-hi un TTL (Time To Live) per a cada tipus de cache.

DNS Records

NOTA: També coneguts com a resource records
  • SOA record: Especifica el servidor de DNS que proveïx d'informació de la zona (authoritative server). Controla paràmetres com el correu de l'administrador de la zona, el número de sèrie, i temps per al refresc de la zona. També conegut com start of authority record.
  • NS record: Assigna un nom de domini a un servidors de DNS o llista de servidors encarregats del domini (authoritative DNS servers). També conegut com name server record.
  • A record: tradueix una adreça de màquina a la seva adreça IP de versió 4 (IPv4) (utilitzat per a les resolucions directes). També anomenat address record.
  • AAAA record: tradueix una adreça de màquina a la seva adreça IP de versió 6 (IPv6). També anomenat IPv6 address record
  • CNAME record: alias d'un nom a un altre, L'alias a d'apuntar a un registre de tipus A. També anomenat canonical name record. El registre al qual apunta pot ser local al servidor de DNS o un extern.
  • MX record: Assigna un nom de domini a un servidor o una llista de servidors de correu d'aquest domini. També anomenat mail exchange record.
  • PTR record: Assigna una adreca IPv4]] a el nom canònic d'una màquina (utilitzat per a les resolucions inverses). Al establir un registre PTR per a una màquina en un xarxa privada (in-addr.arpa) s'activa la resolució inversa per aquesta adreça. Això permet que al cridar l'host des de la xarxa local es cridi la seva IP pública i no pas la privada (P. ex. un servidor web accessible des de la xarxa local i des d'Internet). També conegut com pointer record.
  • TXT record: Permet a l'administrador afegir registres DNS de text. Proporciona suport per a especificacions com "Sender Policy Framework" o "DomainKeys".
  • NAPTR records: Nou tipus igual que suporta expressions regulars. També conegut com Naming Authority Pointer.

Altres tipus de registres proveïxen informació (LOC record dóna la localització física d'un servidor).

Consulteu les ordres nslookup i dig per veure com fer peticions (querys DNS) concretes de registres.

TCP vs UDP

Els RFC indiquen que el port UDP s'ha d'utilitzar per a les peticions (querys) DNS de clients i el port TCP per a les transferències de zona.

Ara bé, Windows té un algoritme una mica impacient, la primera petició és fa amb UDP, però les següents es fan amb TCP.

NOTA: Cal tenir en compte que si fem transferències de zona o tenim clients Windows val la pena deixar el port 53 de TCP obert en el nostre firewall

BIND (Berkeley Internet Name Domain)

Bind és el servidor DNS utilitzant més freqüentment, sobretot en sistemes operatius tipus Unix. De fet, és l'standard de facto.

Actualment hi ha dues versions de bind. Bind a seques i BIND 9 (release 9 de Bind). BIND 9 va ser reescrit des de zero per millorar bind i per afegir noves funcionalitats i suport per a DNSSEC (DNS Security Extensions). Les versions antigues de bind a l'igual que passa amb altres programes com sendmail són coneguts pel gran nombre de vulnerabilitats conegudes. Bind 9 té un historial de vulnerabilitats més baix.

Zones versus dominis

Una zona és un punt de delegació dins d'un arbre DNS. Una zona esta formada per diferents parts contigües de l'arbre de domini sobre les quals un servidor de DNS té la informació completa i en té l'autoritat. La zona conté tota la informació des de un punt de l'arbre de domini cap avall excepte aquelles zones que estan delegades a altres servidors DNS. Un punt de delegació esta marcat per un o més registres NS a la zona pare.

Tipus de servidors

  • Primary masters: Llegeix el fitxer de zona d'un fitxer del propi servidor.
  • Secondary masters o slave: Llegeix el fitxer de zona del master server que té autoritat a la zona. També son coneguts com a servidors esclaus.

El procés de connexió del secundari al principal per tal d'obtenir la informació de la zona s'anomena transferència de zona (zone transfer). Tan el servidor primari com el secundari o secundaris són servidors autoritzats de la zona.

Aquesta relació facilita la gestió de la zona. Només cal mantenir un sol fitxer de zona al servidor primari i tota la resta de servidors secundaris es sincronitzen.

Cal tenir en compte que més aviat parlem de master o de'esclau quan parlem de zones i no pas servidors. Un servidor pot ser esclau d'una zona i master d'un altre. La definició de si una zona és master o esclava es fa al fitxer principal de configuració (o a named.conf.local en cas de Debian/Ubuntu):

Exemple master:

zone "prova.eu" in {
       type master;
       file "db.prova.edu";
};


Exemple esclau:

zone "prova.eu" in {
     type slave;
     file "bk.prova.eu";
     masters { 194.249.232.3; };
};
NOTA: Sovint a l'esclau s'indica a quin fitxer es guardarà la zona transferida:
zone "informatica.iesebre.com" {
       type slave;
       masters { 
               192.168.0.40;
               }; 
       file "slave/informatica.iesebre.com.hosts";
       };

El fitxer es pot indicar com una ruta absoluta o relativa a la instal·lació del servidor, en l'exemple:

/var/lib/named/slave/informatica.iesebre.com.hosts

que conté:

# cat /var/lib/named/slave/informatica.iesebre.com.hosts
$ORIGIN .
$TTL 86400	; 1 day
informatica.iesebre.com	IN SOA	ns1.informatica.iesebre.com. informatica.iesebre.com. (
				2007040302 ; serial
				10800      ; refresh (3 hours)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				86400      ; minimum (1 day)
				)
			NS	ns1.informatica.iesebre.com.
$ORIGIN informatica.iesebre.com.
INSEbreXen1		CNAME	xen
mediawiki		A	192.168.7.182
negrell			A	192.168.2.2
nemesis			A	192.168.0.40
			A	192.168.2.1
			A	192.168.7.182
ns			A	192.168.7.182
profes			A	192.168.2.11
proxy			A	192.168.7.182
www			A	192.168.7.182
xen			A	192.168.2.10
NOTA: L'usuari que utilitza el bind per a executar-se (el podeu consultar amb $ ps aux

Consulteu:

Servidor_DNS#Configuraci.C3.B3_de_zones_esclaves

Per obtenir més detalls sobre com configurar un servidor DNS esclau i com es fan les transferències de zona entre servidors DNS.

Tipus de zones

  • IN: IN ve d'INternet

Actualment gairebé es pot dir que l'únic tipus de zona que s'utilitza és Internet.

Directives de bind

  • $INCLUDE: Serveix per incloure altres fitxers. Per exemple incloure un fitxer de xona dins d'un altre zona
  • $ORIGIN: Estableix el nom del domini que s'utilitzarà per a tots els noms de màquina abreviats (sense punt final) . Normalment no s'utilitza ja que el nom del domini ja s'ha establert al fitxer named.conf però us podeu trobar sovint exemples amb aquesta directiva ja que mostra de forma explicita quin és el nom de domini.
  • $TTL: Estableix el time to live per defecte. És una variable general ja que cada zona pot sobreescriure aquest valor.


Instal·lació de bind

Per instal·lar bind hem d'executar:

$ sudo apt-get install bind9
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Reading state information... Hecho
Se instalarán los siguientes paquetes NUEVOS:
  bind9
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 0B/300kB de archivos.
Se utilizarán 741kB de espacio de disco adicional después de desempaquetar.
Seleccionando el paquete bind9 previamente no seleccionado.
(Leyendo la base de datos ...  
21767 ficheros y directorios instalados actualmente.)
Desempaquetando bind9 (de .../bind9_1%3a9.3.2-2ubuntu3_i386.deb) ...
Configurando bind9 (9.3.2-2ubuntu3) ...
Adding group `bind' (111)...
Done.
Adding system user `bind' with uid 105...
Adding new user `bind' (105) with group `bind'.
Not creating home directory `/var/cache/bind'.
wrote key file "/etc/bind/rndc.key"
 * Starting domain name service...                                       [ ok ]

Hi ha tres fets a destacar de la instal·lació:

  • Es crea un usuari i un grup anomenat bind per executar el servidor de DNS.
  • La base de dades de DNS no es crea (la instal·lació per defecte és un servidor DNS de cache)
  • S'inicia el dimoni/servei bind.

Tal i com suggereix apt-get, també és recomanable disposar dels paquets bind-doc i dnsutils, amb documentació i eines per a DNS

$ sudo apt-get install bind9-doc dnsutils

Podem consultar els fitxers que instal·la bind amb la comanda:

$ dpkg -L bind9

Tenim les següents comandes/aplicacions/servidors:

$ dpkg -L bind9 | grep bin
/usr/sbin
/usr/sbin/named
/usr/sbin/rndc
/ usr/sbin/rndc-confgen
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-signzone
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone

I els següents fitxers de configuració:

$ dpkg -L bind9 | grep etc
/.
/etc
/etc/bind
/etc/bind/db.0
/etc/bind/db.255
/etc/bind/db.empty
/etc/bind/zones.rfc1918
/etc/bind/db.127
/etc/bind/db.local
/etc/bind/db.root
/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options
/etc/init.d
/etc/init.d/bind9

La resta de fitxers són manuals i documentació (carpeta /usr/share) i la base de dades /var/cache/bind. De la documentació cal destacar la FAQ amb preguntes i respostes:

$ cd /usr/share/doc/bind9
$ gunzip FAQ.gz
$ nano FAQ

i els fitxers README:

$ cd /usr/share/doc/bind9
$ gunzip README.gz
$ gunzip README.Debian.gz
$ nano README
$ nano README.Debian

Instal·lació a OpenSuse

El podem instal·lar amb zypper:

# zypper install bind

Cal tenir en compte que els fitxers instal·lats són diferents als de Debian:

# rpm -ql bind
/etc/apparmor.d
/etc/apparmor.d/usr.sbin.named
/etc/init.d/named
/etc/named.conf
/etc/named.conf.include
/etc/rndc.key
/etc/slp.reg.d
/etc/slp.reg.d/bind.reg
/etc/sysconfig/SuSEfirewall2.d/services/bind
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-signzone
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/rcnamed
/usr/share/bind
/usr/share/bind/createNamedConfInclude
/usr/share/bind/ldapdump
/usr/share/man/man5/named.conf.5.gz
/usr/share/man/man8/dnssec-keygen.8.gz
/usr/share/man/man8/dnssec-signzone.8.gz
/usr/share/man/man8/named-checkconf.8.gz
/usr/share/man/man8/named-checkzone.8.gz
/usr/share/man/man8/named-compilezone.8.gz
/usr/share/man/man8/named.8.gz
/var/adm/fillup-templates/sysconfig.named-named
/var/lib/named/127.0.0.zone
/var/lib/named/dyn
/var/lib/named/etc/localtime
/var/lib/named/etc/named.conf.include
/var/lib/named/localhost.zone
/var/lib/named/master
/var/lib/named/root.hint
/var/lib/named/slave

El fitxer d'inicialització system V té també un altre nom:

# /etc/init.d/named restart
..dead
Shutting down name server BIND - Warning: named not running!                                                                                                          done
Starting name server BIND

Funcions d'un servidor DNS i tipus de configuracions

Hi ha dos possibles configuracions principals d'un servidor DNS per a una xarxa:

  • Cau de resolució de noms: El servidor de DNS només fa de memòria CAU de les resolucions de nom de la nostra xarxa. Cada cop que hi ha una petició de resolució de nom de domini el servidor consulta la seva memòria cau. Si la resolució està a la memòria ell mateix envia la resposta, sinó segueix el procés normal de resolució de noms. També s'anomena FORWARDING.
  • Servidor de noms: El servidor de DNS és responsable de la resolució de noms d'una o més zones. Les zones poden ser xarxes privades o xarxes públiques. Normalment aquest tipus de servidors DNS també fan de memòria cau.

Hi ha una tercera opció que és tenir servidors de DNS que només fan de "routers" d'altres servidors de DNS i que quan reben una petició de resolució de noms l'únic que fan és redirigir-la a un servidor DNS central. Això s'utilitza en xarxes grans per controlar el tràfic de DNS:

Amb Bind, podem activar el cau modificant el fitxer named.conf o named.conf.options a Debian/Ubuntu:

forward first;
  forwarders {
        10.1.0.2;
        10.1.0.1;
  };
NOTA: Fer de servidor cau no implica que no podem gestionar també un domini. Es poden combinar les dues opcions.

Control del servei bind. Execució, parada, status i reconfiguració de BIND

Seguint els estàndards de Debian GNU/Linux (basat en el sistema d'scripts d'inicialització SystemV (http://en.wikipedia.org/wiki/System_V)) l'script de control del dimoni bind és:

/etc/init.d/bind9

Les accions que podem fer amb el servei són start|stop|reload|restart|force-reload.

Cada cop que fem un canvi a la configuració de bind haurem de fer un restart o, millor encara, un reload del servei:

$ sudo /etc/init.d/bind9 reload

La comanda reload és equivalent a executar:

$ sudo rndc reload

Veieu la secció Comanda rndc per a més informació sobre aquesta comanda.

En altres sistemes el fitxer és /etc/init.d/named però el comportament és el mateix.

Tal com podem veure executant:

$ sudo updatedb
$ locate bind9 | grep rc
/etc/rc0.d/K85bind9
/etc/rc1.d/K85bind9
/etc/rc2.d/S15bind9
/etc/rc3.d/S15bind9
/etc/rc4.d/S15bind9
/etc/rc5.d/S15bind9
/etc/rc6.d/K85bind9

El serveis DNS s'executa a partir del nivell 2 (cal destacar que no està disponible al nivell SINGLE USER MODE rcS.d).

Podeu trobar més informació a l'article Configuració de serveis en Linux

Ports

Els ports de DNS són:

$ cat /etc/services | grep domain
domain          53/tcp                          # name-domain server
domain          53/udp

El port UDP s'utilitza per resoldre consultes (querys) i el TCP per a les transferències de zona.

Podeu comprovar si una màquina té DNS amb la comanda nmap:

$ sudo nmap localhost
[sudo] password for sergi: 

Starting Nmap 4.20 ( http://insecure.org ) at 2008-01-24 19:28 CET
Interesting ports on localhost (127.0.0.1):
Not shown: 1687 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
...

$ sudo nmap -sU localhost -p 53

Starting Nmap 4.20 ( http://insecure.org ) at 2008-01-24 19:29 CET
Interesting ports on localhost (127.0.0.1):
PORT   STATE         SERVICE
53/udp open|filtered domain

Nmap finished: 1 IP address (1 host up) scanned in 2.049 seconds

Configuració de Bind

Els fitxers de configuració del dimoni bind (seguint els estàndards de Debian GNU/Linux) es troben a la carpeta /etc/bind.

El fitxer principal de configuració és el fitxer etc/bind/named.conf. Si consultem el fitxer veurem que està fragmentat en tres parts: ell mateix i els fitxers /etc/bind/named.conf.local i el fitxer /etc/bind/named.conf.options.

NOTA: En altres sistemes Linux el fitxer named.conf el trobem directament a la carpeta /etc. també és comú que no hi hagi la divisió de la configuració en tres fitxers i estigui tot junt en un sol fitxer /etc/named.conf.

Per modificar la configuració de bind o bé canviem les opcions o bé modifiquem o creem noves zones. Les zones especifiquen les parts del nom de domini de les quals s'encarrega un servidor de DNS, normalment les zones es corresponen amb dominis tot i que no necessàriament ha de ser així (un domini sencer pot estar controlat per una o més zones en diferents servidors DNS). Si veiem les zones per defecte del fitxer named.conf:

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

Aquesta zona és la zona arrel. El mínim que ha de tenir un servidor de DNS (que funcioni com a cache i no controli zones pròpies) és aquesta zona per delegar les resolucions de noms encara que no tingui el cache. Consulteu la secció sobre el fitxer /etc/bind/db.root.

La resta de zones són les que el servidor de DNS controla (es diu que el servidor de DNS és authoritative):

La zona de localhost i la seva resolució inversa (127.0.0.0):

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

És obligatòria de forma similar el que passa amb els fitxers /etc/hosts i també ens proporciona la resolució del nom de màquina localhost:

$ cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       ubuntu

I també de la resolució inversa del domini de difusió (broadcast) (ips reservades per a xarxa i braodcast):

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

Recursos:

Els següents apartats expliquen en més detall els fitxers de configuració de bind.

Exemple de fitxer de configuració de zona

> cat /var/lib/named/master/iesebre.com
$TTL 2D
@	IN	SOA	ns.iesebre.com. informatica.iesebre.com. (
			2007040302
			3H
			1H
			1W
			1D )

iesebre.com.	        IN      NS	ns.iesebre.com.
ns.iesebre.com.        IN      A       192.168.0.9
www.iesebre.com.	IN	A	192.168.0.9
mail.iesebre.com.	IN	A	192.168.0.9
pop.iesebre.com.	IN	A	192.168.0.9
NOTA: IN ve d'Internet i és la classe de dades DNS més utilitzada

La primera línia indica el TTL o TIME TO LIVE.

Després ve el registre SOA que ocupa múltiples línies. Cal assegurar-se que el nom de la zona és troba a la primera columna. És pot utilitzar @ (en aquest exemple equival a iesebre.com.) i s'utilitza el nom de la zona especificat al fitxer principal de configuració named.conf o es pot posar el nom de la zona directament.

Els camps:

ns.iesebre.com. informatica.iesebre.com. 

Són primer el nom del servidor DNS primari de la zona (cal definir més avall la IP de la màquina amb un registre A) i després el correu electrònic de l'administrador de la zona. El correu s'interpreta el primer punt com una arroba:

informatica.iesebre.com. --> informatica AT iesebre.com          (el AT és per evitar SPAM!)

sion.alumnat. root.sion.alumnat.

IMPORTANT: Si es posa el nom de la zona cal no oblidar-se del punt final! Si no hi ha punt aleshores es considera una abreviatura. Per exemple a un fitxer db.iesebre.com:
www.iesebre.com IN A 192.168.0.9

es consideraria com la màquina:

www.iesebre.com.iesebre.com

Es a dir també podríem haver posat:

 www	IN	A	192.168.0

és equivalent a:

www.iesebre.com.	IN	A	192.168.0.9

Després ve el nom del servidor de DNS primari per a la zona (també acabat en punt) i finalment el correu electrònic del responsable de la zona (el primer punt es substitueix per una @). Es poden utilitzar correus Unix (o posar d'inventats, no es comprova que existeixi realment).

El parèntesi s'utilitza per tal de poder expandir el registre SOA en múltiples línies. Els valors entre parèntesi son importants per als servidors esclaus. Consulteu

Servidor_DNS#Registres_SOA_del_servidor_master_i_zones_esclaves

Després ens trobem amb el registre NS o registres. Cal indicar un registre NS er cada servidor de DNS responsable (authoritative) de la zona, siguin primaris o secundaris. En el nostre cas només hi ha un servidor:

iesebre.com.	        IN      NS	sion.iesebre.com.
NOTA: Alternativament, si hem utilitzat una arroba per indicar el nom del domini, ens podem saltar, no posar, el nom del domini:
         	        IN      NS	sion.iesebre.com.

Després hi ha 3 registres A o registres de host:

www.iesebre.com.	IN	A	192.168.0.9
mail.iesebre.com.	IN	A	192.168.0.9
pop.iesebre.com.	IN	A	192.168.0.9

Si utilitzem l'arroba, nomes cal posar:

www	IN	A	192.168.0.9
mail	IN	A	192.168.0.9
pop	IN	A	192.168.0.9

Noms de màquina

Hi ha dos tipus de noms:

  • CNAME: Canonical Names, son el nom principal. Algunes màquines poden tenir múltiples IP (multihomed). S'especifiquen amb registres A
  • Alias: Són altres noms de les màquines, s'especifiquen amb:
alias CNAME CanonicalName

Mai un alias pot sortir a la dreta (només ho poden fer els noms canònics).

NOTA: Els registres PTR que indiquen les resolucions inverses només es poden fer amb canonical names

Multihomed hosts

Una màquina multihomed és una màquina amb més d'una IP vàlida (ja sigui per que tingui múltiples interfícies de xarxa o interfícies virtuals amb ip aliasing). S'indiquen de la següent manera:

www.iesebre.com.	IN	A	192.168.0.9
www.iesebre.com.	IN	A	192.168.0.10
...
NOTA: Amb xarxes segmentades, si et donen la IP d'una màquina d'un segment de xarxa al que no és té accés, aleshores no hi tindrem accés

Round robin i address sorting

  • Roud Robin: Quan s'assignen múltiples IP a un servidor de DNS, la teoria diu que aleshores els clients DNS al obtenir dos (o més) IP com a opcions de resolució de nom d'una màquina concreta, han d'anar alternant les opcions possibles. Això sovint s'utilitza per fer un balanceig de càrrega
  • Address Sorting: es parla d'address sorting quan controlem en quin ordre s'utilitzen les diferents IPs que ens proporciona un servidor de DNS

per a un nom de màquina concret. Cal tenir en compte que l'address sorting pot anular el Round Robin i per tant el balanceig de càrrega.

NOTA: Cal tenir en compte que molts clients, per defecte, utilitzen primer aquelles IP que són del segment de xarxa o segments de xarxa als que està connectada la màquina client.

Comentaris

Als fitxers de configuració:

/* This is a C-style comment */
// This is a C++-style comment
# This is a shell-style comment

Als fitxers de zona:

Comentari

Abreviatures

Als fitxers de zona es consideraren abreviatures tots els noms que no acabin en punt, per exemple:

www    IN A 192.168.0.9

és equivalent a:

www    IN A 192.168.0.9

L'arroba es pot utilitzar com a nom de domini:

@ IN SOA dns.prova.eu. al.prova.eu. (

                         1        ; Serial
                         3h       ; Refresh after 3 hours
                         1h       ; Retry after 1 hour
                         1w       ; Expire after 1 week
                         1h )     ; Negative caching TTL of 1 hour

També es pot repetir nom anterior:

www   IN A     192.249.249.1
      IN A     192.253.253.1

Noms de màquina correcta

Hi ha unes quantes normes a complir amb els noms canònics, segons el RFC 952

NOTA: No s'aplica als CNAMES que poden tenir qualsevol caràcter ASCII imprimible

Les normes són:

  • Caràcters alfanumèrics
  • Guions
NOTA: Els guions baixos no són vàlids

Fitxer /etc/bind/named.conf

NOTA: En algunes distribucions i en versions antigues de BIND el fitxer es troba a /etc/named.conf

Aquest fitxer és el fitxer principal de configuració de bind. En la seva versió per a Debian, aquest fitxer no l'haurem de modificar mai ja que només té /etc/bind/named.conf.options i les zones per defecte (que se suposa que mai s'han de tocar) i delega les opcions i la creació de zones pròpies als fitxers /etc/bind/named.conf.local respectivament.

$ cat /etc/bind/named.conf
................................................

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

....................

include "/etc/bind/named.conf.local";

El millor recurs per conèixer totes les opcions del fitxer named.conf és el manual de Linux.

Fitxer /etc/bind/named.conf.options

$ cat /etc/bind/named.conf.options 
 options {
       directory "/var/cache/bind";
 
       // If there is a firewall between you and nameservers you want
       // to talk to, you might need to uncomment the query-source
       // directive below.  Previous versions of BIND always asked
       // questions using port 53, but BIND 8.1 and later use an unprivileged
       // port by default.
 
       // query-source address * port 53;
 
       // If your ISP provided one or more IP addresses for stable 
       // nameservers, you probably want to use them as forwarders.  
       // Uncomment the following block, and insert the addresses replacing 
       // the all-0's placeholder.
 
       // forwarders {
       //      0.0.0.0;
       // };
 
       auth-nxdomain no;    # conform to RFC1035
 
       // By default, name servers should only perform recursive domain
       // lookups for their direct clients.  If recursion is left open
       // to the entire Internet, your name server could be used to
       // perform distributed denial of service attacks against other
       // innocent computers.  For more information on DDoS recursion:
       // http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0987
 
       allow-recursion { localnets; };
 
       // If you have DNS clients on other subnets outside of your
       // server's "localnets", you can explicitly add their networks
       // without opening up your server to the Internet at large:
       // allow-recursion { localnets; 192.168.0.0/24; };
  
       // If your name server is only listening on 127.0.0.1, consider:
       // allow-recursion { 127.0.0.1; }; 

Normalment el que sempre es modifica d'aquest fitxer és l'apartat forwarders i és on s'especifiquen els servidors DNS del nostre proveïdor de serveis.

Fitxer /etc/bind/named.conf.local

En aquest fitxer hem de configurar les zones de les que volem que el servidor de DNS s'encarregui. Un exemple pot ser (extret de http://www.iesebre.com/~ocastell/Xarxes_i_Linux/):

zone "0.168.192.in-addr.arpa" {
  type master;
  file "/var/lib/named/192.168.0.rev";
  };
zone "1.168.192.in-addr.arpa" {
  type master;
  file "/var/lib/named/192.168.1.rev";
  };
zone "iesdeltebre.net" {
  type master;
  file "/var/lib/named/iesdeltebre.net.hosts";
  };
zone "intracentre" {
  type master;
  file "/var/lib/named/intracentre.hosts";
  };

Aquí es configuren dues xarxes privades de classe C (192.168.0.0/24 i 192.168.1.0/24). Els noms de les zones de resolució inverses en cada cas són iesdeltebre.net i intracentre.

$ttl 38400                                                    
0.168.192.in-addr.arpa. IN   SOA   s-207. ocastell (          
             2003062504                                                     
             10800                                                          
             3600                                                           
             604800                                                         
             38400 )                                                              
2.0.168.192.in-addr.arpa.  IN   PTR    s-207.iesdeltebre.net. 
2.0.168.192.in-addr.arpa.  IN   PTR    iesdeltebre.net.

$ttl 38400
iesdeltebre.net.  IN     SOA   s-207. ocastell (
              2003062502
              10800
              3600  
              604800
              38400 )
iesdeltebre.net.       IN NS     s-207.
0.168.192.in-addr.arpa.    IN   NS    s-207.
s-207.iesdeltebre.net. IN    A      192.168.0.2
iesdeltebre.net.        IN CNAME s-207
www.iesdeltebre.net.    IN CNAME s-20


Fitxer /etc/bind/db.root

Aquest fitxer conté la llista de servidors arrel de DNS:

$ cat /etc/bind/db.root
.................................

;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.     3600000 IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     3600000 IN      A       192.228.79.201
C.ROOT-SERVERS.NET.     3600000 IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     3600000 IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     3600000 IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     3600000 IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     3600000 IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     3600000 IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     3600000 IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     3600000 IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     3600000 IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     3600000 IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     3600000 IN      A       202.12.27.33
................................

En aquest cas el servidor delega la resolució de noms arrel (NS).

El primer pas per tal de resoldre un nom de domini és consultar en un servidor arrel de DNS el domini de nivell principal (TLD) corresponent. A Bind la llista de servidors principals es manté al fitxer /etc/bind/db.root (en alguns sistemes/versions també s'anomena root.hints). Aquest fitxer s'obté amb la comanda:dig:

$ dig ns . @a.root-servers.net

A l'apartat maintenance del HOW-TO-DNS hi ha un script per tal de mantenir actualitzat aquest fitxer.

Fitxer /etc/bind/zones.rfc1918

En aquest fitxer s'especifiquen les xarxes privades tal i com es defineix al RFC 1918.

$ cat zones.rfc1918 
zone "10.in-addr.arpa"      { type master; file "/etc/bind/db.empty"; };  //CLASE A

//Adreces de classe B 
zone "16.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };  
zone "17.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };

//Adreces de classe C
zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };


Configuració de zones

Primer algunes qüestions de sintaxi dels fitxers de zona:

  • Els comentaris es fan amb el caràcter ; i poden estar al principi de línia o al final.
  • El caràcter @ es pot utilitzar per a referir-se a la zona que estem configurant
  • La comanda $GENERATE serveix per crear loops. Exemple:
$GENERATE 0-19 host${0,2}         A       192.168.0.${10,2}

Ens genera les següents 20 línies:

host00         A       192.168.0.10
host01         A       192.168.0.11
host02         A       192.168.0.12
..........
host19        A       192.168.0.29


Per crear una zona de resolució directa es pot utilitzar una plantilla com la següent:

;; Aquí pots posar una descripció de la zona
$TTL 1H 
@                       IN      SOA     servidor_dns.nom_del_domini_amb_punt_final. hostmaster (
                               200703021       ; serial
                               8H              ; refresh for slaves
                               3H              ; retry
                               4W              ; expire time at slaves
                               1H              ; negative TTL
                               )
 
                               IN      NS      servidor_dns.nom_del_domini_amb_punt_final.
;;Descomenteu la següent línia si teniu servei correu
;;                            IN      MX      10 nom_maquina_correu.nom_del_domini_amb_punt_final.
;;;;;;;;;;;;;;;;;;;;;
; Descripció de les traduccions
;;;;;;;;;;;;;;;;;;;;;;   

;;Noms de màquines amb A
;;Descomenteu la següent línia si voleu afegir un Gateway 
;gateway                         IN      A       adreça_ip_del_gateway (192.168.0.1?)  
;;Descomenteu les següents línies si voleu afegir màquines 
;host1                           IN      A       adreça_IP_host1
;host2                           IN      A       adreça_IP_host2
;host3                           IN      A       adreça_IP_host3 

; Alternativament podem utilitzar una iteració  amb GENERATE
;$GENERATE 0-19 hosts${0,2}      A       192.168.0.${0,2}

;Els servidors de noms i de correu electrònic han de ser host A
;correu                          IN      A       ip_del_servidor_de_correu
;domain                          IN      A       ip_del_servidor_de_DNS

;; Defineix dominis de serveis amb CNAMEs. IMPORTANT: es posen noms de màquina que resolgui DNS i no IPs.
;www                             IN      CNAME   nom_host_web
;ldap                            IN      CNAME   nom_host_ldap
;ssh                             IN      CNAME   nom_host_ssh

Les primeres línies indiquen quina és la zona, i qui és el responsable (hostmaster, que és equivalent a hostmaster@domini.com) i altres informacions importants de la zona. És important destacar el número de sèrie que és important actualitzar (augmentar en un nombre) cada cop que s'actualitza el fitxer (important per temes de sevidors DNS secundaris i propagacions).


El nombre serial té el següent: any + mes + dia + ordinal_que_incrementes si modifiques el DNS més d'un cop al dia.

El fitxer el podem anomenar /etc/bind/db.nom_del_nostre_domini i afegir les següents linies al fitxer /etc/bind/named.conf:

zone "nom_del_nostre_domini" {
       type master;
       file "/etc/bind/db.nom_del_nostre_domini";
};

Per crear una zona de resolució inversa és pràcticament igual (suposem una xarxa privada de classe C 192.168.0.0/24):

;; Aquí pots posar una descripció de la zona
$TTL 1H 
@                       IN      SOA     nom_del_domini_amb_punt_final. hostmaster (
                               2003080101      ; serial
                               8H              ; refresh for slaves
                               3H              ; retry
                               4W              ; expire time at slaves
                               1H              ; negative TTL
                               )
 
                               IN      NS      nom_del_domini_amb_punt_final.
;;;;;;;;;;;;;;;;;;;;;;
; Descripció
;;;;;;;;;;;;;;;;;;;;;; 

;;Noms de màquines amb A
;; Descomenteu aquesta línia si voleu afegir Gateway 
;adreça_IP_gateway             IN      PTR     gateway.nom_del_domini_amb_punt_final.
;Exemple
;1                             IN      PTR     gateway.nom_del_domini_amb_punt_final.
;;Descomenteu aquesta línia si voleu afegir màquines (hosts)
;adreça_IP_host1               IN      PTR     host1.nom_del_domini_amb_punt_final.
;Exemples (només és necessària la part de la ip corresponent a màquina  )
;2                             IN      PTR     host1.nom_del_domini_amb_punt_final.
;3                             IN      PTR     host2.nom_del_domini_amb_punt_final.
;4                             IN      PTR     host3.nom_del_domini_amb_punt_final.
 
; Alternativament podem utilitzar una iteració  amb GENERATE. Exemple per crear 20 hosts
;$GENERATE 0-19 ${2}                  PTR      host${0,2}.nom_del_domini_amb_punt_final.

El fitxer el podem anomenar /etc/bind/db.192.168.0 i afegir les línies següents al fitxer /etc/bind/named.conf:

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/bind/db.192.168.0";
};

Per comprovar que els fitxers de zona són correctes (no tenen errors sintàctics):

$ sudo named-chekzone nom_domini fitxer_de_zona

El paràmetre -D és útil per debugar si tots els noms de màquina s'han creat correctament (mostra un resum en mode canònic):

$ sudo named-checkzone -D AulaLinux db.aulalinux

També podem comprovar la configuració general de Bind amb:

$ sudo named-chekconf /etc/named.conf

Per aplicar els canvis executem:

$ sudo /etc/init.t/bind9 reload

o

$ sudo rndc reload

Per comprovar que tot va bé podem comprovar la resolució directa de noms amb la comanda ping:

$ ping ip_a_comprovar

I la resolució inversa amb la comanda host:

$ host nom_de_maquina_a_comprovar

Recursos:

Exemple AulaLinux

NOTA: Aquest exemple és compagina amb l'exemple Exemple AulaLinux de l'article sobre DHCP.

En aquest apartat trobeu la solució per a una aula de 15 pcs. El domini l'anomenarem aulalinux i els pcs el volem anomenar ali01, ali02, ali03, ...., ali15, tal i com posa als noms de màquina.

Els rang d'IPs de la xarxa és:

147.83.75.132 a 147.83.75.146

El gateway té l'adreça:

147.83.75.147

I l'ordinador del professor és

147.83.75.130

Fitxer /etc/bind/db.aulalinux.ice.upc.edu:

;; Zona AulaLinux
$TTL 1H
@                       IN      SOA     aulalinux.ice.upc.edu. hostmaster (
                             2004070101      ; serial
                             8H              ; refresh for slaves
                             3H              ; retry
                             4W              ; expire time at slaves
                             1H              ; negative TTL
                             )  

                             IN      NS      domain.aulaLinux.ice.upc.edu.
;;Descomenteu la següent línia si teniu servei correu
;;                            IN      MX      10 mailserver.AulaLinux.ice.upc.edu.
;;;;;;;;;;;;;;;;;;;;;
; Descripció de les traduccions
;;;;;;;;;;;;;;;;;;;;;;  

;;Noms de màquines amb A
;;Descomenteu la següent línia si voleu afegir un Gateway
gateway                         IN      A        147.83.75.129
;;Descomenteu les següents línies si voleu afegir màquines
;;ali01                           IN      A       147.83.75.131
;;ali02                           IN      A       147.83.75.132
;;ali03                           IN      A       147.83.75.133
;;... 

; Alternativament podem utilitzar una iteració  amb GENERATE
;$GENERATE 132-146 ali${0,2}          A       147.83.75.${3}  

;Els servidors de noms i de correu electrònic han de ser host A
;correu                          IN      A       mailserver
;domain                          IN      A       host  

;; Defineix dominis de serveis amb CNAMEs. IMPORTANT: es posen noms de màquina que resolgui DNS i no IPs.
;www                             IN      CNAME   nom_host_web
;ldap                            IN      CNAME   nom_host_ldap 

Si comprovem el fitxer amb la comanda named-checkzone:

$ sudo named-checkzone -D AulaLinux.ice.upc.edu db.aulalinux.ice.upc.edu
db.aulalinux.ice.upc.edu: file does not end with newline
zone AulaLinuxice.upc.edu/IN: loaded serial 2004070101
AulaLinux.ice.upc.edu                                    3600 IN SOA       AulaLinux. hostmaster.AulaLinux. 2004070101 28800 10800 2419200 3600
AulaLinux.ice.upc.edu                                    3600 IN NS        AulaLinux.
gateway.AulaLinux.ice.upc.edu                            3600 IN A         ip_del_gateway
ali01.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.132
ali02.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.133
ali03.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.133
ali04.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.135
ali05.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.136
ali06.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.137
ali07.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.138
ali08.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.139
ali09.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.140
ali10.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.141
ali11.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.142
ali12.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.143
ali13.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.144
ali14.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.145
ali15.AulaLinux.ice.upc.edu                               3600 IN A         147.83.75.146

Tot està correcte.

Fitxer /etc/bind/db.147.83.75 (Resolució inversa):

;; resolució inversa AulaLinux.ice.upc.edu
$TTL 1H
@                       IN      SOA     AulaLinux.ice.upc.edu. hostmaster (
                                2006062701      ; serial
                                8H              ; refresh for slaves
                                3H              ; retry
                                4W              ; expire time at slaves
                                1H              ; negative TTL
                                )
 
                              IN      NS      domain.aulaLinux.ice.upc.edu.
;;;;;;;;;;;;;;;;;;;;;;
; Descripció
;;;;;;;;;;;;;;;;;;;;;;   

;;Noms de màquines amb A
;; Descomenteu aquesta línia si voleu afegir Gateway
;;129                    IN      PTR     gateway.AulaLinux.ice.upc.edu.
;Exemple
;1                             IN      PTR     gateway.nom_del_domini_amb_punt_final.
;;Descomenteu aquesta línia si voleu afegir màquines (hosts)
;adreça_IP_host1               IN      PTR     host1.nom_del_domini_amb_punt_final.
;Exemples (només és necessària la part de la ip corresponent a màquina  )
;131                             IN      PTR     ali01.AulaLinux.ice.upc.edu.
;132                             IN      PTR     ali02.AulaLinux.ice.upc.edu.
;133                             IN      PTR     ali03.AulaLinux.ice.upc.edu.

; Alternativament podem utilitzar una iteració  amb GENERATE. Exemple per crear 20 hosts
;$GENERATE 11-25 ${1}                  PTR      ali${0,2}.AulaLinux.ice.upc.edu.

Si comprovem el fitxer amb la comanda named-checkzone:

$ sudo named-checkzone -D AulaLinux.ice.upc.edu db.147.83.75
zone AulaLinux/IN: loaded serial 2006062701
AulaLinux.                                    3600 IN SOA       AulaLinux. hostmaster.AulaLinux. 2003080101 28800 10800 2419200 3600
AulaLinux.                                    3600 IN NS        AulaLinux.
1.AulaLinux.ice.upc.edu                                  3600 IN PTR       gateway.AulaLinux.
11.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali01.AulaLinux.ice.upc.edu.
12.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali02.AulaLinux.ice.upc.edu.
13.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali03.AulaLinux.ice.upc.edu.
14.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali04.AulaLinux.ice.upc.edu.
15.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali05.AulaLinux.ice.upc.edu.
16.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali06.AulaLinux.ice.upc.edu.
17.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali07.AulaLinux.ice.upc.edu.
18.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali08.AulaLinux. ice.upc.edu.
19.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali09.AulaLinux. ice.upc.edu.
20.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali10.AulaLinux. ice.upc.edu.
21.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali11.AulaLinux.ice.upc.edu.
22.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali12.AulaLinux.ice.upc.edu.
23.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali13.AulaLinux.ice.upc.edu.
24.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali14.AulaLinux.ice.upc.edu. 
25.AulaLinux.ice.upc.edu                                  3600 IN PTR       ali15.AulaLinux.ice.upc.edu.

Ara modifiquem el fitxer /etc/bind/named.conf.local:

$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
// 
 
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "AulaLinux.ice.upc.edu" {
       type master;
       file "/etc/bind/db.aulalinux.ice.upc.edu";
};

zone "75.83.147.in-addr.arpa" {
        type master;
        file "/etc/bind/db.147.83.75";
};

Ja podem recarregar bind per tal que tingui en compte els canvis:

$ sudo rndc reload
server reload successful

Ara configurem la màquina client per tal que utilitzi aquest servidor de dns. Editem el fitxer /etc/resolv.conf:

$ sudo joe /etc/bind/resolv.conf
domain AulaLinux.ice.upc.edu
nameserver ip_servidor_dns


Podem deixar les DNS que ja tinguéssim del nostre proveïdor de serveis al final (és el més assenyat per si falla el nostre servidor DNS). De totes maneres recordeu d'activar els forwarders al fitxer d'opcions:

$ sudo joe /etc/named.conf.options
options {
       directory "/var/cache/bind";
 
       ...............................
 
       forwarders {   
               ip_dns_upc_1;
               ip_dns_upc_2;
       };   
 
       auth-nxdomain no;    # conform to RFC1035
 
       ..............................  

El més còmode si utilitzem DHCP és modificar el servidor de DHCP per tal que utilitzi aquest servidor de DNS.

Ara comprovem que tot funciona correctament amb les comandes ping i host:

$ ping pc01
$ host 147.83.75.132

Control d'accés (llistes ACL)

És pot configurar quins clients poden fer ús del servidor de DNS amb llistes de control d'accés (ACL lists). Veiem un exemple extret d'Skolelinux:

Primer és defineix una llista d'accés (grup de ips):

acl skolelinux {
      // Adding the entire 10.0.0.0/8 even if only a small fraction of
      // it is used
      10.0.0.0/8;
      // Ditto for 192.168.0.0/16
      192.168.0.0/16;
      // localhost
      127.0.0.0/8;
};

I a les opcions de bind (fitxer /etc/bind9/named.conf.options) afegim:

// Limiting access to skolelinux hosts
      allow-recursion {
              skolelinux;
      };
      allow-transfer {
              skolelinux;
      };
      allow-query {
              skolelinux;
      };


Configuració de correu electrònic. Registres MX

Permet especificar els servidor de correu electrònic d'un domini o zona. Un exemple:

iesebre.com.    IN    MX    10 ASPMX.L.GOOGLE.com.
iesebre.com.    IN    MX    20 ALT1.ASPMX.L.GOOGLE.com.
iesebre.com.    IN    MX    30 ALT2.ASPMX.L.GOOGLE.com.
iesebre.com.    IN    MX    40 ASPMX2.GOOGLEMAIL.com.
iesebre.com.    IN    MX    50 ASPMX3.GOOGLEMAIL.com.

El primer camp és el nom de domini o zona. El camp de la dreta de tot és el nom del servidor de correu electrònic (normalment prèviament s'ha establer un registre A per a aquest servidor). El penúltim camp indica l'ordre de preferència.

Podem obtenir el registre MX d'un domini amb nslookup:

$ nslookup - 80.58.61.250
> set type=MX
> iesebre.com
Server:		80.58.61.250
Address:	80.58.61.250#53

Non-authoritative answer:
iesebre.com	mail exchanger = 10 ASPMX.L.GOOGLE.com.
iesebre.com	mail exchanger = 20 ALT1.ASPMX.L.GOOGLE.com.
iesebre.com	mail exchanger = 30 ALT2.ASPMX.L.GOOGLE.com.
iesebre.com	mail exchanger = 40 ASPMX2.GOOGLEMAIL.com.
iesebre.com	mail exchanger = 50 ASPMX3.GOOGLEMAIL.com.

Authoritative answers can be found from:
ASPMX.L.GOOGLE.com	internet address = 72.14.221.114
ALT1.ASPMX.L.GOOGLE.com	internet address = 209.85.216.102
ALT2.ASPMX.L.GOOGLE.com	internet address = 209.85.217.41
ASPMX2.GOOGLEMAIL.com	internet address = 209.85.135.27
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.5
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.6
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.4
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.8
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.7
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.3
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.1
ASPMX3.GOOGLEMAIL.com	internet address = 209.85.222.2  
NOTA: Normalment indica les adreces IP públiques dels servidor on s'han d'enviar els correus electrònics per a aquest domini, és a dir els servidors de correu PO3 o IMAP
  • file:///usr/share/doc/bind9-doc/arm/Bv9ARM.ch06.html#id2565990

Configuració de zones esclaves

Un exemple és configurar un servidor de DNS a guifi.net. Cal afegir una zona esclava com a (fet amb Webmin):

zone "guifi.net" {
	type slave;
 	masters { 
		80.24.16.164;
		}; 
	file "/var/cache/bind/guifi.net.hosts";
	};

Aquestes línies s'afegeixen al fitxer:

/etc/bind/named.conf.local

Al reiniciar bind amb:

$ sudo /etc/init.d/bind9 restart

És genera el fitxer:

$ cat /var/cache/bind/guifi.net.hosts
$ORIGIN .
$TTL 38400	; 10 hours 40 minutes
guifi.net		IN SOA	esperanca.gurb.net. Ramon\.Roca.guifi.net. ( 
				1232134452 ; serial
				10800      ; refresh (3 hours)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				38400      ; minimum (10 hours 40 minutes)
				)
			NS	esperanca.gurb.net.
			A	84.88.36.51
$ORIGIN guifi.net.
almogaver		A	10.138.17.4
anoia			CNAME	bandoler
correu.antic		A	10.138.25.68
arguelaguer		A	80.33.93.121
asterisk		CNAME	veuip
ausa			A	10.138.160.98
$ORIGIN ausa.guifi.net.
proxy			CNAME	ausa.guifi.net.
$ORIGIN guifi.net.
avia			CNAME	capolat
$ORIGIN avia.guifi.net.
proxy			CNAME	capolat.guifi.net.
$ORIGIN guifi.net.
bages			A	147.83.101.88
bandoler		A	10.138.25.69
bcn			NS	ns1.bcn
$ORIGIN bcn.guifi.net.
ns1			A	10.138.27.194
$ORIGIN guifi.net.
bdn			NS	ns1.bdn
$ORIGIN bdn.guifi.net.
ns1			A	10.35.228.35
$ORIGIN guifi.net.
bellmunt		A	10.138.52.100
$ORIGIN bellmunt.guifi.net.
proxy			CNAME	bellmunt.guifi.net.
$ORIGIN guifi.net.
grafiques.besalu	CNAME	sibibesalu
bonpreu			A	10.138.41.99
brull			NS	ns1.brull
$ORIGIN brull.guifi.net.
ns1			A	10.138.103.2
...

Recursos:

Registres SOA del servidor master i zones esclaves

Posem com exemple el següent registre SOA:

prova.eu. IN SOA ns.prova.eu. hostmaster.prova.eu. (
                         1        ; Serial
                         3h       ; Refresh after 3 hours
                         1h       ; Retry after 1 hour
                         1w       ; Expire after 1 week
                         1h )     ; Negative caching TTL of 1 hour

El primer número és el número de sèrie. S'utilitza un número i molta gent decideix utilitzar el següent esquema per assignar el número

YYYYMMDDNN

On:

  • YYYY: és l'any
  • MM: és el més
  • DD: és el dia
  • NN: és un comptador que indica que indica quantes vegades s'ha modificat el fitxer de zona en el dia indicat pels camps anteriors.

Per exemple:

2007042001

Aquest ordre és fa així per que l'última modificació sempre serà la que tingui el número de sèrie més gran. Aquest comportament ha de ser així per al correcta funcionament de les zones esclaves, i es imprescindible que el número de sèrie augmenti cada cop que es modifiquen les dades de la zona. Quan un servidor esclau contacta amb un servidor principal, primer pregunta pel número de sèrie de la zona. Si el número de sèrie és major que el número de sèrie de l'esclau aleshores l'esclau fa una actualització de les dades de la zona. Si el fitxer esclau s'inicia i no té cap informació de la zona (no té fitxer de backup o és el primer cop que s'inicia) aleshores sempre carrega la zona.

NOTA: En el cas que s'indiquin múltiples servidors master, aleshores l'esclau escull el que tingui el número de sèrie més alt

Els següents camps estan tots expressats en intervals de temps (si no s'indica res en segons):

  • refresh: Indica als esclaus cada quan han de consultar si hi ha novetats a la zona.
  • retry: Si el servidor esclau falla al intentar connectar amb el servidor master, intentarà tornar a connectar-se cada x temps on x és el temps indicat al camp retry. Normalment aquest calor és menor que el valor de refresh.
  • expireIf: si tarda més del temps indicat en aquest camp en poder connectar amb el master, aleshores la zona expira. Que una zona expira implica que el servidor de DNS ja no donarà més informació sobre aquesta zona als seus clients. Sempre ha de ser més gran que els valors refresh i retry.
  • negative caching TTL: TTL o Time To Live

Camps que es poden utilitzar per especificar dates. Exemples:

  • 3h, 180m, 2h60m, 3d, 6w

El RFC 1537 recomana el següents valors per a servidors de noms top-level:

Refresh        24 hours
Retry           2 hours
Expire         30 days
Default TTL     4 days

Exemple amb servidor Open Suse

Configuració del master (Ubuntu Server 9.10):

$ cat /etc/bind/named.conf.local
...
//Aquest és el servidor master de la zona informatica.iesebre.com
zone "informatica.iesebre.com" {
        allow-transfer { any; };
        type master;
        file "/etc/bind/db.informatica.iesebre.com";
        };

Configuració de l'esclau (Open Suse):

# cat /etc/named.conf
//Obtenir la zona iesebre.com del servidor master
zone "informatica.iesebre.com" {
       type slave;
       masters { 
               192.168.0.40;
               }; 
       file "slave/informatica.iesebre.com.hosts";
       };

On 192.168.0.40 és la IP del master.

Fitxers de log

A Opensuse trobareu la informació de la transferència de zones a:

$ sudo tail -f /var/log/messages | grep named

A debian/Ubuntu:

$ sudo tail -f /var/log/syslog | grep named

Mostrar totes les peticions que arriben al servidor

Cal activar querylog:

$ sudo rndc querylog

Ara podeu consultar els missatges de log a:

$ tail -f /var/log/syslog

Al mateix fitxer de log podreu veure un missatge que diu:

Jul  9 03:56:54 cop named[6738]: received control channel command 'querylog'
Jul  9 03:56:54 cop named[6738]: query logging is now on

Per desactivar el log un altre cop:

$ sudo rndc querylog

Depurar amb l'ordre dig

Podeu fer transferències de zona a mà amb l'ordre dig i el registre axfr. La següent és una transferència de la zona informatica.iesebre.com demanada al servidor master 192.168.0.40:

> dig axfr informatica.iesebre.com @192.168.0.40

; <<>> DiG 9.4.1-P1 <<>> axfr informatica.iesebre.com @192.168.0.40
; (1 server found)
;; global options:  printcmd
informatica.iesebre.com. 86400	IN	SOA	ns1.informatica.iesebre.com. informatica.iesebre.com. 2010012602 10800 3600 604800 86400
informatica.iesebre.com. 86400	IN	NS	ns1.informatica.iesebre.com.
A20-2PC0.informatica.iesebre.com. 86400	IN A	192.168.7.100
A20-2PC1.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC10.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC11.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC12.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC13.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC14.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC15.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC16.informatica.iesebre.com. 86400 IN A	192.168.7.101
A20-2PC2.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC3.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC4.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC5.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC6.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC7.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC8.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-2PC9.informatica.iesebre.com. 86400	IN A	192.168.7.101
A20-3PC0.informatica.iesebre.com. 86400	IN A	192.168.7.125
A20-3PC1.informatica.iesebre.com. 86400	IN A	192.168.7.127
A20-3PC10.informatica.iesebre.com. 86400 IN A	192.168.7.136
A20-3PC11.informatica.iesebre.com. 86400 IN A	192.168.7.137
A20-3PC12.informatica.iesebre.com. 86400 IN A	192.168.7.138
A20-3PC13.informatica.iesebre.com. 86400 IN A	192.168.7.139
A20-3PC14.informatica.iesebre.com. 86400 IN A	192.168.7.140
A20-3PC15.informatica.iesebre.com. 86400 IN A	192.168.7.141
A20-3PC16.informatica.iesebre.com. 86400 IN A	192.168.7.142
A20-3PC16.informatica.iesebre.com. 86400 IN A	192.168.7.143
A20-3PC16.informatica.iesebre.com. 86400 IN A	192.168.7.144
A20-3PC2.informatica.iesebre.com. 86400	IN A	192.168.7.128
A20-3PC3.informatica.iesebre.com. 86400	IN A	192.168.7.129
A20-3PC4.informatica.iesebre.com. 86400	IN A	192.168.7.130
A20-3PC5.informatica.iesebre.com. 86400	IN A	192.168.7.131
A20-3PC6.informatica.iesebre.com. 86400	IN A	192.168.7.132
A20-3PC7.informatica.iesebre.com. 86400	IN A	192.168.7.133
A20-3PC8.informatica.iesebre.com. 86400	IN A	192.168.7.134
A20-3PC9.informatica.iesebre.com. 86400	IN A	192.168.7.135
A20-4PC0.informatica.iesebre.com. 86400	IN A	192.168.7.150
A20-4PC1.informatica.iesebre.com. 86400	IN A	192.168.7.151
A20-4PC10.informatica.iesebre.com. 86400 IN A	192.168.7.160
A20-4PC11.informatica.iesebre.com. 86400 IN A	192.168.7.161
A20-4PC12.informatica.iesebre.com. 86400 IN A	192.168.7.162
A20-4PC13.informatica.iesebre.com. 86400 IN A	192.168.7.163
A20-4PC14.informatica.iesebre.com. 86400 IN A	192.168.7.164
A20-4PC15.informatica.iesebre.com. 86400 IN A	192.168.7.165
A20-4PC16.informatica.iesebre.com. 86400 IN A	192.168.7.166
A20-4PC2.informatica.iesebre.com. 86400	IN A	192.168.7.152
A20-4PC3.informatica.iesebre.com. 86400	IN A	192.168.7.153
A20-4PC4.informatica.iesebre.com. 86400	IN A	192.168.7.154
A20-4PC5.informatica.iesebre.com. 86400	IN A	192.168.7.155
A20-4PC6.informatica.iesebre.com. 86400	IN A	192.168.7.156
A20-4PC7.informatica.iesebre.com. 86400	IN A	192.168.7.157
A20-4PC8.informatica.iesebre.com. 86400	IN A	192.168.7.158
A20-4PC9.informatica.iesebre.com. 86400	IN A	192.168.7.159
alumnes.informatica.iesebre.com. 86400 IN A	192.168.2.12
INSEbreXen1.informatica.iesebre.com. 86400 IN CNAME xen.informatica.iesebre.com.
mediawiki.informatica.iesebre.com. 86400 IN A	192.168.7.182
negrell.informatica.iesebre.com. 86400 IN A	192.168.2.2
nemesis.informatica.iesebre.com. 86400 IN A	192.168.0.40
nemesis.informatica.iesebre.com. 86400 IN A	192.168.2.1
nemesis.informatica.iesebre.com. 86400 IN A	192.168.7.182
ns1.informatica.iesebre.com. 86400 IN	A	192.168.7.182
profes.informatica.iesebre.com.	86400 IN A	192.168.2.11
proxy.informatica.iesebre.com. 86400 IN	A	192.168.7.182
www.informatica.iesebre.com. 86400 IN	A	192.168.7.182
xen.informatica.iesebre.com. 86400 IN	A	192.168.2.10
informatica.iesebre.com. 86400	IN	SOA	ns1.informatica.iesebre.com. informatica.iesebre.com. 2010012602 10800 3600 604800 86400
;; Query time: 2 msec
;; SERVER: 192.168.0.40#53(192.168.0.40)
;; WHEN: Tue Jan 26 08:45:03 2010
;; XFR size: 68 records (messages 1, bytes 1716)

DNS notify

In BIND 8, DNS NOTIFY is on by default, but you can turn NOTIFY off globally with the substatement:

    options {
                   notify no;
   };

You can also turn NOTIFY on or off for a particular zone. For example, say you know that all of the slave servers for your acmebw.com zone are running BIND 4, and therefore don't understand NOTIFY requests. The zone statement:

   zone "acmebw.com" {
                   type master;
                   file "db.acmebw";
                   notify no;
   };

La llista per defecte de màquines notificades són les del registre NS de la zona

also-notify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] };

also-notify defines a list of IP address(es) (and optional port numbers) that will be sent a NOTIFY when a zone changes (or the specific zone if the statement is specified in a zone clause). These IP(s)s are in addition to those listed in the NS records for the zone. The also-notify in a zone is not cumulative with any global also-notify statements. If a global notify statement is 'no' this statement may be used to override it for a specific zone and, conversely, if the global options contain a also-notify list, setting notify 'no' in the zone will override the global option. This statement may be used in normal zone, view or a global options clause. While this statement would normally be used in a zone of type 'master' there is nothing to prevent its use in a 'slave' zone - in which case the NOTIFY would be triggered following a zone transfer to the slave.

options {
....
    also-notify {10.1.0.15; 172.28.32.7;}; // all zones
....
};
....
zone "example.com in{
....
    also-notify {10.0.1.2;}; // only this host
....
};
zone "example.net in{
....
    notify no; // no NOTIFY for zone
....
};


zone "acmebw.com" {
                type master;
                file "db.acmebw.com";
                notify yes;
                also-notify 15.255.152.4;
};

Troubleshooting. Resol·lució de problemes

non-authoritative answer from master X

Si als fitxers de log vegeu un missatge similar al següent:

$ sudo tail -f /var/log/messages | grep named
Jan 26 08:26:01 tallafocs-asi named[1296]: zone 0.168.192.in-addr.arpa/IN: refresh: non-authoritative answer from master 192.168.0.9#53 (source 0.0.0.0#0)

Si proveu de fer la consulta manualment:

$ dig 0.168.192.in-addr.arpa @192.168.0.9

; <<>> DiG 9.4.1-P1 <<>> 0.168.192.in-addr.arpa @192.168.0.9
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 40532
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;0.168.192.in-addr.arpa.		IN	A

;; AUTHORITY SECTION:
168.192.in-addr.arpa.	10800	IN	SOA	sirius.xtec.cat. postmaster.xtec.net. 1 3600 1200 604800 10800

;; Query time: 216 msec
;; SERVER: 192.168.0.9#53(192.168.0.9)
;; WHEN: Tue Jan 26 11:26:56 2010
;; MSG SIZE  rcvd: 110

Observeu que la resposta autoritzada no provés del servidor de DNS (en aquest cas prové del servidor de DNS de la xtec). En canvi la zona de resolució directa:

> dig iesebre.com @192.168.0.9

; <<>> DiG 9.4.1-P1 <<>> iesebre.com @192.168.0.9
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13731
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;iesebre.com.			IN	A

;; AUTHORITY SECTION:
iesebre.com.		86400	IN	SOA	ns.iesebre.com. informatica.iesebre.com. 2010012601 10800 3600 604800 86400

;; Query time: 1 msec
;; SERVER: 192.168.0.9#53(192.168.0.9)
;; WHEN: Tue Jan 26 11:32:57 2010
;; MSG SIZE  rcvd: 80

> ping ns.iesebre.com
PING ns.iesebre.com (192.168.0.9) 56(84) bytes of data.
64 bytes from 192.168.0.9: icmp_seq=1 ttl=64 time=1.21 ms

El servidor de DNS si és l'autoritzat. La configuració de les zones és:

zone "iesebre.com" in {
       allow-transfer { any; };
       file "master/iesebre.com";
       type master;
};
zone "192.168" in {
        allow-transfer { any; };
        file "master/192.168.rev";
        type master;
};

L'error està a

 zone "192.168" in {

Ha de ser:

zone "168.192.in-addr.arpa" {

Subdominis

Hi ha dos formes de definir-los:

  • Definir el domini i els subdominis en un sol servidor de DNS.
  • Delegant completament el subdomini a un altre servidors de DNS.

Un sol servidor

Es pot fer especificant els noms de màquina del subdomini de forma explicita o amb la directiva $ORIGIN:

; zone fragment for 'zone name' example.com
; name servers in the same zone
$TTL 2d ; zone default TT = 2 days
$ORIGIN example.com.
@              IN      SOA   ns1.example.com. hostmaster.example.com. (
               2003080800 ; serial number
               2h         ; refresh =  2 hours 
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
               )
; main domain name servers
              IN      NS     ns1.example.com.
              IN      NS     ns2.example.com.
; mail servers for main domain
              IN      MX 10  mail.example.com.
; A records for name servers above 
ns1           IN      A      192.168.0.3
ns2           IN      A      192.168.0.4
; A record for mail servers above 
mail          IN      A      192.168.0.5
; other domain level hosts and services
bill          IN      A      192.168.0.6
....
; sub-domain definitions
$ORIGIN us.example.com.
              IN      MX 10  mail
; record above uses blank substituition 
; and could have been written as 
; us.example.com.   IN  MX 10 mail.us.example.com.
; OR (using @ substitution)
; @ IN MX 10 mail
; A record for subdomain mail server
mail          IN      A      10.10.0.28
; the record above could have been written as 
; mail.us.example.com. A 10.10.0.28 if it's less confusing
ftp           IN      A      10.10.0.29 
; the record above could have been written as 
; ftp.us.example.com. A 10.10.0.29 if it's less confusing
....
; other subdomain definitions as required 

H per ordre potser es recomanable utilitzar la directiva INCLUDE:

; snippet from file above showing use of $INCLUDE
....
; other domain level hosts and services
bill          IN      A      192.168.0.5
....
; sub-domain definitions
$INCLUDE us-subdomain.sub
; other subdomain definitions as required 

Delegant el subdomini

La clau d'aquesta configuració està en el que s'anomenen els GLUE RECORDS. Els glue records són registres que s'inclouen al servidor DNS del domini pare que contenen les adreces dels servidors DNS del domini fill tot i que els servidors DNS del domini fill no són, estrictament parlant, propis de la zona pare.

Per exemple amb:

  • Domini principal: example.com
  • Subdomini: subdomain.example.com

Al fitxer de zona del domini principal:

   subdomain        IN    NS    ns1.subdomain.example.com.
                    IN    NS    ns2.subdomain.example.com.
   ns1.subdomain.example.com.    IN  A  IP_SERVIDOR_DNS1
   ns2.subdomain.example.com.    IN  A  IP_SERVIDOR_DNS2

Vistes (views)

Les vistes de DNS permeten especificar diferent informació segons un criteri especific. Per exemple ex pot definir una vista que només s'aplicarà per als clients que vinguin d'una xarxa concreta. Per exemple una vista que s'apliqui a tots els clients:

view "global" { 
	match-clients { any; };
};


view "internal" {
   match-clients { 127.0.0.1; 10.0.0.0/8; 172.0.0.0/8;
};
   recursion yes;  

   zone "node.cat" IN {
       type master;
       file "node.cat.local";
               allow-transfer { any; };
               allow-update { none; };
   };
etc...

Exemple de petició externa:

view "external" {
   match-clients { any; };
   recursion no;  

   zone "node.cat" IN {
        type master;
       file "node.cat.internet";
       allow-transfer { none; };
               allow-update { none; };
   }; 


Recursos:

Comanda rndc

Aquesta comanda ens permet controlar el servidor de noms bind utilitzant comandes. Podem consultar les comandes disponibles executant rndc sense paràmetres:

$ rndc
Usage: rndc [-c config] [-s server] [-p port]
      [-k key-file ] [-y key] [-V] command

command is one of the following:

reload        Reload configuration file and zones.
reload zone [class [view]]
              Reload a single zone.
refresh zone [class [view]]
              Schedule immediate maintenance for a zone.
retransfer zone [class [view]]
              Retransfer a single zone without checking serial number.
freeze zone [class [view]]
              Suspend updates to a dynamic zone.
thaw zone [class [view]]
              Enable updates to a frozen dynamic zone and reload it.
reconfig      Reload configuration file and new zones only.
stats         Write server statistics to the statistics file.
querylog      Toggle query logging.
dumpdb [-all|-cache|-zones] [view ...]
              Dump cache(s) to the dump file (named_dump.db).
stop          Save pending updates to master files and stop the server.
stop -p       Save pending updates to master files and stop the server
              reporting process id.
halt          Stop the server without saving pending updates.
halt -p       Stop the server without saving pending updates reporting
              process id.
trace         Increment debugging level by one.
trace level   Change the debugging level.
notrace       Set debugging level to 0.
flush         Flushes all of the server's caches.
flush [view]  Flushes the server's cache for a view.
flushname name [view]
              Flush the given name from the server's cache(s)
status        Display status of the server.
recursing     Dump the queries that are currently recursing (named.recursing)
*restart      Restart the server.

El podem utilitzar per fer que bind s'adoni de canvis ens els fitxers de configuració (identic a reload de l'script /etc/init.d/bind9) i fins i tot només executar canvis per zones però també es pot utilitzar per estadístiques i consultes de la memòria cau. Per fer un volcat de totes les resolucions de noms de domini que té bind a la memòria cau:

$ sudo rndc dumpdb

Aquest volcat es guarda en el fitxer named_dump.db que es troba a la carpeta de base de dades de bind (especificada a les opcions de bind) que normalment és /var/cache/bind.

Cal tenir en compte que rndc es pot utilitzar per configurar un servidor DNS bind remotament (cal configurar-ho).

Recursos:

Consultar l'estatus d'un servidor DNS

$ sudo rndc status
version: 9.6.1-P2
CPUs found: 2
worker threads: 2
number of zones: 14
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000 
tcp clients: 0/100
server is up and running

Consultar les estadístiques

NOTA: Per defecte no estan activades
$ sudo rndc stats


S'interpreten de la següent manera:

TODO:
success The number of successful queries made to the server or zone. A successful query is defined as query which returns a NOERROR response with at least one answer RR.
referral 	The number of queries which resulted in referral responses.
nxrrset 	The number of queries which resulted in NOERROR responses with no data.
nxdomain 	The number of queries which resulted in NXDOMAIN responses.
failure 	The number of queries which resulted in a failure response other than those above.
recursion 	The number of queries which caused the server to perform recursion in order to find the final answer.

Es guarden al fitxer d'estadístiques:

/var/cache/bind/named.stats

Aquest fitxer es pot canviar amb l'opció statistics-file

[ statistics-file path_name; ]

Cal posar-lo al fitxer options:

$ sudo joe /etc/named/named.conf.options

options {
       directory "/var/cache/bind";
       statistics-file "/var/cache/bind/named.stats";
...

I es poden activar estadístiques per zones:

zone-statistics

[ zone-statistics yes | no ; ]

A la versió 9.5 hi ha un servidor d'estadístiques que les proporciona en XML per poder-les consultar en remot:

http://www.isc.org/software/bind/new-features/9.5

Volcar les consultes recursives

$ sudo rndc recursing

les trobareu a:

/var/cache/bind/named.recursing


Proves amb la memòria CAU

NOTA: exemples executats en un servidor de DNS en local

La primera consulta:

$ dig xtec.cat
...
;; Query time: 76 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jan 12 07:55:03 2010
;; MSG SIZE  rcvd: 497

Les següents:

$ dig xtec.cat
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jan 12 07:59:15 2010
;; MSG SIZE  rcvd: 106

Si torneu a netejar la cache us tornarà a tardar més temps:

$ sudo rndc flush

Augmentar el serial d'una zona

$ sudo rndc reload fubar.com IN external

Comprovació de DNS

Comprovació de la configuració del servidor

Comanda named-checkconf

Permet comprovar si el fitxer de configuració és correcte:

$ named-checkconf /etc/bind/named.conf

Seguint la filosofia Linux:

No news good news

Si la comanda no torna cap resultat és que no hi ha cap error. En cas contrari ens mostrarà es línies que tenen error:

$ sudo named-checkconf /etc/bind/named.conf
/etc/bind/named.conf:20: unknown option 'one'

Cal tenir en compte que per defecte es consulta el fitxer de configuració named.conf però que poseu especificar altres fitxers. També cal tenir en compte que això només comprova la sintaxi d'aquest fitxers i no pas si la configuració de les zones és correcta (cal fer-ho amb named-checkzone).

També és interessant utilitzar l'opció -z per tal d'obtenir més informació (fins i tot en alguns casos mostra errors):

$ sudo /usr/sbin/named-checkconf -z
zone iesebre.com/IN: loaded serial 2010012602
zone 168.192.in-addr.arpa/IN: loading from master file master/192.168.rev failed: file not found
_default/168.192.in-addr.arpa/in: file not found

Recursos:

Comanda named-checkzone

Permet comprovar si el fitxer de configuració és correcte. Un exemple

$ named-checkzone iescopernic.com /etc/bind/db.iescopernic.com
zone iescopernic.com/IN: loaded serial 2004070102
OK

En cas d'error ens indicarà quina és la línia on hi ha error.

La sintaxi completa és:

$ named-checkzone [-d] [-j] [-q] [-v] [-c class] [-k mode] [-n mode] [-o filename] [-t directory] [-w directory] [-D] {zonename} {filename}

On:

Recursos:

Comprovació de la configuració des dels clients

Ordres dig, nslookup, host i ping

Per comprovar la configuració en una màquina client podeu utilitzar les ordres:

  • ping: Comprovació simple de la resol·lució directa (registres A i CNAME)
  • host: Comprovació simple de la resol·lució inversa (registres PTR)
  • dig: Eina molt completa per a fer consultes DNS a servidors
  • nslookup: Eina molt completa per a fer consultes DNS a servidors

Comanda dig

Consulteu dig.

Comanda h2n

Exemples

Servidor DNS només cache

Exemple de servidor només cache:

// Two corporate subnets we wish to allow queries from.

acl corpnets { 192.168.4.0/24; 192.168.7.0/24; };
options {
       directory "/etc/namedb";                        // Working directory
       allow-query { corpnets; };
};
// Provide a reverse mapping for the loopback address 127.0.0.1
zone "0.0.127.in-addr.arpa" {
       type master;
       file "localhost.rev";
       notify no;
};

Load Balancing

Un servidor de DNS es pot utilitzar per fer un repartiment de càrrega rudimentari. Si tenim 3 servidors web replicats (10.0.0.1, 10.0.0.2 i 10.0.0.3):

www              600        IN           A                10.0.0.1
                 600        IN           A                10.0.0.2
                 600        IN           A                10.0.0.3

Wildcard. Redireccionar qualsevol subdomini a una IP concreta

Un exemple:

*.photomatt.net. 14400 IN A 64.246.62.114

Per exemple això és necessari per a utilitzar wordpress-mu

Recursos:

Seguretat

DNS Cache Poisoning

Performance. Rendiment. Tunning

Paràmetres a tenir en compte:

  • clients-per-query
  • tcp-clients
  • recursive-clients
clients-per-query, max-clients-per-query:
These set the initial value (minimum) and maximum number of recursive simultanious clients for any given query (<qname,qtype,qclass>) that the server will accept before  
dropping additional clients. named will attempt to self tune this value and changes will be logged. The default values are 10 and 100.

This value should reflect how many queries come in for a given name in the time it takes to resolve that name. If the number of queries exceed this value, named will assume 
that it is dealing with a non-responsive zone and will drop additional queries. If it gets a response after dropping queries, it will raise the estimate. The estimate will 
then be lowered in 20 minutes if it has remained unchanged.

If clients-per-query is set to zero, then there is no limit on the number of clients per query and no queries will be dropped.

If max-clients-per-query is set to zero, then there is no upper bound other than imposed by recursive-clients.
recursive-clients:
The maximum number of simultaneous recursive lookups the server will perform on behalf of clients. The default is 1000. Because each recursing client uses a fair bit of 
memory, on the order of 20 kilobytes, the value of the recursive-clients option may have to be decreased on hosts with limited memory.

tcp-clients:
The maximum number of simultaneous client TCP connections that the server will accept. The default is 100. 

Als fitxers de log podem observar com bind augmenta clients-per-query quan és necessari:

$ sudo cat /var/log/syslog.1 | grep clients-per-query
Apr 20 21:14:05 cop named[856]: clients-per-query increased to 15
Apr 20 21:34:05 cop named[856]: clients-per-query decreased to 14
Apr 20 21:54:05 cop named[856]: clients-per-query decreased to 13
Apr 20 22:14:05 cop named[856]: clients-per-query decreased to 12
Apr 20 22:34:05 cop named[856]: clients-per-query decreased to 11
Apr 20 22:54:05 cop named[856]: clients-per-query decreased to 10

Recursos:

Eines de mesura del rendiments

dnsperf

A Ubuntu:

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.10
DISTRIB_CODENAME=karmic
DISTRIB_DESCRIPTION="Ubuntu 9.10"
$ sudo apt-get install libbind-dev build-essential libssl-dev
$ sudo apt-get install dnsutils bind9
$ sudo apt-get install libcap-dev tshark
$ cd /usr/lib/
$ sudo ln -s libgssapi_krb5.so.2.2 libgssapi_krb5.so                # Jo ja el tenia
$ sudo ln -s libxml2.so.2.7.5 libxml2.so
$ cd /usr/src
$ sudo wget ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.1.0/dnsperf-src-1.0.1.0-1.tar.gz
$ sudo tar zxvf dnsperf-src-1.0.1.0-1.tar.gz
$ cd dnsperf-src-1.0.1.0-1
$ sudo ./configure
$ sudo make
$ sudo make install

L'executable el teniu a:

/usr/local/bin/dnsperf

Des de la carpeta:

nsperf-src-1.0.1.0-1
$ dnsperf -s dns.hostingaldescubierto.com < examples/queryfile-example-100thousand

Monitoritzar

dnstop

$ sudo apt-get install dnstop

S'utilitza amb

$ sudo dnstop eth0

Mostra les peticions de DNS que es reben en temps real i de qui provenen.

Per defecte té 2 taules, dominis primaris i dominis secundaris. Es poden consultar premen les tecles 1 i 2 respectivament durant la execució de dnstop. Es poden posar més subnivells amb -l :

$ sudo dnstop -l 5 eth0

Es poden consultar els tipus de registres amb la tecla t (type):

Query Type     Count      %
---------- --------- ------
A?               224   56.7
AAAA?            142   35.9
A6?               29    7.3

Amb la tecla s es torna a la llista de clients (origens de les peticions). Si teniu múltiples targetes de xarxa podeu veure per on us arriben més peticions amb d (destinacions de les peticions DNS)

Es pot consulta l'ajuda completa amb la tecla ?:

s - Sources list
d - Destinations list
t - Query types
o - Opcodes
r - Rcodes
1 - 1st level Query Names      ! - with Sources
2 - 2nd level Query Names      @ - with Sources
3 - 3rd level Query Names      # - with Sources
4 - 4th level Query Names      $ - with Sources
5 - 5th level Query Names      % - with Sources
6 - 6th level Query Names      ^ - with Sources
7 - 7th level Query Names      & - with Sources
8 - 8th level Query Names      * - with Sources
9 - 9th level Query Names      ( - with Sources
^R - Reset counters
^X - Exit
 ? - this

Client DNS

Consulteu Client DNS

Resolució de problemes. Troubleshooting/FAQ

Consultes IPv6 afecten al rendiment del servidor DNS

Es pot desactivar a /etc/defaults/bind posant l'opció -4

# startup options for the server
OPTIONS="-4 -u bind"

checkhints: L.ROOT-SERVERS.NET/A (198.32.64.12) extra record in hints

Si als logs us apareix:

checkhints: L.ROOT-SERVERS.NET/A (198.32.64.12) extra record in hints

És que no teniu actualitzada la llista de servidors de root:

La llista es pot trobar a:

ftp://ftp.internic.net/domain/named.root

A Open Suse el fitxer amb els servidors DNS de root és:

/var/lib/named/root.hint

També heu de tenir la zona definida al fitxer de configuració /etc/named.conf:

zone "." {
        type hint;
        file "root.hint";
};  

zone "0.0.127.in-addr.arpa" {
        type master;
        file "127.0.0.zone";
};


unexpected RCODE (REFUSED) resolving X

Jan 26 08:38:37 tallafocs-asi named[1296]: unexpected RCODE (REFUSED) resolving 'tinyurl.com/A/IN': 212.0.97.81#53

TODO

NS has no address records

Si als fitxers de log vegeu un missatge com:

$ sudo tail -f /var/log/messages

zone informatica.iesebre.com/IN: NS 'ns1.informatica.iesebre.com' has no address records

És que heu declarar un servidor de noms per a una zona al registre SOA però no li heu posat el corresponent registre A. Per exemple a:

@       IN      SOA     ns1.informatica.iesebre.com. informatica.iesebre.com. (
                        2010012602
                        3H
                        1H
                        1W
                        1D ) 

           IN      NS   ns1.informatica.iesebre.com.
www        IN      A    192.168.7.182

Falta al final la línia:

ns1        IN      A    192.168.7.182


/etc/bind/rndc.key: permission denied

NOTA: Sovint aquest error en màquines Debian succeïx quan s'instal·len al mateix temps els paquets bind i bind9

Després d'una actualització de DNS al setembre de 2006 va deixar de funcionar DNS. Als logs sortia el següent error:

$ sudo cat /var/log/daemon.log | grep named
............
............
Sep 21 12:18:06 tjener named[6894]: /etc/bind/named.conf:62: open: /etc/bind/rndc.key: permission denied

La solució la vaig trobar aquí: http://bugs.skolelinux.no/long_list.cgi?buglist=1115

Cal canviar els permisos, el propietari del fitxer:

sudo chown root:bind rndc.key

Resolució inversa?

Com es pot fer resolució inversa (obtenir el nom de domini a partir de la ip)?

$ host 147.83.20.2
  2.20.83.147.in-addr.arpa domain name pointer atonito.lsi.upc.edu

Windows XP utilitza el servidor secondari

  1. Click Start, click Run, type regedit, and then click OK.
  2. Locate and then click the following key in the registry:
     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
  1. On the Edit menu, point to New, and then click REG_DWORD.
  2. Type ServerPriorityTimeLimit, and then press ENTER.
  3. On the Edit menu, click Modify.
  4. Type 0, and then click OK.

Consulteu:


Error "no more recursive clients: quota reached"

Bind accepta fins a 200 clients concurrents per defecte. Si es necessiten més es pot afegir a named.conf:

options
 { 
	recursive-clients       2500;
}

Cal calcular que cada procés utilitza uns 20K.

Recursos

lame server resolving ...

Si trobeu missatges del tipus:

$ sudo cat /var/log/daemon.log | grep lame
Mar 12 18:02:44 moodle named[1451]: lame server resolving 'www.betandwin.es' (in 'betandwin.es'?): 86.109.96.208#53

En principi són missatges de configuracions incorrectes de servidors DNS. No són perilloses.

Es poden treure aquests logs amb:

logging
{ 
	category lame-servers { null; };
}

Comodins/Jokers

Es pot utilitzar el caràcter * per indicar un conjunt de subdomini qualsevol.Exemple:

*                                IN      A       10.0.3.234

Això permet que qualsevol domini que no s'hagi especificat explícitament vagi a una màquina per defecte.

Com es pot fer resolució directa (obtenir la IP a partir del nom de domini)?

$ ping atonito.lsi.upc.edu
PING atonito.lsi.upc.edu (147.83.20.2) 56(84) bytes of data.

Com obtenir tota la informació d'una zona DNS

Per exemple si volem veure el dns de la zona ubuntu.com:

$ dig @ns.ubuntu.com ubuntu.com axfr  

; <<>> DiG 9.3.2 <<>> @ns.ubuntu.com ubuntu.com axfr
; (1 server found)
;; global options:  printcmd
ubuntu.com.             3600    IN      SOA     ns.ubuntu.com. hostmaster.canonical.com. 2007041303 10800 3600 604800 3600
ubuntu.com.             600     IN      A       82.211.81.212
ubuntu.com.             10800   IN      NS      ns.ubuntu.com.
ubuntu.com.             10800   IN      NS      ns0.blackcatnetworks.co.uk.
ubuntu.com.             10800   IN      NS      ns1.blackcatnetworks.co.uk.
ubuntu.com.             3600    IN      MX      10 fiordland.ubuntu.com.
aboa.ubuntu.com.        1800    IN      A       82.211.81.195
access.ubuntu.com.      600     IN      A       82.211.81.212
adelie.ubuntu.com.      1800    IN      A       82.211.81.139
arch.ubuntu.com.        600     IN      A       82.211.81.161
archive.ubuntu.com.     600     IN      A       91.189.88.31
archive.ubuntu.com.     600     IN      A       91.189.89.6
archive.ubuntu.com.     600     IN      A       91.189.89.8
*.archive.ubuntu.com.   600     IN      A       91.189.88.31
*.archive.ubuntu.com.   600     IN      A       91.189.89.6
*.archive.ubuntu.com.   600     IN      A       91.189.89.8
at.archive.ubuntu.com.  600     IN      CNAME   ubuntu.inode.at.
au.archive.ubuntu.com.  600     IN      CNAME   mirror.optus.net.
ba.archive.ubuntu.com.  600     IN      CNAME   archive.ubuntu.com.ba.
be.archive.ubuntu.com.  600     IN      CNAME   ubuntu.mirrors.skynet.be.
bg.archive.ubuntu.com.  600     IN      CNAME   ubuntu.ipacct.com.
bg2.archive.ubuntu.com. 600     IN      CNAME   ubuntu.linux-bg.org.
br.archive.ubuntu.com.  600     IN      CNAME   ubuntu.c3sl.ufpr.br.
bw.archive.ubuntu.com.  600     IN      CNAME   ubuntu-archive.mirror.ac.za.
ca.archive.ubuntu.com.  600     IN      CNAME   gulus.usherbrooke.ca.
ch.archive.ubuntu.com.  600     IN      CNAME   mirror.switch.ch.
cr.archive.ubuntu.com.  600     IN      CNAME   ftp.ucr.ac.cr.
cs.archive.ubuntu.com.  600     IN      CNAME   ubuntu.etf.bg.ac.yu.
cz.archive.ubuntu.com.  600     IN      CNAME   archive.ubuntu.cz.
de.archive.ubuntu.com.  600     IN      A       141.76.2.3
dk.archive.ubuntu.com.  600     IN      CNAME   mirror.uni-c.dk.
ee.archive.ubuntu.com.  600     IN      CNAME   ftp.estpak.ee.
es.archive.ubuntu.com.  600     IN      CNAME   ubuntu2.cica.es.
fi.archive.ubuntu.com.  600     IN      CNAME   mirrors.nic.funet.fi.
 ........................
arctowski.ubuntu.com.   1800    IN      A       82.211.81.158
argon.ubuntu.com.       600     IN      A       91.189.88.1
arsenic.ubuntu.com.     1800    IN      A       82.211.81.218
art.ubuntu.com.         600     IN      A       69.60.114.112
art-staging.ubuntu.com. 600     IN      A       69.60.114.112
asuka.ubuntu.com.       1800    IN      A       82.211.81.180
auckland.ubuntu.com.    1800    IN      A       82.211.81.138
authserver.ubuntu.com.  600     IN      A       82.211.81.133
balleny.ubuntu.com.     1800    IN      A       82.211.81.162
bazaar.ubuntu.com.      600     IN      A       82.211.81.161
belgrano.ubuntu.com.    1800    IN      A       82.211.81.171
beryllium.ubuntu.com.   1800    IN      A       91.189.88.34
bittorrent.ubuntu.com.  600     IN      A       82.211.81.143
boron.ubuntu.com.       1800    IN      A       82.211.81.196
bugs.ubuntu.com.        600     IN      A       82.211.81.212
bugzilla.ubuntu.com.    600     IN      A       82.211.81.133
bugzilla.ubuntu.com.    3600    IN      MX      10 fiordland.ubuntu.com.
buildd.ubuntu.com.      600     IN      A       82.211.81.132
buildd.ubuntu.com.      3600    IN      MX      10 fiordland.ubuntu.com.
byrd.ubuntu.com.        1800    IN      A       91.189.88.11
calcium.ubuntu.com.     1800    IN      A       82.211.81.208
carbon.ubuntu.com.      1800    IN      A       82.211.81.197
casey.ubuntu.com.       1800    IN      A       82.211.81.149
cdimage.ubuntu.com.     600     IN      A       91.189.88.34
cdimage.ubuntu.com.     600     IN      A       91.189.89.4
*.cdimage.ubuntu.com.   600     IN      A       91.189.88.34
*.cdimage.ubuntu.com.   600     IN      A       91.189.89.4
cdimages.ubuntu.com.    600     IN      CNAME   cdimage.ubuntu.com.
*.cdimages.ubuntu.com.  600     IN      A       91.189.88.34
*.cdimages.ubuntu.com.  600     IN      A       91.189.89.4
changelogs.ubuntu.com.  600     IN      A       82.211.81.132
chinstrap.ubuntu.com.   1800    IN      A       82.211.81.135
chlorine.ubuntu.com.    1800    IN      A       82.211.81.204
chromium.ubuntu.com.    1800    IN      A       91.189.89.4
cobalt.ubuntu.com.      1800    IN      A       82.211.81.213
concordia.ubuntu.com.   1800    IN      A       82.211.81.168
davis.ubuntu.com.       1800    IN      A       82.211.81.169
debpatches.ubuntu.com.  600     IN      A       82.211.81.149
doc.ubuntu.com.         600     IN      A       69.60.114.108
docteam.ubuntu.com.     600     IN      A       82.211.81.159
dogfood.ubuntu.com.     600     IN      A       82.211.81.131
*.dogfood.ubuntu.com.   600     IN      A       82.211.81.131
archive.dogfood.ubuntu.com. 600 IN      A       82.211.81.131
librarian.dogfood.ubuntu.com. 600 IN    A       82.211.81.131
shipit.dogfood.ubuntu.com. 600  IN      A       82.211.81.131
*.shipit.dogfood.ubuntu.com. 600 IN     A       82.211.81.131
drescher.ubuntu.com.    1800    IN      A       82.211.81.167
druzhnaya.ubuntu.com.   1800    IN      A       82.211.81.174
durville.ubuntu.com.    1800    IN      A       82.211.81.152
emperor.ubuntu.com.     1800    IN      A       91.189.89.3
escudero.ubuntu.com.    1800    IN      A       82.211.81.161
esperanza.ubuntu.com.   1800    IN      A       82.211.81.173
faure.ubuntu.com.       1800    IN      A       82.211.81.187
fiordland.ubuntu.com.   1800    IN      A       82.211.81.145
forster.ubuntu.com.     1800    IN      A       91.189.89.6
forum.ubuntu.com.       600     IN      A       82.211.81.133
forums.ubuntu.com.      600     IN      A       82.211.81.133
frei.ubuntu.com.        1800    IN      A       91.189.89.5
fridge.ubuntu.com.      600     IN      A       82.211.81.183
ftp.ubuntu.com.         600     IN      A       91.189.88.31
ftp.ubuntu.com.         600     IN      A       91.189.89.6
ftp.ubuntu.com.         600     IN      A       91.189.89.8
.................
ubuntu.com.             3600    IN      SOA     ns.ubuntu.com. hostmaster.canonical.com. 2007041303 10800 3600 604800 3600
;; Query time: 314 msec
;; SERVER: 82.211.81.173#53(82.211.81.173)
;; WHEN: Tue Apr 17 15:10:28 2007
;;  XFR size: 293 records (messages 1)

Small Text

Configuracions. Exemples

Segrestar algunes dominis. Repositoris Ubuntu

La idea és "segrestar" els següents noms de domini:

  • .archive.ubuntu.com (es.archive.ubuntu.com, ad.archive.ubuntu.com, etc... i el propi archive.ubuntu.com)
  • security.ubuntu.com'

Per què? Doncs bé per tal que a la nostra xarxa local, les màquines Ubuntu al fer actualitzacions no se les descarreguin d'Internet, sinó del nostre propi mirror dels repositoris.

Avantatges:

  • No cal modificar el fitxer /etc/apt/sources.list de cada màquina
  • Qualsevol PC, o disc dur itinerant (que hagi de funcionar a la nostra pròpia xarxa i fora d'ella) funcioni el mirror a la nostra xarxa i fora de forma transparent als usuaris.

Suposem que el mirror el tenim a la màquina:

192.168.0.7

Aquesta és la configuració de DNS que hem utilitzat.

Hem creat dos fitxers:

$ cat /etc/bind/db.archive.ubuntu.com
$TTL 1H
@                       IN      SOA     archive.ubuntu.com. hostmaster (
                                2007041701      ; serial
                                8H              ; refresh for slaves
                                3H              ; retry
                                4W              ; expire time at slaves
                                1H              ; negative TTL
                                )  

                                IN      NS      ns.archive.ubuntu.com
;;;;;;;;;;;;;;;;;;;;;;
; Server with aliases
;;;;;;;;;;;;;;;;;;;;;;
ns                    IN      A     192.168.0.7
archive.ubuntu.com.   IN      A     192.168.0.7
ch.archive.ubuntu.com IN      A     130.59.10.34
*.archive.ubuntu.com. IN      A     192.168.0.7 

NOTA:

En aquest cas el nom de màquina ch.archive.ubuntu.com apunta a un repositori "real". És necessari per tal que apt-mirror pugui fer les còpies

$cat /etc/bind/db.security.ubuntu.com
$TTL 1H
@                       IN      SOA     security.ubuntu.com. hostmaster (
                                2007041701      ; serial
                                8H              ; refresh for slaves
                                3H              ; retry
                                4W              ; expire time at slaves
                                1H              ; negative TTL
                                )

                                IN      NS      ns.security.ubuntu.com
;;;;;;;;;;;;;;;;;;;;;;
; Server with aliases
;;;;;;;;;;;;;;;;;;;;;;
ns                     IN      A            192.168.0.7
security.ubuntu.com.   IN      A     192.168.0.7 

i hem afegit les zones al fitxer /etc/bind/named.conf.local:

$cat /etc/bind/named.conf.local
...........

//Mirrors d'ubuntu
zone "archive.ubuntu.com" {
       type master;
       file "/etc/bind/db.archive.ubuntu.com";
};

zone "security.ubuntu.com" {
       type master;
       file "/etc/bind/db.security.ubuntu.com";
};

Això conjuntament amb la configuració d'Apt-mirror, ens estalvia un munt de temps i ample de banda a la xarxa.

Configurar el nostre servidor per acceptar peticions recursives

Per defecte, només acceptarem peticions de DNS de la xarxa local. Això ho podem consultar al fitxer named.conf.options.

$ cat named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you might need to uncomment the query-source
        // directive below.  Previous versions of BIND always asked
        // questions using port 53, but BIND 8.1 and later use an unprivileged
        // port by default.

        // query-source address * port 53;  

        // If your ISP provided one or more IP addresses for stable 
        // nameservers, you probably want to use them as forwarders.  
        // Uncomment the following block, and insert the addresses replacing 
        // the all-0's placeholder.  

        forwarders {
                195.235.113.3;
                195.235.96.90;
        }; 

        auth-nxdomain no;    # conform to RFC1035 

        // By default, name servers should only perform recursive domain
        // lookups for their direct clients.  If recursion is left open
        // to the entire Internet, your name server could be used to
        // perform distributed denial of service attacks against other
        // innocent computers.  For more information on DDoS recursion:
        // http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0987 

        allow-recursion { localnets; 192.168.0.0/16; }; 

        // If you have DNS clients on other subnets outside of your
        // server's "localnets", you can explicitly add their networks
        // without opening up your server to the Internet at large:
        // allow-recursion { localnets;}; 

        // If your name server is only listening on 127.0.0.1, consider:
        // allow-recursion { 127.0.0.1; }; 

};

La secció que ens interessa és l'allow-recursion i afegir la xarxa a la que permetem peticions recursives:

// By default, name servers should only perform recursive domain
       // lookups for their direct clients.  If recursion is left open
       // to the entire Internet, your name server could be used to
       // perform distributed denial of service attacks against other
       // innocent computers.  For more information on DDoS recursion:
       // http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0987 

       allow-recursion { localnets; 192.168.0.0/16; };

Tal i com diu l'aplicació del missatge cal anar en compte amb qui deixem fer peticions recursives. Llegiu:

En xarxes amb diverses subxarxes o hem de tenir en compte.

Forwarding de zones

Es poden definir zones forwarding. Aquest tipus de zones no les gestionem nosaltres però sobrescrivim els forwardings indicats al fitxer /etc/bind/name.conf.options i per a una zona concreta utilitzem uns DNS concrets. Per exemple es pot fer amb el domini xtec.cat de la següent forma:

zone "xtec.cat" {
    type forward;
    forwarders { 213.176.161.16; 213.176.161.18;};
};
               antics (1) 	        nous (2)
DNS primari 	193.145.88.16 	fletxa 	213.176.161.16
DNS secundari 	193.145.88.18 	fletxa 	213.176.161.18

Es poden consultar amb:

$ nslookup
> set type=ns
> xtec.cat
Server:		127.0.0.1
Address:	127.0.0.1#53

Non-authoritative answer:
xtec.cat	nameserver = sirius.xtec.net.
xtec.cat	nameserver = vega.xtec.net.

Authoritative answers can be found from:
vega.xtec.net	internet address = 213.176.161.18
sirius.xtec.net	internet address = 213.176.161.16

Recursos

RFCs

IES Nicolau Copèrnic