Encuentranos en

Crear servidor local de DNS en CentOS, RHEL, OEL

Crear servidor local de DNS en CentOS, RHEL, OEL

Creo que no hace falta dar una gran introducción al sistema de DNS (Domain Name System); básicamente traduce IP a nombres de dominio y viceversa. Esta función es esencial en cualquier red empresarial.

El usar un DNS puede ser un requisito de instalación para diversos productos, ej. Oracle Database RAC, VMware vSphere.

[epcl_box type=”information”]Esta guía de configuración sirve para sistemas RHEL, CentOS, Oracle Linux en sus ramas 6 y 7 entre otros.[/epcl_box]

Datos generales

  • Sistema operativo: CentOS 7
  • Hostname: sac7lab
  • IP: 192.168.0.43

Instalar paquete

Lo primero que debemos hacer es realizar la instalación del paquete principal para el DNS

# yum install bind

Configurar servidor DNS

La configuración es relativamente sencilla. Primero debemos modificar el archivo de configuraciones.

# vi /etc/named.conf

Dicho archivo contiene un template de configuración, simplemente se deben agregar unas líneas como en el siguiente ejemplo:

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	listen-on port 53 { 127.0.0.1; 192.168.0.43; };
	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; };

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	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"sysadventures.local" IN {
	type master;
	file "/var/named/sysadventures.local";
	allow-update { none; };
};

zone"0.168.192.in-addr.arpa" IN {
	type master;
	file "/var/named/0.168.192.in-addr";
	allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Explicación de modificación

1.- En esta línea se configura la IP por la cual se comunicará el DNS

listen-on port 53 { 127.0.0.1; 192.168.0.43; };

2.- En esta línea se configura los segmentos de red que pueden hacer consulta al servidor DNS

allow-query     { localhost; 192.168.0.0/24; };

[epcl_box type=”notice”]Por alguna razón no funciona si el segmento es diferente a 24 bits, así que si tu red es de diferente segmento se recomienda que se setee como de 24[/epcl_box]

3.- Las siguientes líneas indican el dominio que se usará para la resolución, tipo de DNS y ruta del archivo donde se encuentran los registros de resolución por dominio

zone "sysadventures.local" IN {
	type master;
	file "/var/named/sysadventures.local";
	allow-update { none; };
};

4.- Las siguientes líneas indican un archivo inverso para asociar las IPs con el dominio, tipo de DNS y ruta del archivo donde se encuentran los registros de resolución inversa

zone "0.168.192.in-addr.arpa" IN {
	type master;
	file "/var/named/0.168.192.in-addr";
	allow-update { none; };
};

[epcl_box type=”information”]El nombre del archivo se genera según el segmento de red, en caso de ser diferente pueden utilizar su segmento[/epcl_box]

Crear zona para resolución

Crearemos el archivo que se mencionó en la líneas pasadas

# vi /var/named/sysadventures.local

Pueden utilizar el siguiente ejemplo para los registros, sustituyendo nombres e IPs

$TTL 86400
@   IN  SOA     sac7lab.sysadventures.local. root.sysadventures.local. (
	2011071001  ; Serial
	3600        ; Refresh
	1800        ; Retry
	604800      ; Expire
	86400       ; Minimum TTL
)
@	IN	NS	sac7lab.sysadventures.local.
@	IN	A	192.168.0.43
@	IN	A	192.168.0.44
@	IN	A	192.168.0.45
@	IN	A	192.168.0.46
sac7lab	IN	A	192.168.0.43
nodo01	IN	A	192.168.0.44
nodo02	IN	A	192.168.0.45
nodo03	IN	A	192.168.0.46

En las lineas anteriores se agregan tres nodos extras al servidor DNS con sus respectivas IPs. Para verificar que la sintaxis del registro es correcta se ejecuta el siguiente comando

# named-checkzone sysadventures.local /var/named/sysadventures.local

zone sysadventures.local/IN: loaded serial 2011071001
OK

Crear zona de resolución inversa

Crearemos el archivo que se mencionó en la lineas pasadas

# vi /var/named/0.168.192.in-addr

Dentro del archivo pueden agregar el siguiente ejemplo de configuración, sustituyendo nombres e IPs

$TTL 86400
@   IN  SOA     sac7lab.sysadventures.local. root.sysadventures.local. (
	2011071001  ; Serial
	3600        ; Refresh
	1800        ; Retry
	604800      ; Expire
	86400       ; Minimum TTL
)
@	IN	NS	sac7lab.sysadventures.local.
@	IN	PTR	sysadventures.local.
sac7lab	IN  A	192.168.0.43
nodo01	IN  A	192.168.0.44
nodo02	IN  A	192.168.0.45
nodo03	IN  A	192.168.0.46
43		IN	PTR	sac7lab.sysadventures.local.
44		IN	PTR	nodo01.sysadventures.local.
45		IN	PTR	nodo02.sysadventures.local.
46		IN	PTR	nodo03.sysadventures.local.

Como se puede observar, las configuraciones son similares. Como nota, las últimas líneas sólo indican el último octeto de una IP.

Para verificar que la sintaxis del registro es correcta se ejecuta el siguiente comando

# named-checkzone sysadventures.local /var/named/0.168.192.in-addr 

zone sysadventures.local/IN: loaded serial 2011071001
OK

Iniciar servicios

Una vez configurado los tres archivos necesarios, se inicia el servicio de DNS activando la persistencia ante reinicios

// CentOS 6, RHEL 6, Oracle Linux 6

# service named start
# chkconfig named on

// CentOS 7, RHEL 7, Oracle Linux 7

# systemctl start named.service
# systemctl enable named.service

Configurar Firewall

En caso de usar un firewall a nivel S.O. es necesario abrir el puerto 53 con protocolo UDP

// CentOS 6, RHEL 6, Oracle Linux 6

En estas versiones de S.O se utiliza iptables. Para abrir el puerto se debe modificar el archivo de configuración de iptables

# vi /etc/sysconfig/iptables

Dentro del mismo agregamos la siguiente línea

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

Seguido se reinicia el servicio para que aplique el cambio

# service iptables restart

iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

// CentOS 7, RHEL 7, Oracle Linux 7

A partir de estas versiones se utiliza el gestor dinámico Firewalld. Para abrir el puerto 53 se utiliza el siguiente comando

# firewall-cmd --zone=public --add-port=53/udp --permanent

success

Se reinicia el servicio para aplicar el cambio

# firewall-cmd --reload

success

Probar DNS Server

El servidor DNS ya se encuentra listo y funcional, ahora sólo queda probarlo.

Primero que nada edita el archivo resolv.conf

# vi /etc/resolv.conf

Añade la IP del servidor DNS así como el dominio

search sysadventures.local
nameserver 192.168.0.43

Ahora se prueba la resolución con el comando nslookup

[root@sac7lab ~]# nslookup nodo01

Server:		192.168.0.43
Address:	192.168.0.43#53

Name:	nodo01.sysadventures.local
Address: 192.168.0.44

También se puede probar la resolución inversa por IP

[root@sac7lab ~]# nslookup 192.168.0.44
Server:		192.168.0.43
Address:	192.168.0.43#53

44.0.168.192.in-addr.arpa	name = nodo01.sysadventures.local.

Con estas pruebas queda confirmado el correcto funcionamiento del DNS.

Related Posts