BIND (Español)
BIND (Berkeley Internet Name Daemon) es la implementación de referencia del protocolo DNS (Domain Name System).
Instalación
Los siguientes pasos indican cómo instalar una configuración básica de BIND como servidor local DNS de solo caché.
Instale el paquete bind desde los repositorios oficiales.
Opcionalmente, edite /etc/named.conf
, y añada la siguiente línea en la sección de opciones (options), para permitir únicamente conexiones de localhost:
listen-on { 127.0.0.1; };
Edite resolv.conf para usar el servidor local DNS, 127.0.0.1.
Inicie named.service
con systemd.
Redireccionamiento
Cuando BIND actúa como un servidor de redireccionamiento DNS, almacena por una parte memoria caché de las búsquedas DNS ya realizadas, y por otra redirigirá las peticiones DNS no guardadas en caché a otros servidores DNS que se hayan definido, como podría ser el servidor DNS de nuestro ISP u otros servicios DNS globales como OpenNIC.
Para configurar el redireccionamiento DNS, basta con añadir las siguientes líneas a /etc/named.conf
en la secciones de opciones globales (options) o en una sección de zona específica, y cambiar la dirección IP de acuerdo con la del servidor DNS que deseamos emplear.
options { listen-on { 192.168.66.1; }; forwarders { 8.8.8.8; 8.8.4.4; }; };
Tras realizar este cambio, es necesario reiniciar named.service
.
Plantilla de configuración para ejecutar un dominio
Este es un sencillo tutorial para configurar una servidor DNS en una red doméstica con bind. Usaremos "domain.tld" como nuestro dominio.
Para ver ejemplo más elaborados, consúltese Two-in-one DNS server with BIND9.
1. Crear un archivo de zona
# nano /var/named/domain.tld.zone
$TTL 7200 ; domain.tld @ IN SOA ns01.domain.tld. postmaster.domain.tld. ( 2007011601 ; Serial 28800 ; Refresh 1800 ; Retry 604800 ; Expire - 1 week 86400 ) ; Minimum IN NS ns01 IN NS ns02 ns01 IN A 0.0.0.0 ns02 IN A 0.0.0.0 localhost IN A 127.0.0.1 @ IN MX 10 mail imap IN CNAME mail smtp IN CNAME mail @ IN A 0.0.0.0 www IN A 0.0.0.0 mail IN A 0.0.0.0 @ IN TXT "v=spf1 mx"
$TTL define el tiempo de vida en segundos por defecto para todos los registros de todos los tipos. En este ejemplo es de 2 horas.
El número de serie (Serial) debe incrementarse manualmente antes de reiniciar named cada vez que se cambie un registro en la zona. De lo contrario los servidores esclavos no retransmitirán la zona, ya que para ello requieren un número serie mayor que el de la última versión de la zona que transfirieron.
2. Configurar un servidor maestro
Añade tu zona a /etc/named.conf
:
zone "domain.tld" IN { type master; file "domain.tld.zone"; allow-update { none; }; notify no; };
Inicie named.service
.
Alternativamente, recargue los archivos de configuración. Esta última opción mantendrá el servidor disponible mientras se ejecuta el cambio.
3. Configurarlo como el servidor DNS por defecto
Si estamos ejecutando nuestro propio servidor DNS, podríamos querer usarlo no solo para redirigir peticiones DNS, sino para realizar todas las búsquedas DNS. Esto requiere la capacidad de hacer búsquedas recursivas. Para prevenir ataques de amplificación de DNS (DNS Amplification Attacks), la búsqueda recursiva está desactivada por defecto en la mayor parte de las configuraciones. El fichero Arch /etc/named.conf
por defecto solo permite habilitar la recursión en la interfaz de circuito cerrado (loopback) del sistema.
allow-recursion { 127.0.0.1; };
Por lo tanto, para permitir búsquedas DNS para nuestro equipo, el fichero resolv.conf debe incluir 127.0.0.1 como servidor de nombres. Consulte Conservar las configuraciones de DNS para prevenir que este fichero sea reescrito.
Para proveer un servicio de nombres a nuestra red local, por ejemplo 192.168.0, debemos añadir el rango apropiado de direcciones IP a /etc/named.conf
:
allow-recursion { 192.168.0.0/24; 127.0.0.1; };
Configurar BIND para servir zonas firmadas con DNSSEC
-
https://www.dnssec.net/practical-documents
- https://www.cymru.com/Documents/secure-bind-template.html (plantilla de configuración)
- https://www.bind9.net/manuals[enlace roto 2021-11-07]
- https://www.bind9.net/BIND-FAQ[enlace roto 2021-11-07]
- http://blog.techscrawl.com/2009/01/13/enabling-dnssec-on-bind/
- O use un mecanismo externo tal como OpenDNSSEC (cambio de clave completamente automático)
Escuchar automáticamente nuevas interfaces
Por defecto, bind hace un escaneo en búsqueda de nuevas interfaces cada hora, y deja de escuchar aquellas que dejan de existir. Este comportamiento se puede modificar añadiendo el parámetro:
interface-interval <rescan-timeout-in-minutes>;
en la sección de opciones de named.conf
, con un valor máximo de 28 días (40320 min). También se puede desactivar esta caraterística con el valor 0.
A continuación, reniciamos el servicio.
Ejecutar BIND en un entorno chroot
Ejecutar en un entorno chroot mejora la seguridad del servidor DNS.
Crear un sistema de archivos para la jaula chroot
En primer lugar, debemos crear un lugar donde contener la jaula chroot, como el directorio /srv/named
por ejemplo, y disponer todos los archivos necesarios para el funcionamiento de BIND en el mismo.
mkdir -p /srv/named/{dev,etc,usr/lib/engines,var/{run,log,named}} # Copy over required system files cp -av /etc/{localtime,named.conf} /srv/named/etc/ cp -av /usr/lib/engines/* /srv/named/usr/lib/engines/ cp -av /var/named/* /srv/named/var/named/. # Set up required dev nodes mknod /srv/named/dev/null c 1 3 mknod /srv/named/dev/random c 1 8 # Set Ownership of the files chown -R named:named /srv/named
Estas operaciones deberían crear el sistema de archivos necesario para la jaula chroot.
Archivo de servicio
A continuación, debemos crear un nuevo archivo de servicio que fuerce bind a ejecutarse dentro de chroot.
cp -av /usr/lib/systemd/system/named.service /etc/systemd/system/named-chroot.service
editando cómo el servicio llama a bind.
/etc/systemd/system/named-chroot.service
ExecStart=/usr/bin/named -4 -f -u named -t "/srv/named"
Ahora, reload systemd systemctl daemon-reload
. Entonces inicie named-chroot.service