bind para el correo (parte i de iii)

24 de mayo de 2009

Como todos sabéis el DNS es uno de los principales servicios que sustentan Internet y, por tanto, es fundamental para la distribución del correo (y otras cosas)... Quien no sepa como funciona el DNS que se vaya leyendo la Wikipedia.

El objetivo de estos tres post son:

+ Configuración de dos maquinas Linux (master+slave) servidoras de DNS por Bind.
+ Configuración de varias zonas de DNS en especial para su uso con el correo.
+ Replicación de zona de un servidor a otro (mensajes AXFR).
La distribución que utilizaré para los dos servidores será CentOS 5.2. Antes de empezar a instalar Bind necesitaremos las dos maquinas perfectamente configuradas (TCP/IP), parcheadas y conectadas a Internet.

Instalamos el soft necesario:

# yum search bind | grep ^bind
# yum install bind.i386

Como resultado tendremos instalado bind, bind-libs y bind utils.

Configuraremos el firewal de iptables para que cualquiera pueda realizar consultas DNS sobre esta maquina. Para ello abrimos el puerto 53/UDP.

Editamos /etc/sysconfig/iptables:

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT 

Reiniciamos iptables:

# service iptables restart

Intentamos iniciar Bind, pero debería fallar ya que aun no lo tenemos correctamente configurado:

# service named restart

Empezamos primero configurando el DNS principal y cuando este todo correcto montaremos el secundario.
El archivo de configuración de Bind se encuentra dentro de /etc/named.conf. Lo crearemos y colocaremos el siguiente contenido:

options {
   directory "/var/named/data";
};


zone "amperisblog.com" in {
   type master;
   file "amperisblog.com.zone";
   allow-update { none; };
};

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

Nota: He creado una zona llamada "." que apunta a un fichero de configuración llamado "root.cache". Esto nos sirve por si queremos que nuestro DNS sepa resolver otros dominios. Es decir, que nuestro servidor de DNS haga a la vez de cache de DNS. Para ello hay que crear /var/named/data/root.cache y pegar el contenido de: http://www.tux.org/~mayer/linux/book/node155.html

El parámetro "directory" nos está diciendo dónde se encontrarán los archivos de configuración de nuestro dominio. En mi caso tenemos un archivo de configuración para mi dominio amperisblog.com que se encontrará dentro de /var/named/data/amperisblog.com.zone.
El parámetro "type" nos indica si ese dominio será master o slave. Para un DNS principal este campo será master.

Creamos ahora el archivo de configuración para la zona ampeisblog.com. En ella se encontraran todos los campos A, CNAME, MX, NS, etc. Creamos el archivo /var/named/data/amperisblog.com.zone con el siguiente contenido:

$TTL 86400
amperisblog.com.  IN     SOA    dns1.amperisblog.com.     admindns.amperisblog.com. (
                    20090522   ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

      IN     NS     dns1.amperisblog.com.
      IN     NS     dns2.amperisblog.com.

      IN     MX     10     mail1.amperisblog.com.
      IN     MX     20     mail2.amperisblog.com.

             IN     A       222.222.222.223

server1      IN     A       222.222.222.224
server2      IN     A       222.222.222.223
dns1         IN     A       222.222.222.221
dns2         IN     A       222.222.222.222

ftp          IN     CNAME   server1
mail1        IN     CNAME   server1
mail2        IN     CNAME   server2
www          IN     CNAME   server2

Vamos a explicar la configuración de este archivo de zona. Lo primero que se especifica es el registro de SOA, donde aparece el nombre de nuestro dominio, el DNS primario (dns1.amperisblog) y la dirección de correo del administrador del DNS (admindns.amperisblog.com).

Otros datos que encontramos dentro de SOA son los tiempos de cacheo y refresco:

20090522: es un número de serie autoincremental que deberíamos incrementar cada vez que hagamos una modificación en la zona.
21600: indica al DNS esclavo cada cuando tiempo tiene que chequear la configuración del DNS maestro. En nuestro caso no tiene sentido porque este servidor es primario.
3600: si el refresco del esclavo falla, esto indica cada cuanto tiempo tiene que probar.
604800: si el refresco del esclavo sigue fallando, esto indica cuando el DNS esclavo debe dejar de funcionar.
86500: indica a un cache de DNS el tiempo de vida de la traducción DNS.
NS: indica los nombres de los dos servidores de DNS de nuestra zona.
MX: indica con peso 10 y peso 20 cuales son los servidores de correo que deben responder al dominio amperisblog.com.
A: indica las direcciones IP de todas las maquinas publicas en Internet. En este caso tenemos dos servidores de DNS (dns1, dns2) y dos servidores (server1, server2).
CNAME: indica los alias. Tenemos dos alias de mailX que apuntan a nuestros server1 y server2. Tenemos un alias de www para alojamiento Web que apunta a server2 y por ultimo tenemos un alias de ftp que apunta al server1.

Si todo ha ido bien ya podemos arrancar otra vez el DNS con un "service named restart" y comprobar el archivo de log para ver si todo a ido bien:

# cat /var/log/messages | grep named
May 23 15:33:29 dns1 named[13573]: starting BIND 9.3.4-P1 -u named
May 23 15:33:29 dns1 named[13573]: found 1 CPU, using 1 worker thread
May 23 15:33:29 dns1 named[13573]: loading configuration from '/etc/named.conf'
May 23 15:33:29 dns1 named[13573]: listening on IPv4 interface lo, 127.0.0.1#53
May 23 15:33:29 dns1 named[13573]: listening on IPv4 interface eth0, 192.168.1.8#53
May 23 15:33:29 dns1 named[13573]: command channel listening on 127.0.0.1#953
May 23 15:33:29 dns1 named[13573]: command channel listening on ::1#953
May 23 15:33:29 dns1 named[13573]: zone amperisblog.com/IN: loaded serial 20090522
May 23 15:33:29 dns1 named[13573]: running
May 23 15:33:29 dns1 named[13573]: zone amperisblog.com/IN: sending notifies (serial
20090522)

Ahora ya podemos realizar peticiones de consultas sobre nuestro nuevo servidor de DNS:

[root@dns1 data]# dig @localhost amperisblog.com

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

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

;; ANSWER SECTION:
amperisblog.com.        86400   IN      A       222.222.222.223

;; AUTHORITY SECTION:
amperisblog.com.        86400   IN      NS      dns1.amperisblog.com.
amperisblog.com.        86400   IN      NS      dns2.amperisblog.com.

;; Query time: 12 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat May 23 15:

Veamos también si es capaz de cachear/traducir otros dominios:

[root@dns1 data]# dig @localhost google.com

; <<>> DiG 9.3.4-P1 <<>> @localhost google.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38954
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 0

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

;; ANSWER SECTION:
google.com.             300     IN      A       74.125.45.100
google.com.             300     IN      A       74.125.67.100
google.com.             300     IN      A       209.85.171.100

;; AUTHORITY SECTION:
google.com.             345600  IN      NS      ns1.google.com.
google.com.             345600  IN      NS      ns2.google.com.
google.com.             345600  IN      NS      ns3.google.com.
google.com.             345600  IN      NS      ns4.google.com.

;; Query time: 699 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat May 23 15:38:55 2009
;; MSG SIZE  rcvd: 148

Si queremos controlar las peticiones podemos añadir un log dentro del /etc/named.conf:

logging{
  channel simple_log {
    file "/var/log/named.log" versions 3 size 5m;
    severity warning;
    print-time yes;
    print-severity yes;
    print-category yes;
  };
  category default{
    simple_log;
  };
};

Si estamos debugeando nuestro DNS cambiaremos "severity warning;" por un "severity debug;".

1 comentarios:

Anónimo dijo...

hm. nice thoughts.