Crear un servidor DNS con Centos 7

Vamos a crear un servidor DNS con Centos 7. Bueno, realmente configuraremos dos servidores, un como maestro y otro con el rol de secundario, utilizando el servicio Bind.
150
Lo cierto es que no tenía planeado crear una entrada de este tipo. Pero lo veo necesario, ya que he tenido que montar un par de servidores DNS, para que así el servidor central que estoy montando con Ansible, pueda realizar las consultas contra estos.

Así que vamos al turrón

Crear un servidor DNS con Centos 7

Antes de empezar, vamos a tener en cuenta que voy a utilizar un entorno, con estas máquinas virtuales:

1
2
3
servdns1.ochobits.local 192.168.0.101
servdns2.ochobits.local 192.168.0.111
raspberrypi.ochobits.local 192.168.0.75

Instalación servidor DNS primario

Empezamos primero con el nodo con el rol de maestro, esto es, el “servdns1”

Instalamos los paquetes de Bind en el servidor:

1
yum install bind bind-utils -y

Una vez instalados, modificamos el fichero “/etc/named.conf”, que en mi caso ha quedado así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
options {
        listen-on port 53 { 127.0.0.1; 192.168.0.101; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; 192.168.0.0/24;};
        allow-transfer  { localhost; 192.168.0.111; };
 
        recursion yes;
 
        dnssec-enable yes;
        dnssec-validation yes;
 
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
 
        managed-keys-directory "/var/named/dynamic";
 
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
        type hint;
        file "named.ca";
};
 
zone "ochobits.local" IN {
type master;
file "forward.ochobits";
allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "reverse.ochobits";
allow-update { none; };
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Esto es en mi caso, claro. Debéis adaptar la configuración a vuestras necesidades.

Creación de zonas

Debemos crear las zonas de “forward” y la de “reverse”, que mencionamos en el fichero anterior “/etc/named.conf”

Creamos zona de “forward”

Creamos el fichero “forward.ochobits”, en el directorio “/var/named”, como sigue:

1
vi /var/named/forward.ochobits

Con este contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$TTL 86400
@   IN  SOA     servdns1.ochobits.local. root.ochobits.local. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          servdns1.ochobits.local.
@       IN  NS          servdns2.ochobits.local.
@       IN  A           192.168.0.101
@       IN  A           192.168.0.111
@       IN  A           192.168.0.75
servdns1         IN  A   192.168.0.101
servdns2         IN  A   192.168.0.111
raspberrypi      IN  A   192.168.0.75
Creamos zona “reverse”

Creamos el fichero “reverse.ochobits”, dentro de la carpeta “/var/named”

1
vi /var/named/reverse.ochobits

En mi caso, con el contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$TTL 86400
@   IN  SOA     servdns1.ochobits.local. root.ochobits.local. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          servdns1.ochobits.local.
@       IN  NS          servdns2.ochobits.local.
@       IN  PTR         unixmen.local.
servdns1        IN  A   192.168.0.101
servdns2        IN  A   192.168.0.111
raspberry       IN  A   192.168.0.75
101     IN  PTR         servdns1.ochobits.local.
111     IN  PTR         servdns2.ochobits.local.
75      IN  PTR         raspberrypi.ochobits.local

Añadimos al arranque el servicio Bind y lo encendemos

Utilizamos las siguientes órdenes:

1
2
systemctl enable named
systemctl start named

Configuración del cortafuegos

El servicio DNS utiliza el puerto 53, tanto utilizando el protocolo tcp como el udp, tal como sigue:

1
2
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp

Lo reiniciamos para que así se apliquen los cambios:

1
firewall-cmd --reload

Modificamos permisos de ficheros

Debemos cambiar los permisos de algunos ficheros. Algunos de ellos debido al uso de SELinux

1
2
3
4
chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

Realizar pruebas de funcionamiento

Para comprobar que todo está bien configurado, podemos realizar algunas pruebas.

Por ejemplo, comprobar el fichero de configuración:

1
named-checkconf /etc/named.conf

Si al ejecutar el comando no nos devuelve ningún error, es que en esta parte todo ha ido bien.

Revisamos la zona del “forward”

1
2
3
[root@servdns1 ~]# named-checkzone ochobits.local /var/named/forward.ochobits
zone ochobits.local/IN: loaded serial 2011071001
OK

Y ahora le toca el turno a la revisión de la zona “reverse”

1
2
3
[root@servdns1 ~]# named-checkzone ochobits.local /var/named/reverse.ochobits
zone ochobits.local/IN: loaded serial 2011071001
OK

Y añadimos el servidor DNS en el fichero de configuración de red, en mi caso:

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0

Con el contenido:

1
2
3
4
5
6
7
(...)
ONBOOT=yes
IPADDR=192.168.0.101
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.101
(...)

Y añadimos la IP del servidor en el fichero de configuración “/etc/resolv.conf”, así:

1
nameserver      192.168.0.101

Guaramos y salimos del fichero.

Test del servidor DNS

Utilizamos herramientas como ‘nslookup‘ y ‘dig‘, para comprobar si funciona bien el servidos. Si no las tenemos instaladas, podemos realizar esta operación:

1
yum -y install bind-utils

Y ya podemos realizar las pruebas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@servdns1 ~]# dig servdns1.ochobits.local

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> servdns1.ochobits.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47262
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;servdns1.ochobits.local.       IN      A
 
;; ANSWER SECTION:
servdns1.ochobits.local. 86400  IN      A       192.168.0.101
 
;; AUTHORITY SECTION:
ochobits.local.         86400   IN      NS      servdns1.ochobits.local.
ochobits.local.         86400   IN      NS      servdns2.ochobits.local.
 
;; ADDITIONAL SECTION:
servdns2.ochobits.local. 86400  IN      A       192.168.0.111
 
;; Query time: 1 msec
;; SERVER: 192.168.0.101#53(192.168.0.101)
;; WHEN: sáb feb 09 15:36:38 CET 2019
;; MSG SIZE  rcvd: 121

Y si utilizamos la herramienta ‘nslookup’

1
2
3
4
5
6
7
8
9
10
[root@servdns1 ~]# nslookup ochobits.local
Server:         192.168.0.101
Address:        192.168.0.101#53

Name:   ochobits.local
Address: 192.168.0.101
Name:   ochobits.local
Address: 192.168.0.111
Name:   ochobits.local
Address: 192.168.0.75

Bien, con esto ya tenemos configurado el servidor DNS primario.

Ahora pasemos a configurar el segundo.

Servidor DNS secundario

Ahora nos toca configurar el servidor secundario o esclavo, que en mi caso tiene el nombre de “servdns2.ochobits.local”, que tiene la IP asignada “192.168.0.111”

Antes de nada debemos instalar los mismos paquetes que en el primario. Si utilizamos máquinas virtuales, siempre podemos clonar el host primario y solo cambiarle el nombre, la IP y algunas cosas de los ficheros de configuración.

Igualmente realizaremos otra vez los mismos pasos. El primero es instalar Bind.

1
yum install bind bind-utils -y

Ahora modificamos el fichero de configuración “/etc/named.conf”, con la configuración:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
options {
        listen-on port 53 { 127.0.0.1; 192.168.0.111; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; 192.168.0.0/24;};
 
        recursion yes;
 
        dnssec-enable yes;
        dnssec-validation yes;
 
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
 
        managed-keys-directory "/var/named/dynamic";
 
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
        type hint;
        file "named.ca";
};
 
zone "ochobits.local" IN {
type slave;
file "slaves/ochobits.fwd";
masters { 192.168.0.101; };
};
zone "0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/ochobits.rev";
masters { 192.168.0.101; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Encendemos el servicio bind y lo añadimos al arranque:

1
2
systemctl enable named
systemctl start named

Las zonas de “forward” y “reverse” se replican de manera automática desde el servidor maestro, en la carpeta “/var/named/slaves”, podemos comprobar que es así, listando el contenido de la carpeta:

1
2
[root@servdns2 ~]# ls /var/named/slaves/
ochobits.fwd  ochobits.rev

Modificar configuración de red

Al igual que hicimos con el servidor maestro, modificamos el fichero de configuración de red “/etc/sysconfig/network-scripts/ifcfg/eth0”, en el servidor secundario:

1
2
3
4
5
6
(...)
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.101
DNS2=192.168.0.111
(...)

También añadimos los datos de los servidores DNS, en el fichero “/etc/resolv.conf”

1
2
nameserver 192.168.0.101
nameserver 192.168.0.111

Guardamos y reiniciamos la red.

1
systemctl restart network

Modificamos la configuración del cortafuegos

Añadimos el puerto 53 al cortafuegos:

1
2
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --reload

Modificamos permisos de ficheros y configuración de SELinux

1
2
3
4
chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

Pruebas de funcionamiento

Hacemos prueba con la herramienta ‘dig’ y ‘nslookup’

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;servdns1.ochobits.local.       IN      A
 
;; ANSWER SECTION:
servdns1.ochobits.local. 86400  IN      A       192.168.0.101
 
;; AUTHORITY SECTION:
ochobits.local.         86400   IN      NS      servdns2.ochobits.local.
ochobits.local.         86400   IN      NS      servdns1.ochobits.local.
 
;; ADDITIONAL SECTION:
servdns2.ochobits.local. 86400  IN      A       192.168.0.111
 
;; Query time: 6 msec
;; SERVER: 192.168.0.101#53(192.168.0.101)
;; WHEN: sáb feb 09 16:01:08 CET 2019
;; MSG SIZE  rcvd: 121

Y con ‘nslookup’

1
2
3
4
5
6
7
8
9
Server:         192.168.0.101
Address:        192.168.0.101#53
 
Name:   ochobits.local
Address: 192.168.0.111
Name:   ochobits.local
Address: 192.168.0.75
Name:   ochobits.local
Address: 192.168.0.101

Y con esto ya tenemos nuestros servidores DNS con Bind configurados.

Espero que alguna ocasión os sea de utilidad.

Fuentes consultadas:

Unixmen.com – Setting Up DNS Server On CentOS 7

6 Respuestas

  1. Javi Felices dice:

    Buenas David, gran artículo como siempre.

    Una consulta, el serverdns2 podria ser una interfaz de red virtualizada (eth0:0) (?)

    Un saludo y gracias.

    • Hola Javi,

      ¿Te refieres a una interfaz de red virtual en el mismo nodo? Piensa que el nodo secundario debe tener el servicio corriendo apuntando contra su propio fichero de configuración.

      Piensa que la idea de tener dos nodos, es que si cae uno de ellos tienes el otro disponible.

      Igualmente he visto algo de documentación por Internet, para crear dos instancias de BIND en el mismo nodo. Aunque yo no lo he probado.

      Saludos

      • Javi Felices dice:

        Totalmente de acuerdo.

        Te comento, compartí el artículo en un grupo de linuxen Facebook, y alguien comentó esta posibilidad, yo le dije que la intención es que si uno cae, tener otro disponible, por eso el tener este tipo de configuración, pero no perdía nada en preguntarlo.

        Un saludo y gracias.

  2. adolf242 dice:

    Muy buen tutorial.
    Lo probe con mas zonas y va perfecto.
    Por cierto, si no pones las ips en el fichero hosts tambien va como la seda.

  3. NORBERTO WEHRLI dice:

    Hola, necesito crear un servidor para reverse DNS que lo solicita LACNIC para la resolucion de los host de servidores de exchange. Deberia configurar el servidor con IP Publica para que las consultas le caigan a el? en ese caso donde deberia ponerla en los script que desplegaste.
    Gracias

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: