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.
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:
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:
yum install bind bind-utils -y
Una vez instalados, modificamos el fichero «/etc/named.conf», que en mi caso ha quedado así:
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:
vi /var/named/forward.ochobits
Con este contenido:
$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»
vi /var/named/reverse.ochobits
En mi caso, con el contenido:
$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:
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:
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
Lo reiniciamos para que así se apliquen los cambios:
firewall-cmd --reload
Modificamos permisos de ficheros
Debemos cambiar los permisos de algunos ficheros. Algunos de ellos debido al uso de SELinux
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:
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»
[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»
[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:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
Con el contenido:
(...)
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í:
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:
yum -y install bind-utils
Y ya podemos realizar las pruebas:
[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’
[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.
yum install bind bind-utils -y
Ahora modificamos el fichero de configuración «/etc/named.conf», con la configuración:
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:
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:
[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:
(...)
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»
nameserver 192.168.0.101
nameserver 192.168.0.111
Guardamos y reiniciamos la red.
systemctl restart network
Modificamos la configuración del cortafuegos
Añadimos el puerto 53 al cortafuegos:
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --reload
Modificamos permisos de ficheros y configuración de SELinux
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’
;; 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’
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: