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:
hm. nice thoughts.
hacer un comentario en esta entrada