Instalacion y Configuracion de Bind9
Instalacion y Configuracion de Bind9
Instalacion y Configuracion de Bind9
Descripción
Vamos a instalar el servidor Bind9 para poder dar nombres a los equipos de una red interna en lugar
de tener que utilizar las IPs.
Dar nombres (FQDNs) a los equipos facilita la configuración de servicios y aplicaciones, así como el
mantenimiento de la propia red.
Instalar Bind9
Partimos de una máquina virtual con Ubuntu 22.04 LTS.
nslookup y dig
Podemos verificar que está funcionando correctamente con:
Con este comando le estamos diciendo a nuestra máquina "127.0.0.1" que resuelva la dirección
"google.com".
La respuesta será:
ubuntu@ubuntu-2204:~$ nslookup google.es 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: google.com
Address: 142.250.200.78
Name: google.com
Address: 2a00:1450:4003:80d::200e
La herramienta nslookup es muy popular, pero es posible que nos aparezca un mensaje diciendo
que está obsoleta (deprecated) y se nos recomienda utilizar dig, que es una herramienta
desarrollada por el Internet Systems Consortium (ISC), quienes están detrás del desarrollo de ISC
DHCP o de Bind9.
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ee7c03774c74ca2c010000006362401540332877f5a29f64 (good)
;; QUESTION SECTION:
;google.es. IN A
;; ANSWER SECTION:
google.es. 300 IN A 142.250.184.163
Si escribimos:
host google.es 127.0.0.1
Para resoluciones simples (nombres a IPs), podemos utilizar también la herramienta ping. Aunque
ping es una herramienta para verificar la conectividad entre equipos:
ping google.es
Además, a ping no le hemos especificado el servidor DNS que debe de utilizar, por lo que en este
caso para la traducción estará utilizando el resolver de la máquina virtual y no Bind9.
man <nombre-herramienta>
Servidor caché
Si realizamos la siguiente consulta:
Observaremos que el servidor tarda un tiempo en realizarla, en este caso 736 msec.
...
;; Query time: 736 msec
...
...
;; Query time: 0 msec
...
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: false
addresses:
- 192.168.31.2/24
routes:
- to: default
via: 192.168.31.1
nameservers:
addresses: [192.168.31.2]
Y aplicamos la configuración:
nameserver 127.0.0.53
options edns0 trust-ad
Se nos indica que no se debe de editar este archivo ya que está manejado por el resolver de
systemd-resolved. Y que podemos emplear el comando resolvectl status para ver detalles acerca
de los servidores DNS en uso.
Ubuntu dispone de un servidor DNS Stub en la dirección 127.0.0.53, que simplemente reenvía todas
las consultas que le lleguen a otro (por ejemplo, al que indiquemos en la configuración de netplan o
de NetworkManager, en el caso de que configuremos los servidores a través del entorno gráfico). Por
eso, cuando realicemos consultas DNS la respuesta nos vendrá de este servidor DNS stub que
actúa como intermediario. Hace el papel del resolver.
Para ver a dónde este servidor DNS Stub envía las consultas podemos teclear:
resolvectl status
Link 2 (enp0s3)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.31.2
DNS Servers: 192.168.31.2
DNS Domain: ~.
Donde vemos que el servidor DNS para la interfaz enp0s3 es el que configuramos en netplan, el
192.168.31.2.
En Internet podemos encontrar guías o tutoriales anticuados con los que utilizar Bind9:
Algunos pueden indicar que se debe editar el archivo /etc/resolv.conf a mano y establecer ahí
los servidores DNS.
Esto ya no se hace desde Ubuntu 12.04.
Otros pueden indicar que se debe editar el archivo /etc/default/bind9 y poner
RESOLVCONF=yes para utilizar el propio Bind9 como resolutor.
Esto no funciona en sistemas modernos que utilicen systemd.
Además, el archivo ya no se llama /etc/default/bind9, se llama /etc/default/named, que es
el nombre del daemon que usa Bind9.
Configuración de Bind9
Ahora que ya sabemos que nuestro servidor funciona correctamente, tendremos que configurarlo de
acuejrdo al uso que le vayamos a dar.
Archivos de configuración
Los archivos de configuración de Bind9 se encuentra en la carpeta /etc/bind/. Podemos listarlos con
el comando:
ls -l /etc/bind
Algunos de ellos comienzan con named porque es el nombre del daemon que corre Bind9.
bind.keys
Cuando el daemon named comienza, necesita cierta información como por ejemplo cómo llegar
a los servidores raíz, antes de que pueda responder a consultas recursivas.
Si named está configurado para realizar la validación de DNSSEC, también debe tener trust
anchors (anclajes de confianza) iniciales.
Esta información se puede configurar a través del archivo named.conf, pero ISC ha intentado
simplificar los archivos de configuración compilando esta información a parte.
No es un archivo que se tenga que editar a mano.
Más información: bind.keys
#
# This file is NOT expected to be user-configured.
#
# Servers being set up for the first time can use the contents of this file
# as initializing keys; thereafter, the keys in the managed key database
# will be trusted and maintained automatically.
#
# These keys are current as of Mar 2019. If any key fails to initialize
# correctly, it may have expired. In that event you should replace this
# file with a current version. The latest version of bind.keys can always
# be obtained from ISC at https://www.isc.org/bind-keys.
#
# See https://data.iana.org/root-anchors/root-anchors.xml for current trust
# anchor information for the root zone.
trust-anchors {
# This key (20326) was published in the root zone in 2017.
. initial-key 257 3 8 "AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3
+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv
ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF
0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e
oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd
RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN
R1AkUTV74bU=";
};
db.0 y db.255
Son db.0 y db.255 son los archivos de resolución inversa para la zona de broadcast.
db.0
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
db.255
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
db.local y db.127
db.local es el archivo de resolución y db.127 es el archivo de resolución inversa para la
interface loopback local.
db.local
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
db.127
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1.0.0 IN PTR localhost.
db.empty
Es el archivo de resolución inversa para la zona vacía especificada en la rfc1918 (IPs Privadas).
Es un archivo que no se debe de editar a mano.
Bind proporciona una serie de zonas vacías que se cargan y configuran automáticamente cuando se
inicia named. El propósito de estas zonas es evitar que los servidores recursivos envíen
consultas sin sentido a los servidores de Internet que no pueden manejaras (lo que crea retrasos y
respuestas SERVFAIL a los clientes que las consultan). Las zonas vacías garantizan que, en su
lugar, se devueltan respuestas NXDOMAIN inmediatas y autorizadas.
El mensaje NXDOMAIN es aquél que recibe un resolver (cliente DNS) cuando una consulta no
puede ser resuelta a una dirección IP.
Este archivo lo utilizaremos como plantilla para crear nuestros propios archivos de zona.
named.conf
El archivo /etc/bind/named.conf es el archivo de configuración principal de Bind9, pero no lo
editaremos a mano.
Fijándonos en su contenido podemos ver que divide la configuración en otros archivos que sí
editaremos.
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
En este enlace se puede consultar la sintaxis y las declaraciones que se pueden llevar a cabo en el
fichero.
Hay que tener mucho ojo y evitar los errores sintácticos, ya que pueden impedir que el servicio
named arranque.
De todas formas, con el comando named-checkconf podemos comprobar si hemos cometido errores
al editar el fichero. El comando verificará si el archivo de configuración es correcto.
named-checkconf /etc/named.conf
named.conf.options
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
recursion { localhost; };
};
named.conf.local
En este archivo se lleva a cabo la configuración local, y aquí se pueden añadir las zonas vacías de
la RFC 1918 si no están siendo usadas por la organización.
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
named.conf.default-zones
En este archivo se configuran las zonas por defecto: servidores raíz, zonas de reenvío o zonas de
broadcast.
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/usr/share/dns/root.hints";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
rndc.key
Es un archivo relacionado con el Remote Name Daemon Control. Nosotros no lo utilizaremos.
zones.rfc1918
Es un archivo con las direcciones de las redes privadas de la RFC 1918 para prevenir a los servidores
recursivos mandar consultas que no van a ser resueltas, como ya se comentó antes.
zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
Editando la configuración
Editando named.conf.options
Vamos a editar el archivo named.conf.options y configurar algunas opciones:
listen-on
Con la directiva listen-on podriamos especificar las redes donde el servidor va a escuchar
peticiones y el puerto.
listen-on { any; };
listen-on {
10.10.10.0/24;
10.1.0.0/16;
...
};
Nosotros vamos a poner:
listen-on { any; };
listen-on-v6 { any; };
allow-query
Bind9 permite peticiones locales por defecto. Podríamos especificar qué redes o equipos pueden
utilizar el servidor para realizar consultas.
allow-query { 192.168.31.54; };
allow-query { any; };
forwarders
La directiva forwarders contiene la dirección de los servidores a los que Bind9 redirigirá la petición
en el caso de que no pueda darnos una respuesta.
forwarders {
8.8.8.8;
8.8.4.4;
};
En este caso estaríamos configurando como forwarders los servidores DNS de Google.
Nuestra configuración
Nosotros dejaremos el archivo de configuración con el siguiente contenido:
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
8.8.4.4;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
allow-query { any; };
listen-on { any; };
listen-on-v6 { any; };
};
named-checkconf
Testeando el servicio
Para ver si el servidor está funcionando correctamente podremos utilizar el siguiente comando desde
otra máquina. Lo haré desde mi máquina host con el comando nslookup.
Non-authoritative answer:
Name: ubuntu.com
Addresses: 2620:2d:4000:1::27
2620:2d:4000:1::26
2620:2d:4000:1::28
185.125.190.21
185.125.190.20
185.125.190.29
Ahora que ya tenemos configurado un servidor Bind9. Vamos a apagar la máquina y utilizarla como
"base" para los siguientes pasos.
Configuración de equipos
Vamos ahora a configurar dos servidores, uno primario y otro secundario en la red 192.168.31.0/24.
El router también actúa como servidor web ya que ofrece una interfaz web de acceso a su
configuración. Así que me valdré de eso para poder darle un nombre más adelante como si de un
servidor web se tratara.
Clonación de máquinas
Clonamos nuestra máquina Bind9 "base" dos veces, una para el servidor primario y otra para el
servidor secundario.
Verificamos que su modo de red esté en Adaptador Puente (Bridged Adapter).
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "asir-sri.com" {
type master;
file "/etc/bind/db.asir-sri.com";
allow-transfer { 192.168.31.3; };
also-notify { 192.168.31.3; };
};
Realizamos una copia de la plantilla de zona local para nuestra zona asir-sri.com:
$TTL 604800
@ IN SOA ns.asir-sri.com. root.asir-sri.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.asir-sri.com.
@ IN NS ns2.asir-sri.com.
@ IN A 192.168.31.1
ns IN A 192.168.31.2
ns2 IN A 192.168.31.3
router IN A 192.168.31.1
www IN CNAME router
Una vez editado el archivo, comprobamos que no hayamos cometido ningún error:
Y reiniciamos el servicio:
Y desde nuestro ordenador host podemos probar que funciona realizando las siguientes peticiones:
nslookup asir-sri.com 192.168.31.2
nslookup ns.asir-sri.com 192.168.31.2
nslookup ns2.asir-sri.com 192.168.31.2
nslookup www.asir-sri.com 192.168.31.2
nslookup router.asir-sri.com 192.168.31.2
El servidor responderá y la respuesta será autoritativa, ya que en nslookup no nos añadirá el texto
de "Non-authoritative answer".
Clonamos la máquina virtual base con el servidor Bind9 antes creada y en netplan le configuramos
la IP 192.168.31.3, ya que la máquina virtual tenía configurada la IP estática 192.168.31.2 y
colisionará con la de nuestro servidor primario.
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: false
addresses:
- 192.168.31.3/24
routes:
- to: default
via: 192.168.31.1
nameservers:
addresses: [192.168.31.3]
ip a
zone "asir-sri.com" {
type slave;
file "/etc/bind/db.asir-sri.com";
masters { 192.168.31.2; };
};
Podemos ver el estado del servicio en el servidor secundario y ver que se ha transferido la zona:
Veremos unas líneas en las que se nos confirma que se ha transferido al zona parecidas a:
Podemos ahora ir a nuestro ordenador host y realizar peticiones para ver que el servidor secundario
es capaz de responder a las consultas sobre la zona asir-sri.com:
Las respuestas del servidor secundario también son autoritativas para la zona.
Ya podemos apagar el servidor secundario puesto que en esta práctica no lo utilizaremos más.
zone "31.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.31.168.192.in-addr.arpa";
};
; Zona inversa
;
$TTL 604800
@ IN SOA ns.asir-sri.com. root.asir-sri.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns.asir-sri.com.
@ IN NS ns2.asir-sri.com.
Reiniciamos el servicio: