Cómo implementar y administrar su DNS mediante DNSControl en Debian 10

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de DNSControl
  • Paso 2: Configuración de DNSControl
  • Paso 3: Creación de un archivo de configuración de DNS
  • Paso 4: Cómo completar el archivo de configuración de DNS
  • Paso 5: Prueba e implementación de la configuración de DNS
  • Conclusión
  • El autor seleccionó a Electronic Frontier Foundation Inc para recibir una donación como parte del programa Write for DOnations.

    Introducción

    DNSControl es una herramienta de infraestructura como código que le permite implementar y administrar sus zonas DNS utilizando principios de desarrollo de software estándar, incluidos control de versiones, pruebas e implementación automatizada. DNSControl fue creado por Stack Exchange y está escrito en Go.

    El uso de DNSControl elimina muchos de los problemas de la administración manual de DNS, ya que los archivos de zona se almacenan en un formato programable. Esto le permite implementar zonas en varios proveedores de DNS simultáneamente, identificar errores de sintaxis y enviar su configuración de DNS automáticamente, lo que reduce el riesgo de error humano. Otro uso común de DNSControl es migrar rápidamente su DNS a un proveedor diferente; por ejemplo, en caso de un ataque DDoS o una interrupción del sistema.

    En este tutorial, instalará y configurará DNSControl, creará una configuración básica de DNS y comenzará a implementar registros DNS en un proveedor activo. Como parte de este tutorial, utilizaremos DigitalOcean como proveedor de DNS de ejemplo. Si desea utilizar un proveedor diferente, la configuración es muy similar. Cuando haya terminado, podrá administrar y probar su configuración de DNS en un entorno seguro y sin conexión, y luego implementarla automáticamente en producción.

    Prerrequisitos

    Antes de comenzar esta guía necesitarás lo siguiente:

    • Un servidor Debian 10 configurado siguiendo la configuración inicial del servidor con Debian 10, incluido un usuario sudo no root y un firewall habilitado para bloquear puertos no esenciales. your-server-ipv4-addressse refiere a la dirección IP del servidor donde aloja su sitio web o dominio. your-server-ipv6-addressse refiere a la dirección IPv6 del servidor donde aloja su sitio web o dominio.
    • Un nombre de dominio completamente registrado con DNS alojado por un proveedor compatible. En este tutorial, se utilizará your_domaina DigitalOcean como proveedor de servicios.
    • Una clave API de DigitalOcean (Personal Access Token) con permisos de lectura y escritura. Para crear una, visita Cómo crear un token de acceso personal.

    Una vez que tenga esto listo, inicie sesión en su servidor como usuario no root para comenzar.

    Paso 1: Instalación de DNSControl

    DNSControl está escrito en Go, por lo que comenzará este paso instalando Go en su servidor y configurando su GOPATH.

    Go está disponible dentro de los repositorios de software predeterminados de Debian, lo que hace posible su instalación utilizando herramientas de gestión de paquetes convencionales.

    También necesitarás instalar Git, ya que esto es necesario para permitir que Go descargue e instale el software DNSControl desde su repositorio en GitHub.

    Comience actualizando el índice de paquetes locales para reflejar cualquier cambio nuevo en sentido ascendente:

    1. sudo apt update

    Luego, instala los paquetes golang-goy git:

    1. sudo apt install golang-go git

    Después de confirmar la instalación, aptse descargará e instalará Go y Git, así como todas sus dependencias necesarias.

    A continuación, configurará las variables de entorno de ruta necesarias para Go. Si desea obtener más información sobre esto, puede leer este tutorial sobre cómo entender GOPATH. Comience editando el ~/.profilearchivo:

    1. nano ~/.profile

    Añade las siguientes líneas al final de tu archivo:

    ~/.perfil

    ...export GOPATH="$HOME/go"export PATH="$PATH:$GOPATH/bin"

    Una vez que hayas agregado estas líneas al final del archivo, guárdalo y ciérralo. Luego, vuelve a cargar tu perfil cerrando la sesión y volviendo a iniciarla, o bien obteniendo el archivo nuevamente:

    1. source ~/.profile

    Ahora que ha instalado y configurado Go, puede instalar DNSControl.

    El go getcomando se puede utilizar para obtener una copia del código, compilarlo automáticamente e instalarlo en su directorio Go:

    1. go get github.com/StackExchange/dnscontrol

    Una vez completado esto, puedes verificar la versión instalada para asegurarte de que todo funciona:

    1. dnscontrol version

    El resultado será similar al siguiente:

    Outputdnscontrol 2.9-dev

    Si ve un dnscontrol: command not founderror, vuelva a verificar la configuración de su ruta Go.

    Ahora que ha instalado DNSControl, puede crear un directorio de configuración y conectar DNSControl a su proveedor de DNS para permitirle realizar cambios en sus registros DNS.

    Paso 2: Configuración de DNSControl

    En este paso, creará los directorios de configuración necesarios para DNSControl y lo conectará a su proveedor de DNS para que pueda comenzar a realizar cambios en vivo en sus registros DNS.

    En primer lugar, crea un nuevo directorio en el que puedas almacenar tu configuración de DNSControl y luego dirígete a él:

    1. mkdir ~/dnscontrol
    2. cd ~/dnscontrol

    Nota: Este tutorial se centrará en la configuración inicial de DNSControl; sin embargo, para uso en producción, se recomienda almacenar la configuración de DNSControl en un sistema de control de versiones (VCS) como Git. Las ventajas de esto incluyen control de versiones completo, integración con CI/CD para pruebas, reversión sin inconvenientes de implementaciones, etc.

    Si planea utilizar DNSControl para escribir archivos de zona BIND, también debe crear el zonesdirectorio:

    1. mkdir ~/dnscontrol/zones

    Los archivos de zona BIND son un método estandarizado y sin formato para almacenar zonas/registros DNS en formato de texto sin formato. Originalmente se utilizaban para el software de servidor DNS BIND, pero ahora se han adoptado ampliamente como el método estándar para almacenar zonas DNS. Los archivos de zona BIND producidos por DNSControl son útiles si desea importarlos a un servidor DNS personalizado o alojado por usted mismo, o para fines de auditoría.

    Sin embargo, si solo desea utilizar DNSControl para enviar cambios de DNS a un proveedor administrado, el zonesdirectorio no será necesario.

    A continuación, debe configurar el creds.jsonarchivo, que es lo que permitirá a DNSControl autenticarse con su proveedor de DNS y realizar cambios. El formato creds.jsonvaría ligeramente según el proveedor de DNS que esté utilizando. Consulte la lista de proveedores de servicios en la documentación oficial de DNSControl para encontrar la configuración de su propio proveedor.

    Crea el archivo creds.jsonen el ~/dnscontroldirectorio:

    1. cd ~/dnscontrol
    2. nano creds.json

    Agregue la creds.jsonconfiguración de muestra para su proveedor de DNS al archivo. Si utiliza DigitalOcean como proveedor de DNS, puede utilizar lo siguiente:

    ~/dnscontrol/creds.json

    {"digitalocean": {  "token": "your-digitalocean-oauth-token"}}

    Este archivo le dice a DNSControl a qué proveedores de DNS desea que se conecte.

    Deberá proporcionar algún tipo de autenticación para su proveedor de DNS. Por lo general, se trata de una clave API o un token OAuth, pero algunos proveedores requieren información adicional, como se documenta en la lista de proveedores de servicios en la documentación oficial de DNSControl.

    Advertencia: este token otorgará acceso a su cuenta de proveedor de DNS, por lo que debe protegerlo como lo haría con una contraseña. Además, asegúrese de que, si está utilizando un sistema de control de versiones, el archivo que contiene el token esté excluido (por ejemplo, utilizando .gitignore) o esté cifrado de forma segura de alguna manera.

    Si utiliza DigitalOcean como su proveedor de DNS, puede usar el token OAuth requerido en la configuración de su cuenta de DigitalOcean que generó como parte de los requisitos previos.

    Si tiene varios proveedores de DNS diferentes (por ejemplo, para múltiples nombres de dominio o zonas DNS delegadas), puede definirlos todos en el mismo creds.jsonarchivo.

    Ha configurado los directorios de configuración inicial de DNSControl y lo ha configurado creds.jsonpara permitir que DNSControl se autentique con su proveedor de DNS y realice cambios. A continuación, creará la configuración para sus zonas DNS.

    Paso 3: Creación de un archivo de configuración de DNS

    En este paso, creará un archivo de configuración de DNS inicial, que contendrá los registros DNS para su nombre de dominio o zona DNS delegada.

    dnsconfig.jses el archivo de configuración DNS principal para DNSControl. En este archivo, se definen las zonas DNS y sus registros correspondientes mediante sintaxis JavaScript. Esto se conoce como DSL o lenguaje específico de dominio. La página DSL de JavaScript en la documentación oficial de DNSControl proporciona más detalles.

    Para comenzar, cree el archivo de configuración DNS en el ~/dnscontroldirectorio:

    1. cd ~/dnscontrol
    2. nano dnsconfig.js

    Luego, agregue la siguiente configuración de muestra al archivo:

    ~/dnscontrol/dnsconfig.js

    // Providers:var REG_NONE = NewRegistrar('none', 'NONE');var DNS_DIGITALOCEAN = NewDnsProvider('digitalocean', 'DIGITALOCEAN');// Domains:D('your_domain', REG_NONE, DnsProvider(DNS_DIGITALOCEAN),  A('@', 'your-server-ipv4-address'));

    Este archivo de ejemplo define un nombre de dominio o una zona DNS en un proveedor en particular, que en este caso está your_domainalojado por DigitalOcean. ATambién se define un registro de ejemplo para la raíz de la zona ( @), que apunta a la dirección IPv4 del servidor en el que está alojando su dominio o sitio web.

    Hay tres funciones principales que componen un archivo de configuración DNSControl básico:

    • NewRegistrar(name, type, metadata): define el registrador de dominio para su nombre de dominio. DNSControl puede utilizar esto para realizar los cambios necesarios, como modificar los servidores de nombres autorizados. Si solo desea utilizar DNSControl para administrar sus zonas DNS, generalmente puede dejarlo como NONE.

    • NewDnsProvider(name, type, metadata): define un proveedor de servicios DNS para su nombre de dominio o zona delegada. Aquí es donde DNSControl enviará los cambios de DNS que realice.

    • D(name, registrar, modifiers): define un nombre de dominio o una zona DNS delegada para que DNSControl los administre, así como los registros DNS presentes en la zona.

    Debe configurar NewRegistrar(), NewDnsProvider(), y D()según corresponda utilizando la lista de proveedores de servicios en la documentación oficial de DNSControl.

    Si está utilizando DigitalOcean como su proveedor de DNS y solo necesita poder realizar cambios de DNS (en lugar de también servidores de nombres autorizados), el ejemplo en el bloque de código anterior ya es correcto.

    Una vez completado, guarde y cierre el archivo.

    En este paso, se configura un archivo de configuración de DNS para DNSControl, con los proveedores relevantes definidos. A continuación, se completa el archivo con algunos registros DNS útiles.

    Paso 4: Cómo completar el archivo de configuración de DNS

    A continuación, puede completar el archivo de configuración de DNS con registros DNS útiles para su sitio web o servicio, utilizando la sintaxis DNSControl.

    A diferencia de los archivos de zona BIND tradicionales, donde los registros DNS se escriben en un formato sin procesar, línea por línea, los registros DNS dentro de DNSControl se definen como un parámetro de función (modificador de dominio) para la D()función, como se muestra brevemente en el Paso 3.

    Existe un modificador de dominio para cada uno de los tipos de registros DNS estándar, incluidos A, AAAA, MX, TXT, NS, CAA, etc. Hay una lista completa de los tipos de registros disponibles en la sección Modificadores de dominio de la documentación de DNSControl.

    También hay modificadores para registros individuales (modificadores de registros). Actualmente, se utilizan principalmente para establecer el TTL (tiempo de vida) de registros individuales. En la sección Modificadores de registros de la documentación de DNSControl se encuentra disponible una lista completa de los modificadores de registros disponibles. Los modificadores de registros son opcionales y, en la mayoría de los casos de uso básicos, se pueden omitir.

    La sintaxis para configurar registros DNS varía ligeramente para cada tipo de registro. A continuación, se muestran algunos ejemplos de los tipos de registros más comunes:

    • Aarchivos:

      • Propósito: señalar una dirección IPv4.
      • Sintaxis:A('name', 'address', optional record modifiers)
      • Ejemplo:A('@', 'your-server-ipv4-address', TTL(30))
    • AAAAarchivos:

      • Propósito: Señalar una dirección IPv6.
      • Sintaxis:AAAA('name', 'address', optional record modifiers)
      • Ejemplo: (se omitió el modificador de registro, por lo que se utilizará el TTL predeterminado)AAAA('@', 'your-server-ipv6-address')
    • CNAMEarchivos:

      • Propósito: Hacer que su dominio/subdominio sea un alias de otro.
      • Sintaxis:CNAME('name', 'target', optional record modifiers)
      • Ejemplo: (tenga en cuenta que se debe incluir un punto final si hay puntos en el valor)CNAME('subdomain1', 'example.org.').
    • MXarchivos:

      • Propósito: Dirigir el correo electrónico a servidores/direcciones específicos.
      • Sintaxis:MX('name', 'priority', 'target', optional record modifiers)
      • Ejemplo: (tenga en cuenta que se debe incluir un punto final si hay puntos en el valor)MX('@', 10, 'mail.example.net').
    • TXTarchivos:

      • Propósito: agregar texto simple arbitrario, a menudo utilizado para configuraciones sin su propio tipo de registro dedicado.
      • Sintaxis:TXT('name', 'content', optional record modifiers)
      • Ejemplo:TXT('@', 'This is a TXT record.')
    • CAAarchivos:

      • Propósito: Restringir e informar sobre las autoridades de certificación (CA) que pueden emitir certificados TLS para su dominio/subdominios.
      • Sintaxis:CAA('name', 'tag', 'value', optional record modifiers)
      • Ejemplo:CAA('@', 'issue', 'letsencrypt.org')

    Para comenzar a agregar registros DNS para su dominio o zona DNS delegada, edite su archivo de configuración DNS:

    1. nano dnsconfig.js

    A continuación, puede comenzar a completar los parámetros de la D()función existente utilizando la sintaxis descrita en la lista anterior, así como la sección Modificadores de dominio de la documentación oficial de DNSControl. ,Se debe utilizar una coma ( ) entre cada registro.

    Como referencia, el bloque de código aquí contiene una configuración de muestra completa para una configuración de DNS inicial básica:

    ~/dnscontrol/dnsconfig.js

    ...D('your_domain', REG_NONE, DnsProvider(DNS_DIGITALOCEAN),  A('@', 'your-server-ipv4-address'),  A('www', 'your-server-ipv4-address'),  A('mail', 'your-server-ipv4-address'),  AAAA('@', 'your-server-ipv6-address'),  AAAA('www', 'your-server-ipv6-address'),  AAAA('mail', 'your-server-ipv6-address'),  MX('@', 10, 'mail.your_domain.'),  TXT('@', 'v=spf1 -all'),  TXT('_dmarc', 'v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;'));

    Una vez que haya completado su configuración de DNS inicial, guarde y cierre el archivo.

    En este paso, se configura el archivo de configuración DNS inicial, que contiene los registros DNS. A continuación, se prueba la configuración y se implementa.

    Paso 5: Prueba e implementación de la configuración de DNS

    En este paso, ejecutará una verificación de sintaxis local en su configuración de DNS y luego implementará los cambios en el servidor/proveedor de DNS en vivo.

    En primer lugar, vaya a su dnscontroldirectorio:

    1. cd ~/dnscontrol

    A continuación, utilice la previewfunción DNSControl para comprobar la sintaxis de su archivo y mostrar qué cambios realizará (sin realizarlos realmente):

    1. dnscontrol preview

    Si la sintaxis de su archivo de configuración de DNS es correcta, DNSControl mostrará una descripción general de los cambios que realizará. Debería verse similar a lo siguiente:

    Output******************** Domain: your_domain----- Getting nameservers from: digitalocean----- DNS Provider: digitalocean...8 corrections#1: CREATE A your_domain your-server-ipv4-address ttl=300#2: CREATE A www.your_domain your-server-ipv4-address ttl=300#3: CREATE A mail.your_domain your-server-ipv4-address ttl=300#4: CREATE AAAA your_domain your-server-ipv6-address ttl=300#5: CREATE TXT _dmarc.your_domain "v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;" ttl=300#6: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300#7: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300#8: CREATE MX your_domain 10 mail.your_domain. ttl=300----- Registrar: none...0 correctionsDone. 8 corrections.

    Si ve una advertencia de error en su salida, DNSControl le proporcionará detalles sobre qué es el error y dónde se encuentra dentro de su archivo.

    Advertencia: El siguiente comando realizará cambios en vivo en sus registros DNS y posiblemente en otras configuraciones. Asegúrese de estar preparado para esto, lo que incluye realizar una copia de seguridad de su configuración DNS existente y asegurarse de tener los medios para revertirla si es necesario.

    Finalmente, puedes enviar los cambios a tu proveedor de DNS en vivo:

    1. dnscontrol push

    Verá un resultado similar al siguiente:

    Output******************** Domain: your_domain----- Getting nameservers from: digitalocean----- DNS Provider: digitalocean...8 corrections#1: CREATE TXT _dmarc.your_domain "v=DMARC1; p=reject; rua=mailto:abuse@your_domain; aspf=s; adkim=s;" ttl=300SUCCESS!#2: CREATE A your_domain your-server-ipv4-address ttl=300SUCCESS!#3: CREATE AAAA your_domain your-server-ipv6-address ttl=300SUCCESS!#4: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300SUCCESS!#5: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300SUCCESS!#6: CREATE A www.your_domain your-server-ipv4-address ttl=300SUCCESS!#7: CREATE A mail.your_domain your-server-ipv4-address ttl=300SUCCESS!#8: CREATE MX your_domain 10 mail.your_domain. ttl=300SUCCESS!----- Registrar: none...0 correctionsDone. 8 corrections.

    Ahora, si verifica la configuración de DNS de su dominio en el panel de control de DigitalOcean, verá los cambios.

    También puede comprobar la creación del registro ejecutando una consulta DNS para su dominio/zona delegada utilizando dig.

    Si no lo tienes diginstalado, necesitarás instalar el dnsutilspaquete:

    1. sudo apt install dnsutils

    Una vez que lo hayas instalado dig, podrás usarlo para realizar una búsqueda de DNS para tu dominio. Verás que los registros se han actualizado como corresponde:

    1. dig +short your_domain

    Verá un resultado que muestra la dirección IP y el registro DNS correspondiente de su zona que se implementó mediante DNSControl. Los registros DNS pueden tardar un tiempo en propagarse, por lo que es posible que deba esperar y ejecutar este comando nuevamente.

    En este paso final, ejecutó una verificación de sintaxis local del archivo de configuración de DNS, luego lo implementó en su proveedor de DNS en vivo y probó que los cambios se realizaron correctamente.

    Conclusión

    En este artículo, configuró DNSControl e implementó una configuración de DNS en un proveedor activo. Ahora puede administrar y probar los cambios de configuración de DNS en un entorno seguro y sin conexión antes de implementarlos en producción.

    Si desea explorar este tema más a fondo, DNSControl está diseñado para integrarse en su flujo de trabajo de CI/CD, lo que le permite ejecutar pruebas en profundidad y tener más control sobre su implementación en producción. También puede considerar la posibilidad de integrar DNSControl en sus procesos de creación/implementación de infraestructura, lo que le permitirá implementar servidores y agregarlos a DNS de forma completamente automática.

    Si desea avanzar más con DNSControl, los siguientes artículos de DigitalOcean ofrecen algunos pasos interesantes para ayudarle a integrar DNSControl en sus flujos de trabajo de gestión de cambios e implementación de infraestructura:

    • Introducción a la integración, entrega e implementación continuas
    • Comparación de herramientas de CI/CD: Jenkins, GitLab CI, Buildbot, Drone y Concourse
    • Introducción a la gestión de la configuración
    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion