GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configurar el solucionador de DNS local en Ubuntu 20.04 con BIND9

Este tutorial le mostrará cómo configurar un solucionador de DNS local en Ubuntu 20.04, con el software de DNS BIND9 ampliamente utilizado. Un solucionador de DNS es conocido por muchos nombres, algunos de los cuales se enumeran a continuación. Todos se refieren a lo mismo.

  • resolución completa (en contraste con la resolución de stub)
  • Recurso de DNS
  • servidor DNS recursivo
  • resolver recursivo

Además, tenga en cuenta que un servidor DNS también puede denominarse servidor de nombres. Ejemplos de resolución de DNS son 8.8.8.8 (servidor DNS público de Google) y 1.1.1.1 (servidor DNS público de Cloudflare). El sistema operativo de su computadora también tiene un resolutor, aunque se llama stub resolutor debido a su capacidad limitada. Un resolutor de stub es un pequeño cliente DNS en la computadora del usuario final que recibe solicitudes de DNS de aplicaciones como Firefox y las reenvía a un resolutor recursivo. Casi todos los resolutores pueden almacenar en caché la respuesta DNS para mejorar el rendimiento, por lo que también se denominan servidores DNS de almacenamiento en caché.

¿Por qué ejecutar su propio solucionador de DNS local?

Normalmente, su computadora o enrutador usa la resolución de DNS de su ISP para consultar los nombres de DNS, entonces, ¿por qué ejecutar una resolución de DNS local?

  • Puede acelerar las búsquedas de DNS, porque la resolución de DNS local solo escucha sus solicitudes de DNS y no responde las solicitudes de DNS de otras personas, por lo que tiene muchas más posibilidades de obtener respuestas de DNS directamente desde la memoria caché en la resolución. La latencia de la red entre su computadora y la resolución de DNS se elimina (casi cero), por lo que las consultas de DNS se pueden enviar a los servidores DNS raíz más rápidamente.
  • Si ejecuta un servidor de correo y utiliza listas negras de DNS (DNSBL) para bloquear el spam, debe ejecutar su propio sistema de resolución de DNS, ya que algunas listas negras de DNS, como URIBL, rechazan las solicitudes de los dispositivos de resolución de DNS públicos.
  • Si ejecuta su propio servidor VPN en un VPS (servidor privado virtual), también es una buena práctica instalar un sistema de resolución de DNS en el mismo VPS.
  • También puede ejecutar su propia resolución de DNS si no desea que su historial de navegación de Internet se almacene en un servidor de terceros.

Si posee un sitio web y desea que su propio servidor DNS maneje la resolución de nombres para su nombre de dominio en lugar de utilizar el servidor DNS de su registrador de dominios, deberá configurar un servidor DNS autorizado, que es diferente de un solucionador de DNS. BIND puede actuar como un servidor DNS autorizado y un solucionador de DNS al mismo tiempo, pero es una buena práctica separar las dos funciones en diferentes casillas .

Este tutorial muestra cómo configurar un solucionador de DNS local y, dado que se usará en el host local/red local, no se necesita cifrado (DNS sobre TLS o DNS sobre HTTPS). La configuración de un resolutor DoT o DoH se tratará en un artículo futuro.

Sugerencia :Local no significa la computadora de su casa. Más bien, significa que la resolución de DNS se ejecuta en el mismo cuadro que el cliente de DNS. Puede instalar el sistema de resolución de DNS BIND en la computadora de su hogar. Es local para la computadora de su hogar. Puede instalar el solucionador de DNS BIND en un servidor en la nube, y es local para el servidor en la nube.

Configurar el solucionador de DNS local en Ubuntu 20.04 con BIND9

BIND (Berkeley Internet Name Domain) es un software de servidor DNS de código abierto ampliamente utilizado en Unix/Linux debido a su estabilidad y alta calidad. Originalmente fue desarrollado por UC Berkeley, y más tarde, en 1994, su desarrollo se trasladó a Internet Systems Consortium, Inc (ISC).

Ejecute el siguiente comando para instalar BIND 9 en Ubuntu 20.04, desde el repositorio predeterminado. BIND 9 es la versión actual y BIND 10 es un proyecto muerto.

sudo apt update
sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host

Comprobar versión.

named -v

Salida de muestra:

BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>

Para verificar el número de versión y las opciones de compilación, ejecute

named -V

De forma predeterminada, BIND se inicia automáticamente después de la instalación. Comprueba su estado con:

systemctl status named

Si no se está ejecutando, inícielo con:

sudo systemctl start named

Y habilite el inicio automático en el momento del arranque:

sudo systemctl enable named

El servidor BIND se ejecutará como bind usuario, que se crea durante la instalación y escucha en el puerto TCP y UDP 53, como se puede ver ejecutando el siguiente comando:

sudo netstat -lnptu | grep named

Por lo general, las consultas de DNS se envían al puerto UDP 53. El puerto TCP 53 es para tamaños de respuesta superiores a 512 bytes.

El demonio BIND se llama named . (Un daemon es una pieza de software que se ejecuta en segundo plano). El named binario es instalado por el bind9 paquete y hay otro binario importante:rndc , el controlador del demonio de nombre remoto, que es instalado por bind9utils paquete. El rndc binary se usa para recargar/detener y controlar otros aspectos del demonio BIND. La comunicación se realiza a través del puerto TCP 953.

Por ejemplo, podemos comprobar el estado del servidor de nombres BIND.

sudo rndc status

Configuraciones para un solucionador de DNS local

/etc/bind/ es el directorio que contiene configuraciones para BIND.

  • nombre.conf :el archivo de configuración principal que incluye configuraciones de otros tres archivos.
  • db.127 :archivo de zona de mapeo inverso IPv4 localhost.
  • db.local :archivo de zona de asignación de IPv4 e IPv6 de reenvío localhost.
  • db.vacío :un archivo de zona vacío

El paquete bind9 en Ubuntu 20.04 no se envía con un db.root ahora usa el archivo de sugerencias raíz en /usr/share/dns/root.hints . Las pistas de raíz Los resolutores de DNS utilizan el archivo para consultar los servidores DNS raíz. Hay 13 grupos de servidores DNS raíz, desde a.root-servers.net a m.root-servers.net .

Fuera de la caja, el servidor BIND9 en Ubuntu proporciona un servicio recursivo solo para host local y clientes de red local. Las consultas externas serán denegadas. Por lo tanto, no tiene que editar los archivos de configuración. Para que se familiarice con las configuraciones de BIND 9, le mostraré cómo habilitar el servicio de recursión de todos modos.

El archivo de configuración principal de BIND /etc/bind/named.conf obtiene la configuración de otros 3 archivos.

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

Para habilitar el servicio de recursividad, edite el primer archivo.

sudo nano /etc/bind/named.conf.options

En las options cláusula, agregue las siguientes líneas. Reemplace las direcciones IP en allow-recursion declaración con sus propias direcciones de red local.

 // hide version number from clients for security reasons.
 version "not currently available";

 // optional - BIND default behavior is recursion
 recursion yes;

 // provide recursion service to trusted clients only
 allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; };

 // enable the query log
 querylog yes;

Guarde y cierre el archivo. Luego pruebe la sintaxis del archivo de configuración.

sudo named-checkconf

Si la prueba es exitosa (indicado por una salida silenciosa), reinicie BIND9.

sudo systemctl restart named

Si tiene un firewall UFW ejecutándose en el servidor BIND, entonces necesita abrir el puerto 53 para permitir que los clientes LAN envíen consultas DNS.

sudo ufw allow in from 192.168.0.0/24 to any port 53

Esto abrirá el puerto TCP y UDP 53 a la red privada 192.168.0.0/24. Luego, desde otra computadora en la misma LAN, podemos ejecutar el siguiente comando para consultar el registro A de google.com. Reemplace 192.168.0.102 con la dirección IP de su sistema de resolución BIND.

dig A google.com @192.168.0.102

Ahora en el sistema de resolución BIND, verifique el registro de consultas con el siguiente comando.

sudo journalctl -eu named

Esto mostrará el último mensaje de registro de la unidad de servicio bind9. Encontré la siguiente línea en el registro, que indica que se recibió una consulta de DNS para el registro A de google.com desde el puerto 57806 de 192.168.0.103.

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)

Configuración del solucionador de DNS predeterminado en el servidor Ubuntu 20.04

Systemd-resolved proporciona la resolución de código auxiliar en Ubuntu 20.04. Como se mencionó al comienzo de este artículo, un resolutor de código auxiliar es un pequeño cliente DNS en la computadora del usuario final que recibe solicitudes de DNS de aplicaciones como Firefox y las reenvía a un resolutor recursivo.

El solucionador recursivo predeterminado se puede ver con este comando.

systemd-resolve --status

Sugerencia:si el comando anterior no se cierra de inmediato, puede hacerlo presionando la tecla Q.

Como puede ver, BIND no es el predeterminado. Si ejecuta el siguiente comando en el servidor BIND,

dig A facebook.com

Esta consulta de DNS no se puede encontrar en el registro BIND. En su lugar, debe decirle explícitamente a dig que use BIND.

dig A facebook.com @127.0.0.1

Para configurar BIND como el solucionador predeterminado, abra el archivo de configuración resuelto por systemd.

sudo nano /etc/systemd/resolved.conf

En el [Resolve] sección, agregue la siguiente línea. Esto establecerá un servidor DNS global para su servidor.

DNS=127.0.0.1

Guarde y cierre el archivo. Luego reinicie el servicio resuelto por systemd.

sudo systemctl restart systemd-resolved

Ahora ejecute el siguiente comando para comprobar el sistema de resolución de DNS predeterminado.

systemd-resolve --status

Ahora realice una consulta de DNS sin especificar 127.0.0.1 .

dig A facebook.com

Verá la consulta de DNS en el registro BIND, lo que significa que BIND es ahora el solucionador recursivo predeterminado. Si no ve ninguna consulta en el registro de BIND, es posible que deba configurar el servidor DNS por enlace.

Configurar servidor DNS por enlace en Ubuntu 20.04

También puede configurar un servidor DNS por enlace, que anulará el servidor DNS global. Hay dos formas de configurar servidores DNS por enlace:

  • a través de systemd-resolved
  • a través de netplan

resuelto por systemd

Enumere los archivos en /etc/systemd/network/ directorio.

ls /etc/systemd/network/

Salida de muestra:

05-eth0.network  99-default.link

Como puede ver, tengo dos archivos de configuración de enlaces. La 05-eth0.network El archivo es para mi interfaz de red principal, así que edito este archivo.

sudo nano /etc/systemd/network/05-eth0.network

Su nombre de archivo puede ser diferente. Si no hay archivos en este directorio, entonces su configuración de DNS por enlace no está controlada por systemd-resolved .

Comente la entrada predeterminada de DNS y Dominio, y agregue su propia entrada de DNS.

DNS=127.0.0.1

Guarde y cierre el archivo. Luego reinicie systemd-resolved y systemd-networkd servicio.

sudo systemctl restart systemd-resolved systemd-networkd

plan de red

Algunos servidores de Ubuntu pueden estar usando netplan para configurar redes por enlace. En este caso, debe configurar el servidor DNS en .yaml archivo bajo /etc/netplan/ directorio. Lista de archivos en este directorio.

ls /etc/netplan/

Salida de muestra:

01-netcfg.yaml

Así que edito este archivo.

sudo nano /etc/netplan/01-netcfg.yaml

Establezca la dirección del servidor DNS en los nameservers sección.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1

Puede especificar varios solucionadores de DNS como se muestra a continuación, lo que puede reducir la posibilidad de fallas en el DNS.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1
                - 8.8.8.8
                - 1.1.1.1

Guarde y cierre el archivo. Luego aplique el cambio.

sudo netplan apply

Nota: Si ve el siguiente mensaje de error, netplan no puede procesar el archivo de configuración.

Invalid YAML at /etc/netplan/01-netcfg.yaml  inconsistent indentation

Debe corregir la sangría inconsistente y ejecutar sudo netplan apply comando de nuevo.

Resolución de problemas

Compruebe el contenido de /etc/resolv.conf .

cat /etc/resolv.conf

Como puede ver, 127.0.0.1 (BIND) es la resolución de DNS predeterminada. Si ve un valor diferente, eso significa que BIND aún no es su resolución de DNS predeterminada. Puede usar la utilidad resolveconf para establecer BIND como resolución predeterminada.

Instale el resolvconf paquete

sudo apt install resolvconf

Luego inicie el named-resolvconf servicio.

sudo systemctl start named-resolvconf.service

Habilite el inicio automático en el momento del arranque.

sudo systemctl enable named-resolvconf.service

Ahora revisa el /etc/resolv.conf archivo de nuevo. BIND debería ser el solucionador de DNS predeterminado en su servidor Ubuntu ahora.

cat /etc/resolv.conf

Tenga en cuenta que algunos proveedores de alojamiento como Linode pueden usar un asistente de red para generar automáticamente el /etc/resolv.conf expediente. Para cambiar la resolución de DNS predeterminada, debe deshabilitar ese asistente de red en el panel de control de alojamiento.

Si este método sigue sin funcionar, quizás se deba a que /etc/resolv.conf archivo en su servidor Ubuntu no es un enlace simbólico a /run/resolvconf/resolv.conf . Debe eliminar el /etc/resolv.conf archivo y cree un enlace simbólico.

sudo rm /etc/resolv.conf

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

También puede crear manualmente este archivo y hacerlo de solo lectura para evitar que otras aplicaciones lo sobrescriban en el mismo servidor.

sudo rm /etc/resolv.conf

echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

sudo chmod 444 /etc/resolv.conf

systemd-resolved no se está ejecutando

Si ve el siguiente error después de ejecutar systemd-resolve --status mando,

Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

Podría ser systemd-resolved no está corriendo Comience con:

sudo systemctl status systemd-resolved

Habilitar inicio automático.

sudo systemctl enable systemd-resolved

Configuración del solucionador de DNS predeterminado en los equipos cliente

En el escritorio de Ubuntu, puede seguir las instrucciones anteriores para configurar el solucionador de DNS predeterminado, pero recuerde reemplazar 127.0.0.1 con la dirección IP del servidor BIND. Los pasos para configurar el sistema de resolución de DNS predeterminado en MacOS y Windows se pueden encontrar en Internet.

Cómo deshabilitar IPv6 en BIND

Si no utiliza IPv6 en su red, es una buena idea desactivar IPv6 en BIND; de lo contrario, habrá muchos errores sobre IPv6 en el registro de BIND, como se muestra a continuación.

network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

Para deshabilitar IPv6 en BIND en Ubuntu, simplemente abra el /etc/default/named archivo

sudo nano /etc/default/named

Añadir -4 a las OPCIONES.

OPTIONS="-u bind -4"

Guarde y cierre el archivo. Luego reinicie BIND y listo.

sudo systemctl restart named

FALLO DE SERVICIO DE ENLACE

Si su sistema de resolución de BIND no puede responder consultas de DNS (SERVFAIL) y ve la siguiente línea en el registro de BIND.

dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

Probablemente se deba a que su servidor no tiene una conectividad IPv6 que funcione. Esto le sucedió a uno de mis servidores. Pensé que la conectividad IPv6 funcionaba como de costumbre, pero de repente se interrumpió por razones que desconocía. Una vez que deshabilité IPv6 en BIND, la resolución DNS volvió a funcionar.

Reinicio automático designado

Si por algún motivo se cancela su proceso con nombre, debe ejecutar el siguiente comando para reiniciarlo.

sudo systemctl restart named

En lugar de escribir manualmente este comando, podemos hacer que Named se reinicie automáticamente editando named.service unidad de servicio systemd. Para anular la configuración predeterminada del servicio systemd, creamos un directorio separado.

sudo mkdir -p /etc/systemd/system/named.service.d/

Luego cree un archivo en este directorio.

sudo nano /etc/systemd/system/named.service.d/restart.conf

Agregue las siguientes líneas en el archivo, lo que hará que Named se reinicie automáticamente 5 segundos después de que se detecte una falla.

[Service]
Restart=always
RestartSec=5s

Guarde y cierre el archivo. Luego recarga systemd.

sudo systemctl daemon-reload

Para verificar si esto funcionaría, elimine Named con:

sudo pkill named

Luego verifique el estado Nombrado. Verá que Named se reinicia automáticamente.

systemctl status named

BIND max-cache-size

BIND puede almacenar en caché los resultados de DNS en el servidor para acelerar la búsqueda de DNS para los clientes. BIND asume que está ejecutando un sistema de resolución de DNS dedicado, es decir, ningún otro servicio web se está ejecutando en el mismo host, por lo que el tamaño de caché predeterminado (definido por max-cache-size ) se establece en el 90 % de la RAM total para lograr el mejor rendimiento. Puede ver una línea como la siguiente en el registro BIND (sudo journalctl -eu named ) cuando se inicia BIND.

none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)

Tenga en cuenta que BIND no usará el 90% de su RAM inmediatamente. Si solo hay unas pocas solicitudes de DNS, BIND usa solo una pequeña cantidad de RAM, porque no hay muchos resultados de DNS para almacenar en caché. Si hay muchas solicitudes de DNS, usará mucha RAM para almacenar la caché de DNS.

Si su RAM es limitada, es posible que no quiera que BIND use el 90% de su RAM para el caché. Edite el archivo de configuración de BIND /etc/bind/named.conf.options .

sudo nano /etc/bind/named.conf.options

Agregue la siguiente directiva en las options cláusula. Cambia el 50% a tu valor preferido.

max-cache-size 50%;

Reinicie BIND para que el cambio surta efecto.

sudo systemctl restart named

Nota :Cuando reinicie BIND, todo su caché se vaciará.

No se pudo acceder a ningún servidor

Si ve el siguiente error al utilizar el comando de excavación en los equipos cliente

;; connection timed out; no servers could be reached

Puede ser que

  • Su regla de firewall es incorrecta. Verifique el registro de su cortafuegos.
  • La resolución BIND no se está ejecutando.
  • BIND no está escuchando en una interfaz de red.
  • ¿Puedes hacer ping desde el cliente DNS al sistema de resolución de DNS?

Conclusión

Espero que este tutorial le haya ayudado a configurar un solucionador de DNS local en Ubuntu 20.04 con BIND9. Como siempre, si encuentra útil esta publicación, suscríbase a nuestro boletín gratuito para obtener más consejos y trucos. Cuídate 🙂


Ubuntu
  1. Cómo configurar un cortafuegos con UFW en Ubuntu 18.04

  2. Cómo configurar el solucionador de DNS local usando Dnsmasq en Ubuntu 20.04

  3. Escanee la red local con arp-scan en ubuntu

  4. Cómo configurar un cortafuegos con UFW en Ubuntu 16.04

  5. Cómo configurar el solucionador de DNS no vinculado en Ubuntu 20.04

Configure el servidor DNS autorizado BIND en Ubuntu 18.04, 16.04

Configurar DNS sobre HTTPS (DoH) Resolver en Ubuntu con DNSdist

Cómo configurar fácilmente un DNS sobre TLS Resolver con Nginx en Ubuntu

Configurar un solucionador de DNS local en Ubuntu 18.04, 16.04 con BIND9

Configurar el solucionador de DNS independiente en el servidor Ubuntu 20.04

Configurar Ubuntu Server con EHCP (LÁMPARA, DNS, FTP, Correo)