DNS con ubuntu server
De la misma forma que configuramos el DHCP, el servicio de DNS irá junto a este. Utilizaremos en esta ocasión el paquete de isc Bind9
Veremos cómo configurar un servidor DNS primario con zonas directa e inversa para la resolución de nombres en nuestra red local. Configuraremos el uso de forwarders
para las consultas externas y dicho servidor DNS será autoritativo
para nuestra red.
Zona directa: Utilizada para resolver nombres de dominio a direcciones IP. La mayoría de las configuraciones de DNS en entornos de hosting web y servicios de red utilizan zonas directas.
Zona Inversa: Utilizada para realizar la búsqueda inversa y asociar direcciones IP con nombres de dominio. Es especialmente útil en situaciones donde necesitas conocer el nombre de dominio correspondiente a una dirección IP específica.
Empezaremos con una MV Ubuntu server en una red NAT con DHCP ya instalado con la siguiente información:
Nombre del host: jupiter
Nombre DNS: ns1
Dominio DNS primario: alexdns.local
FQDN: ns1.alexdns.local
enp0s3
Red NAT: 10.0.0.0/24
Máscara: 255.255.255.0
IP: 10.0.0.5
GW: 10.0.0.1
Rango DHCP: 10.0.0.10 - 10.0.0.50
Instalación paquetes
Actualizamos los repositorios de nuestro sistema:
sudo apt update
sudo apt upgrade
Una vez hecho esto, procedemos a instalar el paquete Bind9 y sus utilidades:
sudo apt install bind9 bind9-utils bind9-doc -y
Podemos comprobar si se ha instalado correctamente con:
systemctl status bind9
Configuración de DNS
Empezamos con la configuración:
El primer fichero a editar sería: /etc/bind/named.conf.local
Aquí será donde definiremos las zonas: directa e inversa, para el dominio alexdns.local haciendo uso de la cláusula zone.
Cada bloque de zona incluirá de que tipo será la zona y el fichero en el que estarán definidas las características, propiedades y entidades del dominio, para cada zona.
Una práctica adecuada sería hacer una copia de seguridad de los archivos de configuración, como es el caso del archivo named.conf.local
para lo cual podemos hacer:
sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.BKP
Índice
1. Configuramos las opciones
Editamos el siguiente archivo:
sudo nano /etc/bind/named.conf.options
El archivo debe contener lo siguiente:
// creamos ACL que permita solo el tráfico LAN de 10.0.0.0 - 10.0.0.255
options {
listen-on { any; };
directory "/var/cache/bind";
allow-query { localhost; LAN; };
recursion yes;
forwarders { 1.1.1.1; };
};
acl LAN {
10.0.0.0/24;
};
listen-on { }: la dirección donde estará escuchando Bind9, si no sabes con exactitud, utiliza la opción
any
.allow-query { }: desde que redes o ip es posible realizar consultas, normalmente la misma red a la que pertenece el servidor DNS.
forwarders { }: define servidores DNS a los cuales Bind9 reenviará las consultas que el no pueda resolver.
recursion: define la recursión en la búsqueda de registros
Editamos el archivo de configuración para forzar las peticiones IPv4 y evitarnos resoluciones de IPv6. Para ello vamos a:
sudo nano /etc/default/named
Y editamos el archivo:
RESOLVCONF=no
//Modificar la línea dejándola así:
OPTIONS="-u bind -4"
Antes de continuar conviene revisar que no haya problemas:
sudo named-checkconf /etc/bind/named.conf.options
sudo systemctl restart bind9
systemctl status bind9
Si todo rula bien, ahora deberíamos poder hacer ping desde la máquina cliente a un dominio cualquiera y debería funcionar:
ping google.es
Vamos ahora a configurar nuestros propios archivos y registros de zona para el servidor!
2. Configuramos las zonas:
Edita el archivo de configuración principal de zonas de BIND9
:
sudo nano /etc/bind/named.conf.local
Agrega una sección para tu zona directa y otra para la inversa. Por ejemplo, para el dominio "alexdns.local
":
//zona directa
zone "alexdns.local" in {
type master;
file "/etc/bind/zonas/db.alexdns.local";
};
//Zona inversa
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/zonas/db.0.0.10";
};
Donde:
zone "XXXXXX"
: define la zona directa o inversa en notación de dominio o dirección IP inversa para la red10.0.0.0
.type master;
: Esto le indica que este servidor DNS es el servidor maestro (master) para esta zona.file "/etc/bind/zonas/db.XXXXX";
: Especifica la ubicación del archivo de zona que contiene la información de resolución directa o inversa.
Para comprobar que la configuración es la correcta y no hayamos cometido errores en la sintaxis, usamos el comando:
sudo named-checkconf /etc/bind/named.conf.local
3. Configuramos el archivo de zona directa:
Partiendo de los ficheros de zona predeterminados como es el de db.empty
o db.127
podemos editarlos o crear nuevos:
sudo mkdir /etc/bind/zonas
sudo cp /etc/bind/db.empty /etc/bind/zonas/db.alexdns.local
sudo cp /etc/bind/db.127 /etc/bind/zonas/db.0.0.10
Al terminar, entramos a editar el archivo de zona directa:
sudo nano /etc/bind/zonas/db.alexdns.local
Añade registros de recursos (A, MX, etc.) según tus necesidades. Aquí hay un ejemplo básico:
$TTL 86400
@ IN SOA alexdns.local. root.alexdns.local. (
2024100701 ; Serial (Formato AAMMDDnn)
604800 ; Refresh (cada 7 días)
86400 ; Retry (cada 1 día)
2419200 ; Expire (28 días)
604800 ) ; Negative Cache TTL (7 días)
; Registro NS
@ IN NS ns1.alexdns.local.
; Registro A para el dominio base
@ IN A 10.0.0.5
; Registros A adicionales
ns1 IN A 10.0.0.5
www IN CNAME alexdns.local. ;Esto apuntara www.alexdns.local a la IP del dominio base
mail IN A 10.0.0.5
; Registro MX para correos
@ IN MX 10 mail.alexdns.local.
; Cliente
client IN A 10.0.0.10
Este ejemplo configura un servidor DNS para el dominio "alexdns.local" con direcciones IP asociadas a "bindserver.alexdns.local
" .
Para editar el archivo de zonas de forma más cómoda puedes usar VSCode con la extensión vscode-zonefile
Puedes verificar que la configuración sea correcta usando la herramienta named-checkzone
:
sudo named-checkzone alexdns.local /etc/bind/zonas/db.alexdns.local
Si no hay errores, deberías ver un mensaje indicando "zone alexdns.local/IN: loaded serial 1 OK
".
4. Configuramos el archivo de zona inversa:
Si deseas configurar la zona inversa para asociar direcciones IP con nombres de dominio, ahora debemos editar el otro archivo copiado anteriormente:
sudo nano /etc/bind/zonas/db.0.0.10
Añade registros de recursos (A, MX, etc.) según tus necesidades. Aquí tienes el ejemplo básico:
$TTL 604800 ;
@ IN SOA alexdns.local. root.alexdns.local. (
1 ; Serial
12h ; Refresh
15m ; Retry
3w ; Expire
2h ) ; Negative Cache TTL
;Registros de zona inversa
@ IN NS ns1.alexdns.local.
ns1 IN A 10.0.0.5
; Registros con IP servidor y 1 cliente
5 IN PTR ns1.alexdns.local.
10 IN PTR client.alexdns.local.
Fíjate que en el registro de IP ponemos el numero correspondiente al host de nuestra IP.
Ahora puedes proceder a probar la configuración con named-checkzone
:
sudo named-checkzone alexdns.local /etc/bind/zonas/db.0.0.10
5. Verificamos la red:
Asegúrate de que tu máquina esté configurada para usar el servidor DNS local. Edita tu archivo /etc/resolv.conf
y agrega la siguiente línea:
sudo nano /etc/resolv.conf
nameserver 127.0.0.1
nameserver 10.0.0.5
Reinicia el Servicio BIND9:
sudo systemctl restart bind9
sudo systemctl status bind9
Recuerda que para que esto funcione correctamente ahora deberás incluir la IP del servidor como DNS en el cliente.
Para verificar que la configuración funciona correctamente, usa el comando nslookup
para buscar los dominios configurados, por ejemplo:
nslookup client
nslookup bindserver
nslookup client.alexdns.local
nslookup bindserver.alexdns.local
Esto debería resolverse correctamente y mostrar un output parecido a esto:
Server: 127.0.0.53
Address: 127.0.0.53 #53
Non-authoritative answer:
Name: client.alexdns.local
Address: 10.0.0.10
6. Verificación de respuesta autoritativa
Gracias a Alina por hacerlo notar y buscar la solución al problema
Como habrás visto arriba, el servidor sigue mostrándonos respuestas no-autoritativas. Esto es debido a que las aplicaciones que hacen uso del resolver de systemd-resolved
escuchan en la interfaz de loopback en la dirección 127.0.0.53
, no a nuestro DNS.
El archivo /etc/resolv.conf
es un enlace simbólico a otro fichero de configuración. Si revisamos sus enlaces:
ls -l /etc/resolv.conf
Veremos que el systemd-resolved
, apunta a un archivo en:
/run/systemd/resolve/stub-resolv.conf
Entonces, modificamos el enlace simbólico haciendo lo siguiente para hacerlo apuntar al fichero adecuado:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Ahora, comprueba haciendo:
cat /etc/resolv.conf
Vuelve a probar el nslookup
ahora y verás que la IP es correcta.
Recuerda adaptar los nombres de dominio y las direcciones IP según tu configuración. Después de completar estos pasos, tu máquina Ubuntu Desktop actuará como un servidor DNS local para el dominio que hayas configurado. Puedes agregar entradas adicionales a tu zona directa según sea necesario.
Bibliografía:
Última actualización