GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configure el servidor DNS autorizado BIND en Ubuntu 18.04, 16.04

Este tutorial le mostrará cómo configurar y ejecutar su propio servidor de nombres autorizado en Ubuntu 18.04/16.04 con el software BIND 9 ampliamente utilizado.

Nota :Este tutorial muestra el método de línea de comandos. Si desea editar registros DNS desde una GUI web, le recomiendo configurar servidores DNS autorizados con Webmin, que es un panel de control de servidor gratuito y de código abierto.

¿Qué es un servidor DNS autorizado?

Si posee un nombre de dominio y desea que su propio servidor DNS maneje la resolución de nombres para su nombre de dominio en lugar de usar el servidor DNS de su registrador de dominio, entonces deberá configurar un servidor DNS autorizado.

Los propietarios de nombres de dominio utilizan un servidor DNS autorizado para almacenar registros DNS. Proporciona respuestas autorizadas a los resolutores de DNS (como 8.8.8.8 o 1.1.1.1), que consultan los registros de DNS en nombre de los usuarios finales en PC, teléfonos inteligentes o tabletas.

Acerca de BIND

BIND (Berkeley Internet Name Domain) es un software de DNS de código abierto, flexible y con todas las funciones, 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).

BIND puede actuar como un servidor DNS autoritativo para una zona y un solucionador de DNS al mismo tiempo. Un sistema de resolución de DNS también puede denominarse servidor de nombres recursivo porque realiza búsquedas recursivas para clientes locales. Sin embargo, tomar dos roles al mismo tiempo no es ventajoso. Es una buena práctica separar los dos roles en dos máquinas diferentes.

En un artículo anterior, expliqué los pasos para configurar un solucionador de DNS local en Ubuntu 18.04/16.04. Este tutorial le mostrará cómo configurar BIND9 en Ubuntu 18.04/16.04 como un servidor DNS autorizado únicamente con recursividad deshabilitada.

Requisitos

Para seguir este tutorial, ya debería haber comprado un nombre de dominio. Registré mi nombre de dominio en NameCheap porque el precio es bajo y ofrecen protección de privacidad whois gratis de por vida.

También necesita dos servidores. Un servidor es para el servidor DNS maestro y el otro es para el servidor DNS esclavo. Idealmente, los dos servidores deberían estar en diferentes ubicaciones físicas. Si un servidor DNS está fuera de línea, el otro servidor DNS aún puede responder a las consultas de DNS para su nombre de dominio.

Cada servidor necesita solo 512 MB de RAM y estos son los proveedores de alojamiento que recomiendo. Los he usado todos.

  • Vultr:A partir de $2.5/mes. Se requiere tarjeta de crédito. Puede crear una cuenta en Vultr a través de mi enlace de referencia para obtener $50 de crédito gratis.
  • DigitalOcean:A partir de $5/mes. No se requiere tarjeta de crédito. Puedes usar Paypal. Puede crear una cuenta en DigitalOcean a través de mi enlace de referencia para obtener $50 de crédito gratis.

Una vez que haya comprado dos servidores, instale Ubuntu en ellos y siga las instrucciones a continuación.

Configure el servidor DNS autorizado en Ubuntu 18.04/16.04 con BIND9

Debe ejecutar los comandos de esta sección en ambos servidores.

Inicie sesión en los dos servidores a través de SSH y ejecute los siguientes comandos para instalar BIND 9 en Ubuntu 18.04/16.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-doc

Verifique el número de versión.

named -v

Salida de muestra:

BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>

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 bind9

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

sudo systemctl start bind9

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

sudo systemctl enable bind9

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

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

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

Fuera de la caja, el servidor BIND9 en Ubuntu proporciona un servicio recursivo para clientes locales y de red local. Dado que estamos configurando un servidor DNS autorizado, debemos deshabilitar la recursividad. Edite /etc/bind/named.conf.options archivo.

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

Agrega las siguientes líneas en las options {...}; cláusula.

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

 // disable recursion on authoritative DNS server.
 recursion no;

 // enable the query log
 querylog yes;

 // disallow zone transfer
 allow-transfer { none; };

Técnicamente hablando, solo necesita agregar recursion no; para deshabilitar la recursividad, pero es una buena práctica agregar las otras 3 directivas. Guarde y cierre el archivo. Luego reinicie BIND.

sudo systemctl restart bind9

Configuración del servidor DNS maestro

Elija uno de los dos servidores como servidor DNS maestro. Lo llamaremos ns1.example.com .

El servidor DNS maestro contiene la copia maestra del archivo de zona. Los cambios de los registros DNS se realizan en este servidor. Un dominio puede tener una o más zonas DNS. Cada zona DNS tiene un archivo de zona que contiene todos los registros DNS de esa zona. En aras de la simplicidad, este artículo asume que desea utilizar una sola zona DNS para administrar todos los registros DNS para su nombre de dominio.

/etc/bind/named.conf.default-zones El archivo define la zona raíz y la zona localhost. Para agregar una zona para su nombre de dominio, edite /etc/bind/named.conf.local archivo.

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

Agregue las siguientes líneas a este archivo. Reemplace example.com con su propio nombre de dominio. Reemplace 12.34.56.78 con la dirección IP del servidor DNS esclavo.

zone "example.com" {
      type master;
      file "/etc/bind/db.example.com";
      allow-query { any; };
      allow-transfer { 12.34.56.78; };
};

En la configuración anterior, creamos una nueva zona con zone cláusula y especificamos que esta es la zona maestra. El archivo de zona es /etc/bind/db.example.com , donde agregaremos registros DNS. La transferencia de zona solo se permitirá para el servidor DNS esclavo. Guarde y cierre el archivo.

En lugar de crear un archivo de zona desde cero, podemos usar un archivo de plantilla de zona. Copie el contenido de db.empty a un archivo nuevo.

sudo cp /etc/bind/db.empty /etc/bind/db.example.com

Un archivo de zona puede contener 3 tipos de entradas:

  • Comentarios :comienza con un punto y coma (;)
  • Directivas :comienza con un signo de dólar ($)
  • Registros de recursos :también conocido como registros DNS

Un archivo de zona generalmente consta de los siguientes tipos de registros DNS.

  • El registro SOA (Inicio de autoridad) :define las características clave de una zona. Es el primer registro DNS en el archivo de zona y es obligatorio.
  • Registro NS (servidor de nombres) :especifica qué servidores se utilizan para almacenar registros de DNS y responder consultas de DNS para un nombre de dominio. Debe haber al menos dos registros NS en un archivo de zona.
  • Registro MX (intercambiador de correo) :especifica qué hosts son responsables de la entrega de correo electrónico para un nombre de dominio.
  • Un registro (Dirección) :Convierte nombres DNS en direcciones IPv4.
  • Récord AAAA (Quad A) :Convierte nombres DNS en direcciones IPv6.
  • Registro CNAME (Nombre canónico) :se utiliza para crear un alias para un nombre DNS.
  • Registro TXT :SPF, DKIM, DMARC, etc.

Ahora editemos el archivo de zona.

sudo nano /etc/bind/db.example.com

Por defecto, se ve así:

Puedes cambiarlo a esto en su lugar.

donde

  • El $TTL directiva define el Tiempo de vida predeterminado valor para la zona, que es el tiempo que un registro de DNS puede almacenarse en caché en una resolución de DNS. Esta directiva es obligatoria. El tiempo se especifica en segundos.
  • El $ORIGIN directiva define el dominio base.
  • Los nombres de dominio deben terminar con un punto (.), que es el dominio raíz. Cuando un nombre de dominio termina con un punto, es un nombre de dominio completo (FQDN).
  • El símbolo @ hace referencia al dominio base.
  • IN es la clase DNS. Significa Internet. Existen otras clases de DNS, pero rara vez se utilizan.

El primer registro en un archivo de zona es el registro SOA (Inicio de autoridad). Este registro contiene la siguiente información:

  • El servidor DNS maestro .
  • Dirección de correo electrónico del administrador de la zona . RFC 2142 recomienda la dirección de correo electrónico [email protected] . En el archivo de zona, esta dirección de correo electrónico toma esta forma:hostmaster.example.com porque el símbolo @ tiene un significado especial en el archivo de zona.
  • Número de serie de zona . El número de serie es una forma de rastrear los cambios en la zona por parte del servidor DNS esclavo. Por convención, el número de serie toma un formato de fecha:yyyymmddss , donde yyyy es el número de año de cuatro dígitos, mm es el mes, dd es el día y ss es el número de secuencia del día. Debe actualizar el número de serie cuando se realicen cambios en el archivo de zona.
  • Actualizar valor . Cuando se alcanza el valor de actualización, el servidor DNS esclavo intentará leer el registro SOA del servidor DNS maestro. Si el número de serie aumenta, se inicia una transferencia de zona.
  • Valor de reintento . Define el intervalo de reintento en segundos si el servidor DNS esclavo no puede conectarse al servidor DNS maestro.
  • Caducidad :Si el servidor DNS esclavo no ha podido establecer contacto con el servidor DNS maestro durante este período de tiempo, el esclavo dejará de responder a las consultas de DNS para esta zona.
  • TTL de caché negativo :define el valor del tiempo de vida de las respuestas de DNS para nombres de DNS inexistentes (NXDOMAIN).

Los registros TXT suelen estar entre comillas dobles. Si agrega un registro DKIM, también debe encerrar el valor entre paréntesis.

Guarde y cierre el archivo. Luego ejecute el siguiente comando para verificar si hay errores de sintaxis en el archivo de configuración principal. Una salida silenciosa indica que no se encontraron errores.

sudo named-checkconf

Luego verifique la sintaxis de los archivos de zona.

sudo named-checkzone example.com /etc/bind/db.example.com

Si hay errores de sintaxis en el archivo de zona, debe corregirlo o esta zona no se cargará. El siguiente mensaje indica que no hay errores de sintaxis.

zone example.com/IN: loaded serial 2019011503
OK

Luego reinicie BIND9.

sudo systemctl restart bind9

Si está utilizando el cortafuegos sin complicaciones (UFW), abra el puerto 53 de TCP y UDP.

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

Si está utilizando el cortafuegos de iptables directamente, ejecute el siguiente comando.

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT

Configuración del Servidor DNS Esclavo

Ahora usamos el otro servidor como servidor DNS esclavo, que se llamará ns2.example.com .

Primero, edite el named.conf.local archivo.

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

Agregue una zona como la siguiente. Reemplace 12.34.56.78 con la dirección IP del servidor DNS maestro.

zone "example.com" {
        type slave;
        file "db.example.com";
        allow-query { any; };
        masters { 12.34.56.78; };
};

En la configuración anterior, especificamos que este es un servidor DNS esclavo para example.com zone y aceptará transferencias de zona solo desde una dirección IP de confianza.

Guarde y cierre el archivo. Luego ejecute el siguiente comando para verificar si hay errores de sintaxis en el archivo de configuración principal.

sudo named-checkconf

Si no se encuentran errores, reinicie BIND9.

sudo systemctl restart bind9

El archivo de zona en el servidor DNS esclavo se carga desde una transferencia de zona, que se usa para sincronizar los cambios de registros DNS del servidor DNS maestro al servidor DNS esclavo. Después de que BIND9 se reinicie, la transferencia de zona comenzará de inmediato. Verifique el registro de BIND9 con el siguiente comando.

sudo journalctl -eu bind9

Puede ver mensajes como los siguientes, que indican que la transferencia de zona se realizó correctamente.

named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)

El archivo de zona se guardará como /var/cache/bind/db.example.com .

Si está utilizando el cortafuegos sin complicaciones (UFW), abra el puerto 53 de TCP y UDP.

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

Si está utilizando el cortafuegos de iptables directamente, ejecute el siguiente comando.

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

Más sobre Transferencia de Zona

El servidor DNS esclavo se comunicará con el maestro nuevamente cuando se alcance el tiempo de actualización en el registro SOA y si el número de serie en el maestro es mayor que el del esclavo, se iniciará una transferencia de zona. Hay dos tipos de transferencias de zona:

  • Transferencia de zona completa (AXFR):se transfiere la copia completa del archivo de zona.
  • Transferencia de zona incremental (IXFR):solo se transfieren los registros DNS que se modifican.

Ambos tipos de transferencia de zona utilizan el puerto TCP 53. De forma predeterminada, BIND en el servidor DNS esclavo solicitará una transferencia de zona incremental y BIND en el servidor DNS maestro solo permitirá la transferencia de zona incremental cuando la zona sea dinámica.

El intervalo de transferencia de zona es un factor importante de la velocidad de propagación de los cambios en los registros DNS. En lugar de esperar a que el servidor DNS esclavo haga contacto, el maestro BIND notificará al esclavo cuando se realicen cambios en la zona. Esto puede reducir considerablemente el tiempo de propagación de cambios de zona a Internet.

Zona inversa

Una zona inversa contiene un registro PTR que asigna una dirección IP a un nombre DNS. Es la contraparte del registro DNS A. El registro PTR a menudo es necesario para que los servidores de correo pasen los filtros de spam. Este registro no pertenece a un dominio. Debe crear un registro PTR en el panel de control de su proveedor de alojamiento o preguntarle a su ISP, por lo que no voy a cubrir la creación de zonas inversas en BIND.

Cambiar registro NS y crear registro de pegamento

Ahora debe ir al sitio web del registrador de su dominio para cambiar el registro NS de su dominio, de modo que Internet sepa que ahora está utilizando su propio servidor DNS. Normalmente usa nombres de host en el registro NS como ns1.example.com y ns2.example.com .

name server 1:     ns1.example.com
name server 2:     ns2.example.com

Si tiene un nombre de dominio example.com y utiliza un subdominio para los servidores DNS autorizados (ns1.example.com y ns2.example.com ), entonces también necesita crear un registro de enlace en su registrador de dominio, para que Internet pueda conocer la dirección IP de su servidor DNS. El registro de pegamento es un registro A para ns1.example.com y ns2.example.com .

ns1.example.com        IP-address-of-master-server
ns2.example.com        IP-address-of-slave-server

La información anterior se enviará a un operador de registro que ejecuta servidores DNS de TLD a través del Protocolo de aprovisionamiento extensible (EPP), para que los servidores DNS de TLD conozcan los nombres de host y las direcciones IP de los servidores DNS autorizados para su nombre de dominio. Según el registrador de dominio que utilice, su registro NS puede propagarse instantáneamente o puede demorar hasta 24 horas en propagarse. Puede ir a https://dnsmap.io para verificar si su nuevo registro NS está activo.

Te mostraré cómo hacer esto en NameCheap .

Si compró un nombre de dominio en NameCheap, inicie sesión en su cuenta de NameCheap. Seleccione la Domain list menú en la barra lateral izquierda, luego haz clic en Administrar botón en el extremo derecho.

Seleccione DNS avanzado .

Desplácese hasta la parte inferior de la página, encontrará el servidor DNS personal sección. Haga clic en Agregar servidor de nombres botón para agregar sus propios servidores de nombres:ns1.example.com y ns2.example.com . Debe ingresar las direcciones IP de sus servidores de nombres.

Después de agregar sus dos servidores de nombres, haga clic en el botón de búsqueda para verificar si se agregaron correctamente. Si es así, los registros de pegamento aparecerán en la parte inferior de esta página.

Ahora haga clic en Domain y use su servidor DNS personalizado.

Según el registrador de dominio que utilice, su registro NS puede propagarse instantáneamente o puede demorar hasta 24 horas en propagarse. Puede ir a https://dnsmap.io para verificar si su nuevo registro NS está activo.

Después de que el registro NS y el registro de conexión se hayan propagado a Internet, sus servidores DNS responderán a las consultas de DNS para su nombre de dominio. Puede consultar el registro de consultas con:

sudo journalctl -eu bind9

También puedes usar el dig utilidad para verificar el registro NS de su nombre de dominio.

dig NS example.com

Si el registro NS y el registro de conexión se han propagado a Internet, debería ver sus servidores de nombres en la sección de respuestas. Si ve el SERVFAIL error, probablemente se deba a que no abrió el puerto UDP 53 en sus servidores de nombres.

Cosas que debe saber

  • El término master DNS server solo implica que este servidor almacena la copia maestra del archivo de zona. No tiene mayor prioridad cuando se trata de la resolución de DNS.
  • Actualice siempre el número de serie de SOA cuando realice cambios en un archivo de zona.

Uso de comodines en el archivo de zona BIND

Si desea apuntar todos los subdominios a la misma dirección IP, puede usar comodines para lograrlo. Por ejemplo, la siguiente línea hará que todos sus subdominios apunten a la dirección IP 1.2.3.4.

*.your-domain.com  IN   A   1.2.3.4

Habilitación del solucionador

BIND puede actuar como un servidor DNS autorizado para una zona y una resolución de DNS al mismo tiempo. Es una buena práctica separar los dos roles en dos hosts diferentes y en este artículo deshabilitamos la resolución en BIND. Si realmente desea habilitar la resolución, siga las instrucciones a continuación.

Edite el archivo de configuración BIND.

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

Encuentra las siguientes líneas.

 // disable recursion on authoritative DNS server.
 recursion no;

Cámbielos a lo siguiente, de modo que solo la dirección IP de confianza pueda enviar consultas recursivas a su resolución de DNS y su servidor no será una resolución abierta.

 // allow recursion for trusted clients only.
 recursion yes;
 allow-query { localhost; 12.34.56.78; };

Reemplace 12.34.56.78 con su propia dirección IP. Guarde y cierre el archivo. Asegúrese de que la definición de su zona esté en /etc/bind/named.conf.local El archivo tiene la siguiente opción, por lo que Internet puede consultar los registros DNS en su zona.

allow-query { any; };

Luego reinicie BIND.

sudo systemctl restart bind9

Vaya a https://openresolver.com/ para probar si su servidor BIND es un resolver abierto.


Ubuntu
  1. Cómo configurar e instalar Squid Proxy Server en Ubuntu 18.04

  2. Cómo configurar el servidor de nombres DNS en Ubuntu 20.04

  3. Cómo configurar un servidor LAMP de Ubuntu/Debian

  4. Cómo configurar WireGuard en Ubuntu 22.04

  5. Cómo configurar un servidor TeamSpeak en Ubuntu 16.04

Cómo configurar Quad 9 DNS en Ubuntu 16.04 y Ubuntu 17.10 Desktop

Configurar el solucionador de DNS independiente en el servidor Ubuntu 20.04

Servidor DNS BIND

Cómo instalar el servidor DNS en Ubuntu 20.04 LTS

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

Cómo:Servidor DNS BIND9 autorizado en CentOS 7:Instalación y configuración