El DNS (Domain Name System) es un sistema en el que todos los nombres de dominio de los servidores están organizados en una jerarquía específica. ¿Por qué lo necesitamos? Imagina que necesitas conectarte a un dispositivo con la dirección IP 91.206.179.207. Podrías introducir esta dirección en la línea de comandos para obtener la información necesaria, pero recordar muchas combinaciones numéricas de este tipo es muy difícil. Por ello, se crearon servidores especiales para convertir los nombres de dominio en direcciones IP. Así, cuando introduces hostman.com en la barra de búsqueda del navegador, los datos de la solicitud se envían a un servidor DNS, que busca coincidencias en su base de datos. El servidor DNS devuelve la dirección IP necesaria a tu dispositivo y solo entonces el navegador accede directamente al recurso.
Configurar tu propio DNS permite una configuración del sistema más flexible y precisa, y evita la dependencia de terceros. En este artículo veremos cómo configurar DNS utilizando el servidor de nombres BIND en Ubuntu.
Zona: Parte de la jerarquía DNS alojada en un servidor DNS. Define los límites dentro de los cuales un servidor o grupo de servidores es responsable.
Servidores raíz: Servidores DNS que contienen información sobre los dominios de nivel superior (.ru, .com, etc.).
Dominio: Parte con nombre de la jerarquía DNS, un nodo específico que puede incluir otros nodos. Las direcciones DNS se leen de derecha a izquierda y comienzan con un punto, con los dominios separados también por puntos. Por ejemplo, el dominio poddomen.domen.ru debe leerse como .ru.domen.poddomen. Normalmente, el nombre de dominio refleja la estructura de la jerarquía DNS, pero el punto final se omite.
FQDN (Fully Qualified Domain Name): Nombre de dominio completo que incluye todos los dominios superiores.
Registro de recursos (Resource Record): Unidad de almacenamiento de información, básicamente un registro que vincula un nombre con información de servicio. Consta de:
Nombre (NAME): El nombre o la dirección IP propietaria de la zona
Time to Live (TTL): Tiempo durante el cual un registro se almacena en la caché DNS antes de eliminarse
Clase (CLASS): Tipo de red, normalmente IN (Internet)
Tipo (TYPE): Finalidad del registro
Datos (DATA): Información adicional
Registro A: Asocia un nombre de host con una dirección IPv4. Cada interfaz de red solo puede tener un registro A.
website.com. 520 IN A 91.206.179.207
Registro AAAA: Igual que el registro A, pero para IPv6.
CNAME: Registro de nombre canónico, un alias de un nombre real para redirección.
MX: Especifica los servidores de correo del dominio. El campo NAME contiene el dominio de destino y el campo DATA contiene la prioridad y el host que recibe el correo.
website.com. 17790 IN MX 10 mx.website.com.
website.com. 17790 IN MX 20 mx2.website.com.
NS: Apunta al servidor DNS que atiende el dominio.
PTR: Mapea direcciones IP a nombres de dominio (resolución inversa).
SOA: Describe la configuración principal de la zona.
SRV: Contiene direcciones de servidores que proporcionan servicios internos del dominio, como Jabber.
Para seguir las instrucciones de este artículo, necesitas al menos dos servidores Ubuntu en el mismo centro de datos. Puedes solicitar cualquiera de estos servidores en Hostman.
Necesitaremos dos servidores Ubuntu 20.04, que actuarán como servidores DNS primario y secundario, ns1 y ns2 respectivamente. Además, habrá servidores adicionales que utilizarán los servidores DNS configurados.
Debes tener privilegios de superusuario en cada servidor.
Utilizaremos bind9 como servidor DNS. Instala el paquete bind9 desde el repositorio de Linux:
sudo apt update && sudo apt upgrade -y
sudo apt install bind9
También se recomienda instalar herramientas de monitorización de red:
sudo apt install dnsutils
Después de la instalación, inicia el servicio bind9:
sudo service bind9 start
El archivo principal de configuración del servidor es /etc/bind/named.conf. Describe la configuración general y normalmente se divide en varios archivos para mayor comodidad.
Este archivo contiene los parámetros generales del servidor:
options {
dnssec-validation auto;
auth-nxdomain no;
directory "/var/cache/bind";
recursion no; # deshabilita consultas recursivas al servidor
listen-on {
172.16.0.0/16;
127.0.0.0/8;
};
forwarders {
172.16.0.1;
8.8.8.8;
};
};
Para comprobar que todo está correcto, utiliza named-checkconf:
sudo named-checkconf
Si no hay errores, el servidor BIND comenzará a funcionar.
El servidor DNS primario almacena la copia principal del archivo de zona. Todas las zonas se guardarán en el directorio /etc/bind/master-zones. Crea el directorio:
sudo mkdir /etc/bind/master-zones
Crea un archivo para describir la zona:
sudo touch /etc/bind/master-zones/test.example.com.local.zone
Y añade los registros SOA, NS y A:
$ttl 3600
$ORIGIN test.example.com.
test.example.com. IN SOA (
ns.test.example.com.
abuse.test.example.com.
2022041201
10800
1200
604800
3600 )
@ IN NS ns.test.example.com.
@ IN NS ns2.test.example.com.
@ IN A 172.16.101.3
ns IN A 172.16.0.5
ns2 IN A 172.16.0.6
Comprueba la zona con named-checkzone:
sudo named-checkzone test.example.com. /etc/bind/master-zones/test.example.com.local.zone
Este archivo también se incluye en la configuración principal. Aquí definimos las zonas locales:
zone "test.example.com." {
type master;
file "/etc/bind/master-zones/test.example.com.local.zone";
};
Comprueba la configuración y reinicia bind9 (la opción -z verifica los archivos de zona):
sudo named-checkconf
sudo named-checkconf -z
sudo service bind9 restart
sudo service bind9 status
Las views permiten gestionar de forma flexible la resolución de nombres desde diferentes subredes. Añade lo siguiente en /etc/bind/named.conf:
include "/etc/bind/named.conf.options";
acl "local" { 172.16.0.0/16; };
view "local" {
include "/etc/bind/named.conf.local";
match-clients { local; };
};
Reinicia bind9:
sudo service bind9 restart
Tras reiniciar el servidor, puedes solicitar el registro SOA del servidor 172.16.0.5 desde otro equipo de la red local:
dig @172.16.0.5 -t SOA test.example.com
En este punto, la configuración del servidor DNS primario está completa.
En esta guía hemos configurado DNS en un servidor con Ubuntu utilizando el paquete bind9. Tras seguir todos los pasos, los dos servidores DNS configurados pueden utilizarse para la resolución de nombres dentro de la red. Para usar estos servidores DNS personalizados, configura tus otros servidores para que utilicen 172.16.0.5 y 172.16.0.6 como servidores DNS.
Esta configuración puede servir como base para futuras mejoras, como la configuración de un servidor de correo.