Servei de noms (bind9)

Objectiu:

Aquest tutorial explica com instal·lar i configurar un servei de noms (DNS). Utilitzarem el servidor bind versió 9.

Aquest servei, indispensable per a posteriors tutorials, és molt senzill de configurar i ajudarà a tenir més control sobre l’estructura de la topologia de la nostra xarxa.

Què és un servidor de noms?

Un servidor, o servei, de noms s’encarrega de fer la traducció d’adreces d’Internet a adreces IP, i al revés. Per fer-ho simple vegem un exemple.

Quan nosaltres naveguem per Internet i volem accedir a qualsevol tipus de contingut se’ns demana que introduïm una adreça. Un exemple d’adreça conegut podria ser www.google.com. El servei de noms el que fa és traduir aquesta adreça, en principi fàcil de recordar, a una adreça IP, en aquest cas 66.249.93.99. Aquesta ristra de nombres no és tan senzilla de recordar, sobretot si n’hem de recordar força, d’aquí la necessitat d’utilitzar un sistema que ens faciliti la tasca d’administrar les nostres màquines amb noms que siguin més senzills de recordar.

Obtenció del software necessari:

Partim de la base que disposem d’un servidor amb Ubuntu 7.04 Server. És molt probable que aquest tutorial funcioni sobre d’altres distribucions, però ha estat provat principalment sobre Ubuntu.

Utilitzarem l’eina apt per aconseguir tot el software necessari. La instal·lació no hauria de ser massa problemàtica. S’ha entrat al sistema utilitzant l’usuari root. Per començar actualitzem les nostres fonts de apt.

$ apt-get update

Per instal·lar el paquet bind executarem la següent comanda:

$ apt-get install bind9

Amb aquest paquet en tenim prou. Anem a veure l’estructura de fitxers que s’han instal·lat per entendre millor com s’ha de configurar el servei.

Per defecte els arxius de configuració de bind s’instal·len a la carpeta /etc/bind. Si llistem el contingut veurem tota una sèrie d’arxius. Principalment n’hi ha de dos tipus:

  • named.conf.* : conté la configuració de tots els dominis que voldrem resoldre amb el nostre servidor.
  • db.*: són arxius de configuració per a cada domini. S’especifiquen les màquines i serveis amb les seves corresponents adreces IP.

Si ens fixem veurem que hi ha arxius db.* que tenen un numero i d’altres que tenen un nom després del punt. Això és degut a que el servei de noms és capaç de traduir tant de nom a adreça IP com al revés, la configuració per un sentit o un altre es fa en arxius separats.

La instal·lació per defecte genera la configuració bàsica en l’arxiu named.conf i recomana que la resta de configuracions pròpies nostres es facin en l’arxiu named.conf.local. Seguirem la recomanació per si mai volem actualitzar el servidor, els nostres arxius no seran modificats.

Anem a configurar el nostre domini en ambdós sentits de traducció.

Configuració:

Tal i com s’ha comentat en el punt anterior entrarem a modificar l’arxiu named.conf.local. El contingut inicial és buit. Aquí afegirem la definició de les nostres zones. Vegem una d’exemple:

zone "domini.local" {
    type master;
    file "/etc/bind/db.domini.local";
    allow-query { any; };
};

En aquest exemple hi ha els següents punts a destacar:

  • Estem creant un servidor master. L’altre opció seria fer-lo slave.
  • La definició de màquines i serveis es troba en l’arxiu db.domini.local.
  • L’última línia permet que qualsevol faci peticions al servei.

Vegem ara com seria l’arxiu db.domini.local.

;
; BIND data file for domini.local domain
;
$TTL 604800
domini.local. IN SOA ns1.domini.local. hostmaster.domini.local. (
    2006063001         ; Serial
    10800              ; Refresh
    7200               ; Retry
    296000             ; Expire
    172800 )           ; Negative Cache TTL
;
@            IN    NS   ns1
@            IN    MX   1 mail

@            IN    A    192.168.2.1
localhost    IN    A    127.0.0.1

ns1          IN    A    192.168.2.1
www          IN    A    192.168.2.2
mail         IN    A    192.168.2.3

Comentem les característiques d’aquest arxiu:

  • $TTL 604800: Indica el temps de vida de la informació continguda en aquest document.
  • domini.local. IN SOA ns1.domini.local. hostmaster.domini.local.: Aquest és el registre SOA (Start of Authority) i conté la informació sobre la autoritat del servidor de noms. Les dades que conté internament es poden modificar a voluntat, tot i que hi ha algunes recomanacions.
  • @ IN NS ns1: Indica quin és, o són, els servidors de noms del domini. És indispensable ficar aquesta entrada.
  • @ IN MX 1 mail: Indica quin és el servidor al que s’ha d’enviar el correu que vagi destinat a aquesta zona o domini. En el nostre cas s’enviarà a l’entrada mail que veiem posteriorment, és a dir, la màquina amb la IP 192.168.2.3.
  • @ IN A 192.168.2.1: Aquí, com a la resta d’entrades s’utilitza l’@ per referir-se a la propia zona (domini.local). Això vol dir, per exemple, que si algú fa una consulta sobre domini.local, es respondrà amb l’adreça 192.168.2.1.
  • localhost IN A 127.0.0.1: Entrada que relaciona el localhost amb l’adreça 127.0.0.1
  • A partir d’aquest punt ja definim serveis més concrets, com ara ns1, www, mail amb les seves adreces IP corresponents a les màquines que tenen aquests serveis. Podem anar afegint tots els que necessitem. De la mateixa manera podem anar afegint els noms de les màquines dels usuaris també.

Guardem les modificacions als arxius i procedim a reiniciar el servidor bind9.

$ /etc/init.d/bind9 restart

En aquest punt ja podem provar de fer les primeres proves, per exemple un ping al nostre servei web:

$ ping www.domini.local

Si obtenim resposta de la màquina, en aquest cas 192.168.2.2, és que tot està funcionant correctament. Si trobem problemes podem utilitzar eines com dig o host que donen més informació sobre peticions a serveis de noms.

Fins aquí hem aconseguit transformar noms en adreces IP. Ara configurarem el pas contrari, és a dir, a partir d’una adreça IP volem aconseguir els noms que la relacionen. Per això començarem afegint una nova zona local a l’arxiu named.conf.local. El nostre arxiu hauria de ser més o menys així:

zone "domini.local" {
    type master;
    file "/etc/bind/db.domini.local";
    allow-query { any; };
};

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

Només hem afegit la segona zona. Aquesta zona defineix la utilització d’un nou arxiu: db.192.168.0, el contingut del qual serà força similar al que s’ha definit anteriorment per la zona domini.local:

;
; BIND reverse data file for domini.local domain
;
$TTL 604800
@ IN SOA domini.local. hostmaster.domini.local. (
    2006063001     ; Serial
    10800          ; Refresh
    7200           ; Retry
    296000         ; Expire
    172800 )       ; Negative Cache TTL
;
IN    NS  ns1.domini.local.

1            IN    PTR ns1.domini.local.
2            IN    PTR www.domini.local.
3            IN    PTR mail.domini.local.

Com sempre, després de modificar arxius de configuració, reiniciem el servei:

$ /etc/init.d/bind9 restart

Ara ja podem provar el que acabem de configurar. En aquest cas utilitzarem l’eina host:

$ host 192.168.0.2
2.0.168.192.in-addr.arpa domain name pointer www.domini.local.

Sembla que tot funciona correctament. Per acabar anem a veure com podem definir servidor de noms slaves (o secundaris).

Nota: Podeu visitar la pàgina www.dnsreport.com i fer una valoració del vostre domini (sempre que aquest sigui visible globalment).

Configurar slaves:

Per tal d’afegir robustesa i integritat a la nostra xarxa, sovint és recomanable tenir servidors de backup per si mai hi ha una desgracia. Afegir un servidor redundant de DNS és molt senzill, aquest pas però no és indispensable pel correcte funcionament del servidor principal, és totalment opcional.

D’entrada el que ens farà falta és un altre servidor. En el nostre cas, com sempre, tenim un Ubuntu 7.04 Server preparat per la feina. A més, en aquest servidor també s’ha instal·lat bind9.

$ apt-get install bind9

El que farem és simplement afegir les nostres zones a l’arxiu named.conf.local de la màquina que farà d’esclau amb la següent informació:

zone "domini.local" {
    type slave;
    file "sec.domini.local";
    allow-query { any; };
    masters { 192.168.0.1; };
};

zone "0.168.192.in-addr.arpa" {
    type slave;
    file "sec.db.192.168.0";
    masters { 192.168.0.1; };
};

En aquest arxiu s’ha especificat l’adreça 192.168.0.1 com la de la màquina que fa de master. Cadascú l’haurà d’adaptar a les seves necessitats.

Finalment només queda dir-li al master que existeix una màquina slave a la que pot enviar les configuracions locals. Això ho farem modificant l’arxiu named.conf.local de la màquina que fa de master. El contingut final ha d’esser el següent:

zone "domini.local" {
    type master;
    file "/etc/bind/db.domini.local";
    allow-query { any; };
    allow-transfer { 192.168.0.2; };
};

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

Igual que abans l’adreça 192.168.0.2 és de decisió de cadascú, apuntant a la màquina que fa d’slave.

Conclusió:

En aquest punt ja tenim dos servidors de noms, un master i un slave amb la informació del nostre domini. La traducció es realitza cap a les dues bandes. A partir d’aquest moment podem configurar els clients de la nostra xarxa per a que utilitzin aquests servidors o podem esperar a configurar el nostre propi servidor DHCP que ho imposi en el moment de la configuració automàtica dels clients de xarxa.