One place for hosting & domains

      DNSControl

      Como implantar e gerenciar seu DNS usando o DNSControl no Debian 10


      O autor selecionou a Electronic Frontier Foundation, Inc para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O DNSControl é uma ferramenta de infraestrutura como código que permite a implantação e gerenciamento de suas zonas DNS (Sistema de Nomes de Domínios, do inglês Domain Name System) usando princípios de desenvolvimento de software padrão, incluindo o controle, teste e implantação automática de versão. O DNSControl foi criado pelo Stack Exchange e foi escrito em Go.

      O DNSControl elimina muitas das armadilhas do gerenciamento manual de DNS, considerando que os arquivos da zona ficam armazenados em um formato programável. Isso permite que você implante zonas para vários provedores de DNS simultaneamente, identifique erros de sintaxe e envie a configuração DNS automaticamente, reduzindo o risco de erro humano. Outro uso comum do DNSControl é a migração rápida de seu DNS para um provedor diferente; por exemplo, no caso de um ataque DDoS ou uma interrupção do sistema.

      Neste tutorial, você instalará e configurará o DNSControl, criará uma configuração básica do DNS e começará a implantar registros DNS em um provedor ativo. Como parte deste tutorial, usaremos a DigitalOcean como o provedor DNS do exemplo. Se quiser usar um provedor diferente, a configuração é bastante parecida. Quando terminar, você conseguirá gerenciar e testar sua configuração de DNS em um ambiente seguro e offline e, depois, poderá implantá-lo para a produção.

      Pré-requisitos

      Antes de iniciar este guia, você precisará do seguinte:

      • Um servidor Debian 10 configurado de acordo com as instruções no artigo Configuração Inicial do servidor com o Debian 10, incluindo um usuário não raiz sudo e o firewall habilitado para bloquear portas não essenciais. O your-server-ipv4-address se refere ao endereço IP do servidor onde você estiver hospedando seu site ou domínio. O your-server-ipv6-address se refere ao endereço IPv6 do servidor onde você estiver hospedando seu site ou domínio.
      • Um nome de domínio devidamente registrado com o DNS hospedado por um provedor compatível. Este tutorial usará o your_domain durante todo o processo e a DigitalOcean como a provedora de serviço.
      • Uma chave de API para a DigitalOcean (Token de acesso pessoal), com permissões de leitura e gravação. Para criar uma chave, acesse a página Como criar um Token de acesso pessoal.

      Assim que estiver com tudo pronto, faça login no seu servidor como usuário não raiz para começar.

      Passo 1 — Como instalar o DNSControl

      O DNSControl foi escrito em Go, de modo que você começará este passo instalando o Go em seu servidor e configurando o seu GOPATH.

      O Go está disponível dentro dos repositórios padrão de software do Debian, possibilitando que ele seja instalado com as ferramentas de gerenciamento de pacotes convencionais.

      Também será necessário instalar o Git, pois ele é necessário para permitir que o Go baixe e instale o software DNSControl a partir de seu repositório no GitHub.

      Comece atualizando o índice local de pacotes para refletir quaisquer novas alterações feitas no pacote original (upstream):

      Em seguida, instale os pacotes golang-go e git:

      • sudo apt install golang-go git

      Após confirmar a instalação, a ferramenta apt irá baixar e instalar o Go e o Git, bem como todas as suas respectivas dependências.

      Em seguida, você irá configurar as variáveis de ambiente path necessárias para o Go. Se quiser saber mais sobre isso, leia o tutorial Entendendo o GOPATH. Comece editando o arquivo ~/.profile:

      Adicione as seguintes linhas ao final do seu arquivo:

      ~/.profile

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

      Assim que tiver adicionado essas linhas ao final do arquivo, salve e feche o arquivo. Em seguida, recarregue seu perfil - seja fazendo log-off e fazendo log-in de volta, ou fornecendo o arquivo novamente:

      Agora que você instalou e configurou o Go, instale o DNSControl.

      O comando go get pode ser usado para obter uma cópia do código, compilá-lo automaticamente e instalá-lo dentro do seu diretório Go:

      • go get github.com/StackExchange/dnscontrol

      Assim que terminar, verifique a versão instalada para garantir que tudo está funcionando:

      Sua saída será semelhante à seguinte:

      Output

      dnscontrol 2.9-dev

      Se ver um erro dnscontrol: command not found, verifique novamente sua configuração de caminho do Go.

      Agora que você instalou o DNSControl, você pode criar um diretório de configuração e conectar o DNSControl ao seu provedor de DNS, a fim de permitir que ele faça alterações em seus registros de DNS.

      Passo 2 — Configurando o DNSControl

      Neste passo, você criará os diretórios de configuração necessários para o DNSControl e o conectará ao seu provedor de DNS para que ele possa começar a fazer alterações dinâmicas (em tempo real) nos seus registros do DNS.

      Primeiro, crie um novo diretório no qual você possa armazenar sua configuração do DNSControl e, então, vá para ele:

      • mkdir ~/dnscontrol
      • cd ~/dnscontrol

      Nota: este tutorial se concentrará na configuração inicial do DNSControl; no entanto, para o uso na produção, é recomendável armazenar sua configuração do DNSControl em um sistema de controle de versão (VCS) como o Git. As vantagens de se usar um VCS incluem o controle total de versões, integração com CI/CD para teste, reverter implantações sem interrupções e assim por diante.

      Se quiser usar o DNSControl para escrever arquivos de zona no BIND, crie também o diretório zones:

      Os arquivos de zona do BIND são um método bruto e padronizado para armazenar zonas/registros do DNS em formato de texto simples. Eles foram originalmente usados para o software de servidor de DNS BIND, mas agora são amplamente adotados como o método padrão para armazenar zonas de DNS. Os arquivos de zona no BIND produzidos pelo DNSControl são úteis caso queira importá-los para um servidor DNS personalizado ou auto-hospedado, ou para fins de auditoria.

      No entanto, se quiser usar o DNSControl para forçar alterações do DNS em um provedor gerenciado, o diretório zones não será necessário.

      Em seguida, você precisa configurar o arquivo creds.json, que é o que permitirá que o DNSControl se autentique para seu provedor DNS e faça as alterações. O formato creds.json difere ligeiramente, dependendo do provedor de DNS que você estiver usando. Para encontrar a configuração do seu próprio provedor, consulte a Lista de provedores de serviço na documentação oficial do DNSControl.

      Crie o arquivo creds.json no diretório ~/dnscontrol:

      • cd ~/dnscontrol
      • nano creds.json

      Adicione a configuração do creds.json do exemplo para o seu provedor de DNS ao arquivo. Se estiver usando o DigitalOcean como seu provedor fr DNS, você pode usar o seguinte:

      ~/dnscontrol/creds.json

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

      Esse arquivo diz ao DNSControl com quais provedores de DNS você quer que ele se conecte.

      Você precisará fornecer alguma forma de autenticação para seu provedor de DNS. Normalmente, essa autenticação consiste em uma chave de API ou token do OAuth, mas alguns provedores exigem informações extra, conforme documentado na Lista de provedores de serviço na documentação oficial do DNSControl.

      Aviso: esse token dará acesso à conta do seu provedor de DNS; dessa maneira, você deve protegê-lo, do mesmo modo que faria com uma senha. Além disso, se você estiver usando um sistema de controle de versão, certifique-se de que o arquivo que contém o token seja excluído (por exemplo, usando o .gitignore) ou criptografado de maneira segura.

      Se estiver usando o DigitalOcean como seu provedor de DNS, você pode usar o token do OAuth necessário em suas configurações de conta do DigitalOcean que você gerou como parte dos pré-requisitos.

      Se você tiver vários provedores de DNS — por exemplo, para nomes de domínios múltiplos, ou zonas de DNS delegadas—você pode definir todos eles no mesmo arquivo creds.json.

      Você definiu os diretórios de configuração inicial do DNSControl e configurou o creds.json para permitir que o DNSControl autentique seu provedor de DNS e faça alterações. Em seguida, você criará a configuração para suas zonas de DNS.

      Passo 3 — Criando um arquivo de configuração de DNS

      Neste passo, você criará um arquivo de configuração inicial do DNS, o qual terá os registros de DNS relacionados ao seu nome de domínio ou à zona de DNS delegada.

      O dnsconfig.js é o arquivo principal de configuração de DNS para o DNSControl. Neste arquivo, as zonas de DNS e seus registros correspondentes são definidos usando a sintaxe do JavaScript. Isso é conhecido como DSL, ou Linguagem Específica de Domínio. A página de DSL do JavaScript - na documentação oficial do DNSControl, fornece mais detalhes.

      Para começar, crie o arquivo de configuração do DNS no diretório ~/dnscontrol:

      • cd ~/dnscontrol
      • nano dnsconfig.js

      Então, adicione a seguinte configuração de exemplo ao arquivo:

      ~/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')
      );
      

      Esse arquivo de exemplo define um nome de domínio ou uma zona de DNS em um provedor em particular que, neste caso, é o your_domain, hospedado pelo DigitalOcean. Um registro de exemplo A também é definido para a zona raiz (@), que aponta para o endereço de IPv4 do servidor no qual você está hospedando seu domínio/site.

      Existem três funções principais que constituem um arquivo de configuração básica de DNSControl:

      • NewRegistrar(name, type, metadata): define o registrador de domínios para o seu nome de domínio. O DNSControl pode usar esse registrador para fazer as alterações necessárias, como modificar os servidores de nomes autorizados. Se quiser usar o DNSControl somente para gerenciar suas zonas de DNS, isso geralmente pode ser deixado como NONE.

      • NewDnsProvider(name, type, metadata)​​​: define um provedor de serviços de DNS para seu nome de domínio ou zona delegada. É aqui que o DNSControl irá forçar as alterações do DNS que você fez.

      • D(name, registrar, modifiers): define um nome de domínio ou zona de DNS delegada para o DNSControl gerenciar, além dos registros de DNS presentes na zona.

      Você deve configurar o NewRegistrar(), o NewDnsProvider() e o D(), conforme for o caso, usando a Lista de provedores de serviços da documentação oficial do DNSControl.

      Se você está usando o DigitalOcean como seu provedor de DNS e precisa ter a capacidade de fazer alterações no DNS (e não em servidores de nome autorizados), o exemplo do bloco de código anterior já está correto.

      Assim que terminar, salve e feche o arquivo.

      Neste passo, você definiu um arquivo de configuração de DNS para o DNSControl, com os fornecedores relevantes definidos. Em seguida, você irá preencher o arquivo com alguns registros úteis de DNS.

      Passo 4 — Preenchendo seu arquivo de configuração de DNS

      Na sequência, você pode preencher o arquivo de configuração de DNS com registros de DNS úteis para o seu site ou serviço, usando a sintaxe do DNSControl.

      Ao contrário dos arquivos tradicionais de zona no BIND, nos quais os registros de DNS são escritos em um formato bruto, linha por linha, os registros DNS dentro do DNSControl são definidos como um parâmetro de função (modificador de domínio) para a função D(), como mostrado brevemente no Passo 3.

      Existe um modificador de domínio para cada um dos tipos de registro padrão de DNS, incluindo A, AAAA, MX, TXT, NS, CAA e assim por diante. Na seção de Modificadores de domínios, da documentação sobre o DNSControl, você encontra uma lista completa dos tipos de registro disponíveis.

      Os modificadores de registros individuais também estão disponíveis (modificadores de registro). Atualmente, eles são usados principalmente para definir a vida útil (TTL ou time to live) de registros individuais. Você encontra a lista completa dos modificadores de registros disponíveis na seção de Modificadores de registro da documentação sobre o DNSControl. Os modifiers de registro são opcionais e, na maioria dos casos de uso básico, podem ser deixados de fora.

      A sintaxe para definir registros de DNS varia ligeiramente em relação a cada tipo de registro. Em seguida, temos alguns exemplos dos tipos de registros mais comuns:

      • Registros do tipo A:

        • Objetivo: apontar para um endereço de IPv4.
        • Sintaxe: A('name', 'address', optional record modifiers)​​​
        • Exemplo: A('@', 'your-server-ipv4-address', TTL(30))
      • Registros do tipo AAAA:

        • Objetivo: apontar para um endereço de IPv6.
        • Sintaxe: AAAA('name', 'address', optional record modifiers)
        • Exemplo: AAAA('@', 'your-server-ipv6-address') (modificador de registro deixado de lado para que a vida útil (TTL) padrão seja usada)
      • Registros do tipo CNAME:

        • Objetivo: transformar o seu domínio/subdomínio em alias de outro.
        • Sintaxe: CNAME('name', 'target', optional record modifiers)
        • Exemplo: CNAME('subdomain1', 'example.org.') (note que um ponto final, ., deve ser incluído se houver pontos no valor)
      • Registros do tipo MX:

        • Objetivo: direcionar e-mails para servidores/endereços específicos.
        • Sintaxe: MX('name', 'priority', 'target', optional record modifiers)
        • Exemplo: MX('@', 10, 'mail.example.net') (note que um ponto final, ., deve ser incluído se houver pontos no valor)
      • Registros do tipo TXT:

        • Objetivo: adicionar texto simples arbitrário, frequentemente usado para configurações sem seu próprio tipo de registro dedicado.
        • Sintaxe: TXT('name', 'content', optional record modifiers)
        • Exemplo: TXT('@', 'This is a TXT record. ')​​​
      • Registros do tipo CAA:

        • Objetivo: restringir e informar sobre as Autoridades de Certificação (CAs) que poderão emitir os certificados de TLS para os seus domínios/subdomínios.
        • Sintaxe: CAA('name', 'tag', 'value', optional record modifiers)
        • Exemplo: CAA('@', 'issue', 'letsencrypt.org')

      Para começar a adicionar registros de DNS ao seu domínio ou zona de DNS delegada, edite seu arquivo de configuração de DNS:

      Em seguida, você pode começar a preencher os parâmetros da função D() existente, usando a sintaxe descrita na lista anterior, além da seção de Modificadores de domínios da documentação oficial sobre DNSControl. Uma vírgula (,) deve ser usada entre cada registro.

      A título de referência, este bloco de código contém um exemplo da configuração completa de uma definição básica, inicial do DNS:

      ~/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;')
      );
      

      Assim que tiver completado sua configuração inicial do DNS, salve e feche o arquivo.

      Neste passo, você configurou o arquivo de configuração inicial do DNS, contendo seus registros de DNS. Em seguida, você testará a configuração e a implantará.

      Passo 5 — Testando e implantando sua configuração de DNS

      Neste passo, você executará uma verificação local da sintaxe em sua configuração de DNS e, em seguida, implantará as alterações no servidor/provedor ativo de DNS.

      Primeiro, vá até seu diretório dnscontrol:

      Em seguida, utilize a função preview do DNSControl para verificar a sintaxe do seu arquivo e mostrar quais alterações ele irá fazer (sem realmente fazer as alterações):

      Se a sintaxe do seu arquivo de configuração do DNS estiver correta, o DNSControl mostrará um panorama das alterações que ele irá fazer. Isso deve ser semelhante ao seguinte:

      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 corrections Done. 8 corrections.

      Se ver um aviso de erro em sua saída, o DNSControl dará detalhes sobre o que está errado e onde o erro está localizado dentro do seu arquivo.

      Aviso: o próximo comando fará alterações dinâmicas nos seus registros do DNS e possivelmente em outras configurações. Certifique-se de que esteja preparado para isso, incluindo fazendo um um backup da sua configuração de DNS existente, além de garantir que tenha os meios para reverter o processo, se necessário.

      Por fim, você pode enviar as alterações para seu provedor de DNS ativo:

      Você verá uma saída similar à seguinte:

      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=300 SUCCESS! #2: CREATE A your_domain your-server-ipv4-address ttl=300 SUCCESS! #3: CREATE AAAA your_domain your-server-ipv6-address ttl=300 SUCCESS! #4: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300 SUCCESS! #5: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300 SUCCESS! #6: CREATE A www.your_domain your-server-ipv4-address ttl=300 SUCCESS! #7: CREATE A mail.your_domain your-server-ipv4-address ttl=300 SUCCESS! #8: CREATE MX your_domain 10 mail.your_domain. ttl=300 SUCCESS! ----- Registrar: none...0 corrections Done. 8 corrections.

      Agora, se verificar as configurações de DNS do seu domínio no painel de controle do DigitalOcean, verá as alterações.

      Captura de tela do painel de controle do DigitalOcean, que mostra algumas alterações do DNS, feitas pelo DNSControl.

      Também é possível verificar a criação de registros, executando uma consulta de DNS em relação à sua zona de domínio/delegada usando o dig.

      Se não tiver o dig instalado, será necessário instalar o pacote dnsutils:

      • sudo apt install dnsutils

      Assim que instalar o dig, utilize-o para fazer uma pesquisa de DNS em relação ao seu domínio. Você verá que os registros foram atualizados de forma adequada:

      Você verá uma saída que mostra o endereço IP e o registro relevante de DNS da sua zona - que foi implantado usando o DNSControl. Os registros de DNS podem levar algum tempo para se propagarem, assim, talvez seja necessário esperar e executar esse comando novamente.

      Neste passo final, você executou uma verificação da sintaxe local do arquivo de configuração do DNS. Em seguida, implantou-a em seu provedor de DNS ativo e testou se as alterações foram feitas com êxito.

      Conclusão

      Neste artigo, você configurou o DNSControl e implantou uma configuração de DNS em um provedor ativo. Agora, você pode gerenciar e testar suas alterações de configuração do DNS em um ambiente seguro e offline, antes de implantá-las na produção.

      Se quiser explorar mais esse assunto, o DNSControl foi criado para se integrar ao seu pipeline de CI/CD (Integração Contínua/Entrega Contínua), o que lhe permite executar testes em profundidade e ter mais controle sobre sua implantação na produção. Você também pode pesquisar sobre a integração do DNSControl aos seus processos de compilação/implantação de infraestrutura, o que permite implantar servidores e adicioná-los ao DNS de maneira completamente automática.

      Se quiser avançar ainda mais com o DNSControl, os artigos do DigitalOcean, a seguir, apresentam alguns passos subsequentes interessantes para ajudar a integrar o DNSControl aos fluxos de trabalho de gerenciamento de alterações e implantação de infraestrutura:



      Source link

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


      El autor seleccionó la 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 de DNS usando principios de desarrollo de software estándar, el control de versiones, pruebas e implementaciones automatizadas. DNSControl es una creación de Stack Exchange y se escribió en Go.

      El uso de DNSControl elimina muchas de las dificultades 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 de manera simultánea, identificar errores de sintaxis y aplicar su configuración de DNS de manera automática, lo que reduce el riesgo que representan los errores humanos. Otro uso frecuente de DNSControl tiene que ver con la migración rápida de su DNS a un proveedor diferente; por ejemplo, en caso de un ataque DDoS o una interrupción del sistema.

      A través de este tutorial, instalará y configurará DNSControl, creará una configuración de DNS básica y comenzará a implementar registros de DNS en un proveedor activo. Como parte de este tutorial, usaremos DigitalOcean como proveedor DNS de ejemplo. Si desea usar un proveedor diferente, la configuración es muy similar. Al finalizar, podrá administrar y probar su configuración de DNS en un entorno seguro y sin conexión, y luego implementarla de manera automática en la producción.

      Requisitos previos

      Para completar esta guía, necesitará lo siguiente:

      • Un servidor de Debian 10 preparado conforme a la configuración inicial para servidores con Debian 10, incluidos un usuario sudo no root y un firewall habilitado para bloquear los puertos no esenciales. your-server-ipv4-address hace referencia a la dirección IP del servidor en donde aloja su sitio web o dominio. your-server-ipv6-address hace referencia a la dirección IPv6 del servidor en donde aloja su sitio web o dominio.
      • Un nombre de dominio registrado por completo con DNS alojado por un proveedor compatible. En este tutorial, se utilizará your_domain en todo momento y DigitalOcean será el proveedor de servicio.
      • Una clave de API de DigitalOcean (Token de acceso personal) con permisos de lectura y escritura. Para crear uno, consulte Cómo crear un Token de acceso personal.

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

      Paso 1: Instalar DNSControl

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

      Go está disponible en los repositorios de software predeterminados de Debian, lo que permite la instalación con las herramientas convencionales de administración de paquetes.

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

      Comience actualizando el índice de paquetes locales de modo que se refleje cualquier cambio anterior:

      Luego, instale los paquetes golang-go y git:

      • sudo apt install golang-go git

      Una vez confirmada la instalación, apt descargará e instalará Go y Git, así como todas las dependencias necesarias de estos.

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

      Añada las siguientes líneas al final de su archivo:

      ~/.profile

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

      Una vez que añada estas líneas al final del archivo, guárdelo y ciérrelo. Luego vuelva a cargar su perfil cerrando y volviendo a abrir la sesión, o bien volviendo a obtener el archivo:

      Ahora que instaló y configuró Go, puede instalar DNSControl.

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

      • go get github.com/StackExchange/dnscontrol

      Una vez completado esto, puede verificar la versión instalada para asegurar que todo funcione:

      El resultado debe tener un aspecto similar al siguiente:

      Output

      dnscontrol 2.9-dev

      Si ve un error dnscontrol: command not found, verifique bien la configuración de su ruta de Go.

      Ahora que instaló DNSControl, puede crear un directorio de configuración y conectar DNSControl a su proveedor DNS para permitir que haga cambios en sus registros de DNS.

      Paso 2: Configurar DNSControl

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

      Primero, cree un directorio nuevo en el que pueda almacenar su configuración de DNSControl y luego posiciónese en este:

      • mkdir ~/dnscontrol
      • cd ~/dnscontrol

      Nota: En este tutorial, nos enfocaremos en la configuración inicial de DNSControl. Sin embargo, para el uso en producción se le recomienda almacenar su configuración de DNSControl en un sistema de control de versiones (VCS) como Git. Entre las ventajas de esto se incluyen un control de versiones completo, la integración con CI/CD para pruebas y las implementaciones de versiones anteriores sin problemas.

      Si planea usar DNSControl para escribir archivos de zona BIND, también deberá crear el directorio zones:

      Los archivos de zona BIND son una alternativa básica estándar para almacenar zonas y registros de DNS en formato de texto simple. Originalmente se utilizaron para el software del servidor DNS BIND, pero ahora se han adoptado ampliamente como el método estándar para almacenar zonas de DNS. Los archivos de zona BIND producidos por DNSControl son útiles si quiere importarlos a un servidor DNS personalizado o con alojamiento propio, o bien para fines de auditoría.

      Sin embargo, si solo quiere usar DNSControl para aplicar cambios de DNS a un proveedor administrado, no se necesitará el directorio zones.

      A continuación, deberá configurar el archivo creds.json, lo cual permitirá la autenticación de DNSControl en su proveedor DNS y la aplicación de cambios. El formato de creds.json varia ligeramente dependiendo del proveedor DNS que utilice. Consulte la lista de proveedores de servicio en la documentación oficial de DNSControl para hallar la configuración de su propio proveedor.

      Cree el archivo creds.json en el directorio ~/dnscontrol:

      • cd ~/dnscontrol
      • nano creds.json

      Añada la configuración de muestra creds.json para su proveedor DNS al archivo. Si utiliza DigitalOcean como su proveedor DNS, puede recurrir a lo siguiente:

      ~/dnscontrol/creds.json

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

      En este archivo se indican a DNSControl los proveedores de DNS con los que desea establecer conexión.

      Deberá proporcionar alguna forma de autenticación para proveedor DNS. Normalmente, se utiliza una clave de API o un token de OAuth, pero algunos proveedores requieren información adicional, como se detalla en la lista de proveedores de servicio de la documentación oficial de DNSControl.

      Advertencia: Este token brindará acceso a la cuenta de su proveedor DNS, por lo que debe protegerlo como si se tratara de una contraseña. También compruebe que, si utiliza un sistema de control de versiones, el archivo que contenga el token esté excluido (por ejemplo, con .gitignore), o cifrado de forma segura de alguna manera.

      Si utiliza DigitalOcean como su proveedor DNS, puede usar el token de 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 diferentes nombres de dominio o zonas de DNS delegadas, puede definir todos estos en el mismo archivo creds.json.

      Con esto, estableció los directorios de configuración inicial de DNSControl y configuró creds.json para permitir que DNSControl se autentique en su proveedor DNS y realice cambios. A continuación, creará la configuración para sus zonas de DNS.

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

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

      dnsconfig.js es el archivo de configuración de DNS principal para DNSControl. En este archivo, las zonas de DNS y sus registros correspondientes se definen usando sintaxis de JavaScript. Esto se conoce como DS o lenguaje específico de dominio. En la página de DSL en JavaScript de la documentación oficial de DNSControl hay más información disponible.

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

      • cd ~/dnscontrol
      • nano dnsconfig.js

      Luego, añada la siguiente configuración de ejemplo 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')
      );
      

      Mediante este archivo de ejemplo se define un nombre de dominio o una zona de DNS en un proveedor determinado, que en este caso es your_domain alojado en DigitalOcean. También se define un ejemplo de registro A para la zona root (@) con orientación hacia la dirección IPv4 del servidor en el que aloja su dominio y sitio web.

      Existen tres funciones principales que conforman un archivo básico de configuración de DNSControl

      • NewRegistrar(name, type, metadata): define el registrador de dominio para su nombre de dominio. DNSControl puede utilizar esto para realizar los cambios necesarios, como la modificación de los servidores de nombres autoritativos. Si solo quiere usar DNSControl para administrar sus zonas de DNS, generalmente puede dejar el valor NONE.

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

      • D(name, registrar, modifiers): define un nombre de dominio o una zona de DNS delegada para DNSControl se encargue de la administración, como también los registros de DNS presentes en la zona.

      Deberá configurar NewRegistrar(), NewDnsProvider() y D() respectivamente usando la lista de proveedores de servicio de la documentación oficial de DNSControl.

      Si utiliza DigitalOcean como su proveedor DNS y solo necesita poder realizar cambios en el DNS (en lugar de servidores de nombres autoritativos también), el ejemplo del bloque de código anterior ya es válido.

      Una vez que termine, guarde y cierre el archivo.

      En este paso, creó un archivo de configuración de DNS para DNSControl, con los proveedores correspondientes definidos. A continuación, completará el archivo con algunos registros de DNS útiles.

      Paso 4: Completar su archivo de configuración de DNS

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

      A diferencia de los archivos de zona BIND tradicionales, en los cuales los registros DNS están escritos en un formato básico, línea por línea, los registros DNS dentro de DNSControl se definen como un parámetro de función (modificador de dominio) en la función D(), como se muestra en forma resumida en el paso 3.

      Existe un modificador de dominio para cada uno de los tipos de registro de DNS estándares, entre los que se incluyen A, AAAA, MX, TXT, NS y CAA. Se encuentra disponible una lista completa de los tipos de registro en la sección Modificadores de dominios de la documentación de DNSControl.

      También se encuentran disponibles los modificadores para los registros individuales (modificadores de registros). Actualmente, se utilizan principalmente para configurar el TTL (período de vida) de registros individuales. Se encuentra disponible una lista completa de los modificadores de registros en la sección Modificadores de registros de la documentación de DNSControl. Los modificadores de registros son opcionales y en la mayoría de los casos de uso básicos pueden quedar excluidos.

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

      • Registros A:

        • Propósito: apuntar a una dirección IPv4.
        • Sintaxis: A('name', 'address', optional record modifiers).
        • Ejemplo: A('@', 'your-server-ipv4-address', TTL(30)).
      • Registros AAAA:

        • Propósito: apuntar a una dirección IPv6.
        • Sintaxis: AAAA('name', 'address', optional record modifiers).
        • Ejemplo: AAAA('@', 'your-server-ipv6-address') (se omitió el modificador de registros, por lo que se utilizará el TTL predeterminado).
      • Registros CNAME:

        • Propósito: convertir su dominio o subdominio en un alias de otro.
        • Sintaxis: CNAME('name', 'target', optional record modifiers).
        • Ejemplo: CNAME('subdomain1', 'example.org.') (tenga en cuenta que se debe incluir un . al final si hay algún punto en el valor).
      • Registros MX:

        • Propósito: dirigir el correo electrónico hacía direcciones o servidores específicos.
        • Sintaxis: MX('name', 'priority', 'target', optional record modifiers).
        • Ejemplo: MX('@', 10, 'mail.example.net') (tenga en cuenta que se debe incluir un . “al final si hay algún punto en el valor).
      • Registros de TXT:

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

        • Propósito: restringir las entidades de certificación (CA) que pueden emitir certificados TLS para su dominio y subdominios, y presentar informes sobre ellas.
        • Sintaxis: CAA('name', 'tag', 'value', optional record modifiers).
        • Ejemplo: CAA('@', 'issue', 'letsencrypt.org').

      Con el fin de comenzar a añadir registros de DNS para su dominio o zona de DNS delegada, edite su archivo de configuración DNS:

      A continuación, puede comenzar a completar los parámetros para la función D() existente usando 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.

      A modo de referencia, el bloque de código aquí contiene una configuración de ejemplo completa para una configuración básica e inicial de un DNS:

      ~/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 inicial de DNS, guarde y cierre el archivo.

      Durante este paso, creó el archivo de configuración de DNS inicial que contiene sus registros de DNS. A continuación, probará la configuración y la implementará.

      Paso 5: Probar e implementar su 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 y proveedor DNS activos.

      Primero, posiciónese en el directorio dnscontrol:

      Luego, utilice la función preview de DNSControl para verificar la sintaxis de su archivo y mostrar los cambios que se realizarán (sin efectuarlos realmente):

      Si la sintaxis de su archivo de configuración de DNS es correcta, en DNSControl se mostrará un resumen de los cambios que se realizarán. Esto debe tener un aspecto 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 corrections Done. 8 corrections.

      Si ve una advertencia de error en el resultado, DNSControl proporcionará detalles sobre el tipo de error y el punto en el que se encuentra dentro de su archivo.

      Advertencia: A través del siguiente comando se harán cambios en tiempo real en sus registros DNS y posiblemente en otras configuraciones. Asegúrese de estar preparado para esto; incluya una copia de seguridad de su configuración de DNS existente y verifique que disponga de los medios necesarios para revertir los cambios si es necesario.

      Por último, puede aplicar los cambios a su proveedor DNS activo:

      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=300 SUCCESS! #2: CREATE A your_domain your-server-ipv4-address ttl=300 SUCCESS! #3: CREATE AAAA your_domain your-server-ipv6-address ttl=300 SUCCESS! #4: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300 SUCCESS! #5: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300 SUCCESS! #6: CREATE A www.your_domain your-server-ipv4-address ttl=300 SUCCESS! #7: CREATE A mail.your_domain your-server-ipv4-address ttl=300 SUCCESS! #8: CREATE MX your_domain 10 mail.your_domain. ttl=300 SUCCESS! ----- Registrar: none...0 corrections Done. 8 corrections.

      Ahora, si revisa las configuraciones de DNS para su dominio en el panel de control de DigitalOcean, podrá visualizar los cambios.

      Captura de pantalla del panel de control de DigitalOcean; se muestran algunos de los cambios de DNS realizados en DNSControl.

      También puede verificar la creación de registros ejecutando una solicitud de DNS para su dominio o zona delegando usando dig.

      Si no instaló dig, deberá instalar el paquete dnsutils:

      • sudo apt install dnsutils

      Una vez que instale dig, podrá utilizarlo con el propósito de realizar una búsqueda de DNS para su dominio. Verá que los registros se actualizaron de forma correspondiente:

      Verá un resultado que muestra la dirección IP y los registros de DNS pertinentes de su zona implementada usando DNSControl. Los registros DNS pueden tardar tiempo en propagarse, por lo cual es posible que necesite esperar y ejecutar este comando de nuevo.

      En este último paso, realizó una verificación de sintaxis local del archivo de configuración de DNS, luego lo implementó en su proveedor DNS activo y verificó mediante pruebas que los cambios se realizaran correctamente.

      Conclusión

      A lo largo de este artículo, configuró DNSControl e implementó una configuración de DNS en un proveedor activo. Ahora podrá administrar y probar sus cambios de configuración de DNS en un entorno seguro y sin conexión antes de implementarlos en la producción.

      Si desea profundizar en este tema, DNSControl está diseñado para integrarse en su proceso de CI/CD, lo que le permite realizar pruebas exhaustivas y tener más control sobre su implementación en la producción. También podría considerar la integración de DNSControl en sus procesos de compilación e implementación de infraestructuras, lo que le permitirá implementar servidores y agregarlos al DNS de manera completamente automática.

      Si desea dar un paso más con DNSControl, en los siguientes artículos de DigitalOcean se ofrecen algunos pasos interesantes que puede seguir para contribuir a la integración de DNSControl en sus flujos de trabajo de administración de cambios e implementación de infraestructura:



      Source link

      Развертывание и управление DNS с использованием DNSControl в Debian 10


      Автор выбрал Electronic Frontier Foundation Inc для получения пожертвований в рамках программы Write for DOnations.

      Введение

      DNSControl — это инструмент, построенный по принципу «инфраструктура как код», который поддерживает развертывание и управление зонами DNS с использованием стандартных принципов разработки программного обеспечения, включая контроль версий, тестирование и автоматизированное развертывание. Инструмент DNSControl разработан Stack Exchange и написан на Go.

      Использование DNSControl помогает избавиться от многих сложностей ручного управления DNS, поскольку файлы зон хранятся в программируемом формате. Инструмент позволяет одновременно развертывать зоны для нескольких поставщиков DNS, определять ошибки синтаксиса и автоматически извлекать конфигурации DNS, за счет чего снижается риск человеческой ошибки. Также DNSControl часто используется для быстрого переноса DNS на другого провайдера; например, в случае DDoS-атаки или выхода системы из строя.

      В этом обучающем руководстве мы научимся устанавливать и настраивать DNSControl, создадим базовую конфигурацию DNS и начнем развертывание записей DNS на рабочем провайдере. Для этого обучающего руководства мы используем DigitalOcean в качестве примера провайдера DNS. Если вы хотите использовать другого провайдера, настройки будут выглядеть очень похоже. После завершения работы вы сможете управлять своей конфигурацией DNS и тестировать ее в безопасной среде, отключенной от сети, а затем автоматически развертывать в производственной среде.

      Предварительные требования

      Для прохождения этого обучающего руководства вам потребуется следующее:

      • Один сервер Debian 10, настроенный в соответствии с указаниями по начальной настройке сервера Debian 10, включая пользователя sudo без привилегий root и активированный брандмауэр для блокировки ненужных портов. your-server-ipv4-address обозначает IP-адрес сервера, где вы размещаете свой сайт или домен. your-server-ipv6-address обозначает адрес IPv6 сервера, где вы размещаете свой сайт или домен.
      • Полностью зарегистрированное доменное имя с хостингом DNS у поддерживаемого провайдера. В этом обучающем руководстве мы используем доменное имя your_domain и DigitalOcean как провайдера услуг.
      • Ключ DigitalOcean API (персональный токен доступа) с разрешениями чтения и записи. Его создание описано в материале Создание персонального токена доступа.

      Подготовив все вышеперечисленное, войдите на сервер без привилегий root, чтобы начать подготовку.

      Шаг 1 — Установка DNSControl

      Инструмент DNSControl написан на языке Go, и поэтому вначале вам нужно установить Go на свой сервер и задать GOPATH.

      Go доступен в репозиториях программного обеспечения Debian по умолчанию, и поэтому его можно установить с помощью стандартных инструментов управления пакетами.

      Также вам нужно будет установить Git, поскольку это требуется, чтобы дать Go возможность загрузки и установки программного обеспечения DNSControl из репозитория на GitHub.

      Для начала мы обновим указатель локальных пакетов, чтобы отразить последние изменения на предыдущих уровнях:

      Затем мы установим пакеты golang-go и git:

      • sudo apt install golang-go git

      После подтверждения установки apt выполнит загрузку и установку Go и Git, а также всех требуемых зависимостей.

      Далее вы настроите требуемые переменные среды path для Go. Дополнительную информацию можно получить в обучающем материале по GOPATH. Для начала отредактируем файл ~/.profile:

      Добавим в конец файла следующие строки:

      ~/.profile

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

      После добавления этих строк в конец файла мы сохраним и закроем его. Затем мы перезагрузим профиль, для чего выйдем из системы и снова войдем в нее или снова укажем файл в качестве источника:

      Мы установили и настроили Go и теперь можем перейти к установке DNSControl.

      Команду go get можно использовать для доставки копии кода, его автоматической компиляции и установки в директорию Go:

      • go get github.com/StackExchange/dnscontrol

      После этого мы можем проверить установленную версию и убедиться, что все работает правильно:

      Экран результатов должен выглядеть примерно следующим образом:

      Output

      dnscontrol 2.9-dev

      Если выводится сообщение об ошибке dnscontrol: command not found, необходимо еще раз проверить настройки путей Go.

      Мы установили DNSControl и теперь можем создать директорию конфигурации и подключить DNSControl к провайдеру DNS, чтобы дать инструменту возможность вносить изменения в ваши записи DNS.

      Шаг 2 — Настройка DNSControl

      На этом шаге мы создадим требуемые директории конфигурации DNSControl и подключим их к нашему провайдеру DNS, чтобы начать вносить изменения в записи DNS в реальном времени.

      Вначале нам нужно создать новую директорию для хранения конфигурации DNSControl и перейти в нее:

      • mkdir ~/dnscontrol
      • cd ~/dnscontrol

      Примечание. В этом обучающем модуле мы рассматриваем начальную настройку DNSControl, но для использования в производственной среде рекомендуется хранить конфигурацию DNSControl в системе контроля версий (VCS), такой как Git. Это дает преимущества полного контроля версий, интеграции с CI/CD для тестирования, удобства откатов при развертывании и т. д.

      Если вы планируете использовать DNSControl для записи файлов зоны BIND, вам также следует создать директорию zones:

      Файлы зоны BIND представляют собой чистый стандартизированный метод сохранения зон и записей DNS в простом текстовом формате. Они первоначально использовались для программного обеспечения сервера BIND DNS, однако сейчас они широко используются в качестве стандартного метода хранения зон DNS. Файлы зоны BIND, предоставляемые DNSControl, очень полезны, если их нужно импортировать в персонализированный или собственный сервер DNS, а также для целей аудита.

      Если вы хотите просто использовать DNSControl для передачи изменений DNS управляемому провайдеру, директория zones не потребуется.

      Далее требуется настроить файл creds.json, что позволит DNSControl выполнить аутентификацию вашего провайдера DNS и внести изменения. Формат файла creds.json может немного отличаться в зависимости от используемого провайдера DNS. Ознакомьтесь со списком провайдеров в официальной документации DNSControl, чтобы найти конфигурацию для вашего провайдера.

      Создайте файл creds.json в директории ~/dnscontrol:

      • cd ~/dnscontrol
      • nano creds.json

      Добавьте в файл образец конфигурации creds.json для вашего провайдера DNS. Если вы используете DigitalOcean в качестве своего провайдера DNS, вы можете использовать следующее:

      ~/dnscontrol/creds.json

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

      Этот файл сообщает DNSControl, к каким провайдерам DNS нужно подключаться.

      Необходимо указать форму аутентификации для провайдера DNS. Обычно это ключ API или токен OAuth, однако для некоторых провайдеров требуется дополнительная информация, как описано в списке провайдеров в официальной документации DNSControl.

      Предупреждение. Этот токен предоставляет доступ к учетной записи провайдера DNS, так что его следует защитить паролем. Также необходимо убедиться, что если вы используете систему контроля версий, файл с токеном исключен (например, с помощью .gitignore) или зашифрован.

      Если в качестве провайдера DNS используется DigitalOcean, можно использовать требуемый токен OAuth в параметрах учетной записи DigitalOcean, сгенерированных при выполнении предварительных требований.

      Если вы используете нескольких провайдеров DNS, например для разных доменных имен или делегированных зон DNS, вы можете определить их в том же самом файле creds.json.

      Мы выполнили настройку первоначальных директорий конфигурации DNSControl и настроили файл creds.json так, чтобы DNSControl мог проходить аутентификацию у провайдера DNS и вносить изменения. Теперь мы создадим конфигурацию для наших зон DNS.

      Шаг 3 — Создание файла конфигурации DNS

      На этом шаге мы создадим начальный файл конфигурации DNS, который будет содержать записи DNS для вашего доменного имени или делегированной зоны DNS.

      dnsconfig.js — основной файл конфигурации DNS для DNSControl. В этом файле зоны DNS и соответствующие им записи определяются с использованием синтаксиса JavaScript. Этот синтаксис называется DSL или предметно-ориентированный язык. Дополнительную информацию можно найти на странице JavaScript DSL в официальной документации по DNSControl.

      Вначале создадим файл конфигурации DNS в директории ~/dnscontrol:

      • cd ~/dnscontrol
      • nano dnsconfig.js

      Затем добавим в файл следующий образец конфигурации:

      ~/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')
      );
      

      В файле образца определяется доменное имя или зона DNS определенного провайдера. В данном случае это домен your_domain на хостинге DigitalOcean. Пример записи A также определен для зоны root (@) и указывает на адрес IPv4 сервера, где размещен ваш домен или сайт.

      Базовый файл конфигурации DNSControl состоит из трех основных функций:

      • NewRegistrar(имя, тип, метаданные)​​​​: определяет регистратора домена для доменного имени. DNSControl может использовать эту функцию для внесения требуемых изменений, в частности для модификации авторитетных серверов имен. Если вы хотите использовать DNSControl только для управления зонами DNS, их можно оставить как NONE.

      • NewDnsProvider(имя, тип, метаданные)​​: определяет провайдера DNS для доменного имени или делегированной зоны. Здесь DNSControl применяет вносимые нами изменения DNS.

      • D(имя, регистратор, модификаторы): определяет доменное имя или делегируемую зону DNS для управления DNSControl, а также присутствующие в зоне записи DNS.

      Мы должны настроить NewRegistrar(), NewDnsProvider() и D() соответствующим образом, используя список провайдеров в официальной документации по DNSControl.

      Если в качестве провайдера DNS используется DigitalOcean и нам требуется только вносить изменения DNS (а не авторитетных серверов имен), образцы из предыдущего блока кода подойдут для наших целей.

      После завершения следует сохранить и закрыть файл.

      На этом шаге мы настроили файл конфигурации DNS для DNSControl с определением соответствующих провайдеров. Далее мы заполним файл полезными записями DNS.

      Шаг 4 — Заполнение файла конфигурации DNS

      Далее мы можем заполнить файл конфигурации DNS полезными записями DNS для нашего сайта или сервиса, используя синтаксис DNSControl.

      В отличие от традиционных файлов зоны BIND, где записи DNS имеют формат построчных необработанных данных, в DNSControl записи DNS определяются как параметр функции D() (модификатор домена), как мы вкратце показали на шаге 3.

      Модификатор домена существует для каждого стандартного типа записей DNS, включая A, AAAA, MX, TXT, NS, CAA и т. д. Полный список доступных типов записей можно найти в разделе Модификаторы домена в документации по DNSControl.

      Также доступны модификаторы отдельных записей (модификаторы записей). Они в основном используются для настройки TTL (времени существования) для отдельных записей. Полный список доступных модификаторов записей можно найти в разделе Модификаторы записей документации по DNSControl. Модификаторы записей необязательны для использования, в большинстве простых случаев их можно опускать.

      Синтаксис настройки записей DNS немного отличается для каждого типа записей. Далее приведены несколько примеров наиболее распространенных типов записей:

      • Записи A:

        • Назначение: указывают на адрес IPv4.
        • Синтаксис: A('name', 'address', необязательные модификаторы записи)
        • Пример: A('@', 'your-server-ipv4-address', TTL(30))
      • Записи AAAA:

        • Назначение: указывают на адрес IPv6.
        • Синтаксис: AAAA('name', 'address', необязательные модификаторы записи)
        • Пример: AAAA('@', 'your-server-ipv6-address') (модификатор записи опущен, поэтому используется TTL по умолчанию)
      • Записи CNAME:

        • Назначение: делают домен или субдомен псевдонимом другого домена или субдомена.
        • Синтаксис: CNAME('name', 'target', необязательные модификаторы записи)
        • Пример: CNAME('subdomain1', 'example.org.') (обратите внимание, что если значение содержит точку, завершающий символ . обязательно должен присутствовать в конце)
      • Записи MX:

        • Назначение: направление электронной почты на определенные серверы или адреса.
        • Синтаксис: MX('name', 'priority', 'target', необязательные модификаторы записи)
        • Пример: MX('@', 10, 'mail.example.net') (обратите внимание, что если значение содержит точку, завершающий символ . обязательно должен присутствовать в конце)
      • Записи TXT:

        • Назначение: добавление произвольного обычного текста, часто используется для конфигураций без собственного выделенного типа записи.
        • Синтаксис: TXT('name', 'content', необязательные модификаторы записи)
        • Пример: TXT('@', 'Это запись TXT. ')
      • Записи CAA:

        • Назначение: ограничение и отчет о центрах сертификации (СА), которые могут выпускать сертификаты TLS для доменов или субдоменов.
        • Синтаксис: CAA('name', 'tag', 'value', необязательные модификаторы записи)
        • Пример: CAA('@', 'issue', 'letsencrypt.org')

      Чтобы начать добавлять записи DNS для нашего домена или делегированной зоны DNS, нам нужно отредактировать файл конфигурации DNS:

      Далее мы можем начать указывать параметры для существующей функции D(), используя синтаксис,описанный в предыдущем списке и в разделе Модификаторы доменов официальной документации DNSControl. Для разделения записей должна использоваться запятая (,).

      Приведенный здесь блок кода содержит полный образец базовой конфигурации DNS, предназначенный для справочных целей:

      ~/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;')
      );
      

      После завершения начальной настройки DNS следует сохранить и закрыть файл.

      На этом шаге мы можем настроить начальный файл конфигурации DNS, содержащий наши записи DNS. Далее нам нужно будет протестировать конфигурацию и развернуть ее.

      Шаг 5 — Тестирование и развертывание конфигурации DNS

      На этом шаге мы проведем проверку локального синтаксиса нашей конфигурации DNS, а затем внесем изменения на рабочий сервер/провайдер DNS.

      Вначале мы перейдем в директорию dnscontrol:

      Затем мы используем функцию preview в DNSControl для проверки синтаксиса файла и вывода вносимых изменений (без их фактического внесения):

      Если файл конфигурации DNS имеет правильный синтаксис, DNSControl выведет обзор изменений, которые будут произведены. Результат должен выглядеть примерно так:

      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 corrections Done. 8 corrections.

      Если вы увидите предупреждение об ошибке в составе результатов, DNSControl даст дополнительные данные о сущности ошибки и ее расположении в файле.

      Предупреждение. Следующая команда вносит изменения в рабочие записи DNS и возможно в другие параметры. Необходимо убедиться, что мы готовы к этому. В частности, следует сделать резервную копию существующий конфигурации DNS на случай, если потребуется произвести откат.

      В заключение мы можем передать изменения на рабочий провайдер DNS:

      Результат будет выглядеть примерно так:

      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=300 SUCCESS! #2: CREATE A your_domain your-server-ipv4-address ttl=300 SUCCESS! #3: CREATE AAAA your_domain your-server-ipv6-address ttl=300 SUCCESS! #4: CREATE AAAA www.your_domain your-server-ipv6-address ttl=300 SUCCESS! #5: CREATE AAAA mail.your_domain your-server-ipv6-address ttl=300 SUCCESS! #6: CREATE A www.your_domain your-server-ipv4-address ttl=300 SUCCESS! #7: CREATE A mail.your_domain your-server-ipv4-address ttl=300 SUCCESS! #8: CREATE MX your_domain 10 mail.your_domain. ttl=300 SUCCESS! ----- Registrar: none...0 corrections Done. 8 corrections.

      Если теперь мы проверим параметры DNS нашего домена на панели управления DigitalOcean, мы увидим изменения.

      Снимок экрана панели управления DigitalOcean, показывающий некоторые изменения DNS, которые были внесены DNSControl.

      Также мы можем проверить создание записи, отправив запрос DNS для нашего домена или делегированной зоны с помощью команды dig.

      Если команда dig не установлена, необходимо установить пакет dnsutils:

      • sudo apt install dnsutils

      После установки команды dig мы сможем использовать ее для запроса DNS нашего домена. Мы увидим, что записи обновлены соответствующим образом:

      В результатах выводится IP-адрес и запись DNS из вашей зоны, которая была развернута с помощью DNSControl. Распространение записей DNS может занять некоторое время, поэтому можно подождать и запустить команду чуть позже.

      На этом заключительном шаге мы выполнили проверку локального синтаксиса файла конфигурации DNS, развернули его на рабочем провайдере DNS и убедились, что изменения были внесены успешно.

      Заключение

      В этом обучающем руководстве мы выполнили настройку DNSControl и развертывание конфигурации DNS на рабочем провайдере. Теперь мы можем управлять изменениями конфигурации DNS и тестировать их в безопасной автономной среде, прежде чем внедрять их в производственную среду.

      Если вы хотите узнать об этом больше, DNSControl предусматривает интеграцию с конвейером CI/CD, что позволяет проводить детальные испытания и обеспечивает дополнительный контроль над развертыванием в производственной среде. Также можно интегрировать DNSControl в процессы сборки и развертывания инфраструктуры, что позволит развертывать серверы и добавлять их в службу DNS в полностью автоматическом режиме.

      Если вас интересует дополнительная информация о DNSControl, следующие материалы DigitalOcean содержат описание дальнейших шагов по интеграции DNSControl в рабочие процессы управления изменениями и развертывания инфраструктуры:



      Source link