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]
Tabla de contenido
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.