One place for hosting & domains

      OctoDNS

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


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

      Introdução

      O OctoDNS é uma ferramenta de infraestrutura como código que permite que você implante e gerencie suas zonas de DNS usando princípios de desenvolvimento de software padrão, incluindo o controle, teste e implantação automatizada de versões. O OctoDNS foi criado pelo GitHub e está escrito em Python.

      O OctoDNS elimina muitas das armadilhas do gerenciamento manual de DNS, já que os arquivos da zona ficam armazenados em um formato estruturado (YAML). Isso permite que você implante zonas para vários provedores de DNS simultaneamente, identifique erros de sintaxe e envie a configuração do DNS automaticamente, reduzindo o risco de erro humano. Outro uso comum do OctoDNS é o de sincronizar sua configuração do DNS entre diferentes provedores, como um sistema de teste e de produção, ou entre ambientes ativos e de failover.

      O OctoDNS é parecido com o DNSControl, que é uma ferramenta equivalente criada pelo Stack Exchange e escrita em Go. Diferente do OctoDNS, o DNSControl utiliza uma linguagem de configuração baseada em JavaScript para definir as zonas de DNS, o que permite que você utilize recursos de programação avançados, tais como os loops para especificar vários registros semelhantes dentro da mesma zona. O artigo Como implantar e gerenciar seu DNS usando o DNSControl no Debian 10 aborda a instalação e configuração básicas do DNSControl.

      Neste tutorial, você instalará e configurará o OctoDNS, criará uma configuração básica do DNS e começará a implantar os registros do DNS em um provedor ativo. Como parte deste tutorial, usaremos a DigitalOcean como a provedora de DNS do exemplo. Se quiser usar um provedor diferente, a configuração é bastante parecida. Quando tiver concluído a configuração, você conseguirá gerenciar e testar sua configuração de DNS em um ambiente seguro e off-line e, então, poderá implantá-lo na produção.

      Pré-requisitos

      Antes de iniciar este guia, será necessário o seguinte:

      • Um servidor Debian 10 configurado, de acordo com o artigo Configuração Inicial do servidor com o Debian 10, incluindo um usuário não raiz do comando sudo e um firewall habilitado para bloquear portas não essenciais. O your-server-ipv4-address e o your-server-ipv6-address referem-se ao endereço IP do servidor onde você estiver hospedando seu site ou domínio.
      • Um nome de domínio totalmente 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ços.
      • Uma chave de API para a DigitalOcean (Token de acesso pessoal), com permissões de leitura e gravação. Para criar um chave, acesse a página do artigo sobre 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 — Instalando o OctoDNS

      O OctoDNS é distribuído como um pacote pip (sistema de gerenciamento de pacotes) em Python e funciona em um Ambiente Virtual Python (virtualenv). Dessa maneira, você iniciará este passo instalando os pacotes necessários para isso. Um virtualenv é um ambiente Python isolado que pode ter suas próprias bibliotecas e configuração, separado da instalação de Python do sistema principal. O Python e o virtualenv estão disponíveis dentro dos repositórios padrão de software do Debian, possibilitando que eles sejam instalados com as ferramentas convencionais de gerenciamento de pacotes.

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

      Então, instale os pacotes python e virtualenv:

      • sudo apt install python virtualenv

      Após confirmar a instalação, a ferramenta apt irá baixar e instalar o Python, o virtualenv e todas as suas dependências necessárias.

      Em seguida, você criará os diretórios necessários para o OctoDNS, onde sua configuração do DNS e do programa serão armazenados. Comece criando os diretórios ~/octodns e ~/octodns/config:

      • mkdir ~/octodns ~/octodns/config

      Agora, vá para ~/octodns:

      Em seguida, você precisará criar o Ambiente Virtual em Python — um ambiente Python isolado com suas próprias bibliotecas e configuração no qual irá executar o OctoDNS:

      Ative seu ambiente com o seguinte comando:

      Isso irá gerar algo parecido com o seguinte:

      Output

      Running virtualenv with interpreter /usr/bin/python2 New python executable in /home/user/octodns/env/bin/python2 Also creating executable in /home/user/octodns/env/bin/python Installing setuptools, pkg_resources, pip, wheel...done.

      Agora, seu prompt de shell no Bash também será prefixado com o nome do ambiente virtual. Isso mostra que você está operando dentro do virtualenv no momento:

      (env) user@digitalocean:~/octodns$
      

      Se quiser sair do virtualenv, utilize o comando deactivate a qualquer momento. No entanto, para continuar com este tutorial, você deve permanecer em seu virtualenv.

      Agora que você instalou e configurou o Python e o virtualenv, instale o OctoDNS. O OctoDNS é distribuído como um pacote pip do Python, que é a ferramenta padrão de gerenciamento de pacotes para pacotes e bibliotecas do Python.

      Você pode instalar o pacote pip do OctoDNS usando o seguinte comando dentro do seu virtualenv:

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

      Sua saída será semelhante à seguinte:

      Output

      octoDNS 0.9.9

      Caso veja um erro octodns-sync: command not found, verifique novamente se você ainda está dentro do seu virtualenv.

      Agora que você instalou o OctoDNS, você pode criar os arquivos de configuração necessários para conectar o OctoDNS ao seu provedor de DNS para permitir que ele faça alterações nos seus registros de DNS.

      Passo 2 — Configurando o OctoDNS

      Neste passo, você criará os arquivos de configuração necessários para o OctoDNS e conectará ele ao seu provedor DNS, de modo que ele possa começar a fazer alterações em tempo real nos seus registros de DNS.

      Nota: este tutorial se concentrará na configuração inicial do OctoDNS; no entanto, para o uso na produção, é recomendável armazenar sua configuração do OctoDNS 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.

      Primeiro, você precisa configurar o arquivo config.yaml, o qual define as zonas de DNS a serem gerenciadas pelo OctoDNS e permite que ele autentique seu provedor de DNS e faça alterações.

      Dependendo do provedor de DNS que você estiver usando o formado do arquivo config.yaml será ligeiramente diferente. Para encontrar a configuração para o seu provedor, consulte a Lista de provedores compatíveis na documentação oficial do OctoDNS. Ao visualizar esse hiperlink, os detalhes da configuração serão apresentados como comentários de código no código Python em si, que está vinculado na coluna ‘Provedor’ da tabela. Assim que tiver encontrado o código Python para o seu provedor, como o cloudflare.py ou o route53.py, o comentário de código relevante poderá ser encontrado diretamente sob a class ProviderNameProvider. Por exemplo:

      Excerpt of octodns/provider/route53.py

      class Route53Provider(BaseProvider):
        '''
        AWS Route53 Provider
        route53:
            class: octodns.provider.route53.Route53Provider
            # The AWS access key id
            access_key_id:
            # The AWS secret access key
            secret_access_key:
            # The AWS session token (optional)
            # Only needed if using temporary security credentials
            session_token:
      

      Vá para o diretório ~/octodns/config:

      Então, crie e abra o config.yaml para a edição:

      Adicione a configuração de exemplo do arquivo config.yaml do seu provedor de DNS ao arquivo. Se estiver usando a DigitalOcean como sua provedora de DNS, você pode usar o seguinte:

      ~/octodns/config/config.yaml

      ---
      providers:
        config:
          class: octodns.provider.yaml.YamlProvider
          directory: ./config
          default_ttl: 300
          enforce_order: True
        digitalocean:
          class: octodns.provider.digitalocean.DigitalOceanProvider
          token: your-digitalocean-oauth-token
      
      zones:
        your-domain.:
          sources:
            - config
          targets:
            - digitalocean
      

      Esse arquivo diz ao OctoDNS a quais provedores de DNS você quer que ele se conecte e quais zonas do DNS ele deve gerenciar em relação a esses provedores.

      Você precisará fornecer alguma forma de autenticação para seu provedor de DNS. Normalmente, trata-se de uma chave de API ou de token do OAth.

      Se não quiser armazenar seu token de acesso em texto simples no arquivo de configuração, em vez disso, você pode enviá-lo como uma variável de ambiente quando o programa for executado. Para fazer isso, você deve usar a seguinte linha de token: em vez de no arquivo config.yaml:

      ~/octodns/config/config.yaml

      token: env/DIGITALOCEAN_OAUTH_TOKEN
      

      Em seguida, antes de executar o OctoDNS, defina a variável de ambiente relevante para o seu token de acesso e o OctoDNS o lerá a partir daí quando for executado:

      • export DIGITALOCEAN_OAUTH_TOKEN=your-digitalocean-oauth-token

      Aviso: este token dará acesso à sua conta do provedor de DNS; portanto, você deve protegê-lo, assim como 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 a DigitalOcean como sua provedora de DNS, você pode usar o token do OAuth necessário - gerado como parte dos pré-requisitos - em suas configurações de conta da DigitalOcean.

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

      Você configurou o arquivo de configuração inicial do OctoDNS para permitir que o programa autentique o 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, que terá os registros de DNS para seu nome de domínio ou zona de DNS delegada.

      Cada zona de DNS que você quiser gerenciar usando o OctoDNS tem seu próprio arquivo, por exemplo your-domain.yaml​​​​. Nesse arquivo, os registros de DNS para a zona são definidos com o YAML.

      Para começar, vá para o diretório ~/octodns/config:

      Então, crie e abra o your-domain.yaml para a edição:

      Adicione a seguinte configuração de exemplo ao arquivo:

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      

      Esse arquivo de exemplo define uma zona de DNS para o your-domain com dois registros do tipo A, apontando para o endereço IPv4 em que você está hospedando seu domínio ou site. Um registro do tipo A é para o domínio raiz (por exemplo, your-domain) e o outro registro A é para o subdomínio www (por exemplo, www.your-domain).

      Assim que terminar, salve e feche o arquivo.

      Você configurou um arquivo básico de configuração de zona de DNS para o OctoDNS, com dois registros tipo A básicos apontando para o endereço IPv4 do seu domínio ou site. Em seguida, você irá expandir arquivo com alguns registros úteis de DNS.

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

      Em seguida, você pode preencher o arquivo de configuração do DNS com um conjunto prático de registros de DNS para o seu site ou serviço, usando a linguagem de configuração estruturada YAML.

      Diferente dos arquivos da zona BIND tradicionais, onde os registros DNS estão escritos em um formato bruto, linha a linha, os registros de DNS dentro do OctoDNS são definidos como chaves e subchaves em YAML, com um número de valores associados, como mostrado rapidamente no Passo 3.

      Normalmente, a chave de nível superior é a 'name', que é essencialmente, o identificador do registro. www, subdomain1 e mail são todos exemplos do DNS 'name'. No OctoDNS, existem dois nomes para uso especial, que são '', para o registro raiz (geralmente referido como @) e '*', para registros curinga. O type é um valor necessário de cada chave (registro de DNS). Isso define qual tipo de registro de DNS você está definindo dentro daquela chave de nível superior em YAML. Existe um type para cada um dos tipos padrão de registro de DNS, incluindo A, AAAA, MX, TXT, NS, CNAME e assim por diante. Na seção de Registros da documentação do OctoDNS, você encontra uma lista completa dos tipos de registro disponíveis.

      Os valores dos seus registros de DNS são definidos diretamente - como valores para as chaves de nível superior (se tiver apenas um valor), ou como uma lista (se tiver vários valores como, por exemplo, múltiplos endereços IP ou MX).

      Por exemplo, para definir um único valor, você poderia usar a seguinte configuração:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        value: 203.0.113.1
      

      Como alternativa, para definir vários valores para um único registro:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        values:
        - 203.0.113.1
        - 203.0.113.2
      

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

      Registros do tipo A:

      Objetivo: apontar para um endereço IPv4.

      Sintaxe:

      'name':
        type: A
        value: ipv4-address
      

      Exemplo:

      'www':
        type: A
        value: your-server-ipv4-address
      

      Registros do tipo AAAA:

      Objetivo: apontar para um endereço IPv6.

      Sintaxe:

      'name':
        type: AAAA
        value: ipv6-address
      

      Exemplo:

      'www':
        type: AAAA
        value: your-server-ipv6-address
      

      Registros do tipo CNAME:

      Objetivo: transformar o seu domínio/subdomínio em alias de outro.

      Sintaxe:

      'name':
        type: CNAME
        value: fully-qualified-domain-name
      

      Exemplo:

      'www':
        type: CNAME
        value: www.example.org
      

      Registros do tipo MX:

      Objetivo: direcionar e-mails para servidores/endereços específicos.

      Sintaxe:

      'name':
        type: MX
        value:
          exchange: mail-server
          preference: priority-value
      

      Note que um ponto final, ., *deve *ser incluído se houver quaisquer pontos no valor do registro tipo MX.

      Exemplo:

      '':
        type: MX
        value:
          exchange: mail.your-domain.
          preference: 10
      

      Registros do tipo TXT:

      Objetivo: adicionar texto simples arbitrário, frequentemente usado para configurações sem seu próprio tipo de registro dedicado.

      Sintaxe:

      'name':
        type: TXT
        value: content
      

      Exemplo:

      '':
        type: TXT
        value: This is a TXT record.
      

      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:

      • cd ~/octodns/config
      • nano your-domain.yaml

      Na sequência, você pode começar a preencher sua zona de DNS, usando a sintaxe descrita na lista anterior, bem como a seção de Registros da documentação oficial do OctoDNS.

      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:

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
        - type: MX
          value:
            exchange: mail.your-domain.
            preference: 10
      
        - type: TXT
          value: v=spf1 -all
      
      _dmarc:
        type: TXT
        value: v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;
      
      mail:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      

      Assim que tiver completado sua configuração inicial de 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 octodns:

      Verifique novamente se você ainda está operando dentro do seu virtualenv em Python, procurando por seu nome, antes do prompt do Bash:

      (env) user@digitalocean:~/octodns$
      

      Em seguida, utilize o comando octodns-validate para verificar a sintaxe do(s) seu(s) arquivo(s) de configuração. Você precisará especificar o caminho para seu arquivo de configuração:

      • octodns-validate --config=./config/config.yaml

      Se a sintaxe YAML do seu arquivo de configuração DNS estiver correta, o OctoDNS não retornará nenhum resultado. Se ver um erro ou um aviso em seu resultado, o OctoDNS dará detalhes sobre o que está errado e onde o erro está localizado dentro do seu arquivo YAML.

      Em seguida, você pode realizar um push de simulação da configuração do DNS, que irá exibir quais alterações serão feitas, sem, de fato, fazê-las:

      • octodns-sync --config=./config/config.yaml

      Isso deve gerar uma saída parecida com esta:

      Output

      ******************************************************************************** * your-domain. ******************************************************************************** * digitalocean (DigitalOceanProvider) * Create <ARecord A 300, mail.your-domain., ['your-server-ipv4-address']> (config) * Create <AaaaRecord AAAA 300, mail.your-domain., ['your-server-ipv6-address']> (config) * Create <TxtRecord TXT 300, your-domain., ['v=spf1 -all']> (config) * Create <AaaaRecord AAAA 300, your-domain., ['your-server-ipv6-address']> (config) * Create <ARecord A 300, your-domain., ['your-server-ipv4-address']> (config) * Create <ARecord A 300, www.your-domain., ['your-server-ipv4-address']> (config) * Create <MxRecord MX 300, your-domain., [''10 mail.your-domain.'']> (config) * Create <TxtRecord TXT 300, _dmarc.your-domain., ['v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;']> (config) * Create <AaaaRecord AAAA 300, www.your-domain., ['your-server-ipv6-address']> (config) * Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2 ********************************************************************************

      Aviso: o próximo comando fará alterações em tempo real nos seus registros de DNS e, possivelmente, em outras configurações. Certifique-se de que esteja preparado para isso, incluindo a realização de 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:

      • octodns-sync --config=./config/config.yaml --doit

      Nota: em alguns casos, o OctoDNS se recusará a forçar alterações se estiver fazendo um número significativo de ajustes. Trata-se de um recurso de proteção automático feito para evitar erros de configuração acidentais. Se ocorrer essa recusa, tente executar novamente o octodns-sync usando a opção --force, mas certifique-se de que esteja pronto para fazer isso.

      Neste passo, você verá uma saída similar à simulação anterior, mas com a adição de algo parecido com o seguinte:

      Output

      2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes 2019-07-07T23:17:30 INFO Manager sync: 9 total changes

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

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

      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 devidamente atualizados:

      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 OctoDNS. 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 OctoDNS 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 off-line, antes de implantá-las na produção.

      Se quiser explorar mais esse assunto, o OctoDNS 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 OctoDNS 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 saber mais sobre o OctoDNS, os artigos da DigitalOcean a seguir fornecem alguns passos interessantes para ajudar a integrar o OctoDNS em seus fluxos de trabalho de gerenciamento de mudanças e implantação de infraestrutura:



      Source link

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


      El autor seleccionó la Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.

      Introducción

      OctoDNS 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, control de versiones, pruebas e implementaciones automatizadas. OctoDNS es una creación de GitHub y está escrito en Python.

      El uso de OctoDNS elimina muchas de las dificultades de la administración de DNS manual, ya que los archivos de zona se almacenan en un formato estructurado (YAML). 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 común de OctoDNS tiene que ver con la sincronización de su configuración de DNS entre diferentes proveedores, como en el caso de un sistema de pruebas y producción o entre entornos activos y de conmutación por error.

      OctoDNS es similar a DNSControl, una herramienta equivalente creada por Stack Exchange y escrita en Go. A diferencia de OctoDNS, DNSControl utiliza un lenguaje de configuración basado en JavaScript para definir las zonas de DNS, lo cual le permite usar funciones de programación avanzadas como los bucles para especificar varios registros similares dentro de la misma zona. En el artículo Cómo implementar y administrar su DNS utilizando DNSControl en Debian 10 se abarcan la instalación y configuración básicas de DNSControl.

      A través de este tutorial, instalará y configurará OctoDNS, 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 quiere utilizar 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 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-adress y your-server-ipv6-address hacen referencia a las direcciones IP del servidor en el que 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, inicie sesión en su servidor como usuario no root.

      Paso 1: Instalar OctoDNS

      OctoDNS se distribuye como paquete pip en Python y se ejecuta en un entorno virtual de Python (virtualenv), por lo que iniciará este paso instalando los paquetes necesarios para esto. Un virtualenv es un entorno aislado de Python que puede contar con bibliotecas y configuración propias, independientes de la instalación principal de Python en todo el sistema. Python y ​​​virtualenv están disponibles dentro de los repositorios de software predeterminados de Debian, lo que permite la instalación con herramientas convencionales de administración de paquetes.

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

      A continuación, instale los paquetes python y virtualenv:

      • sudo apt install python virtualenv

      Después de confirmar la instalación, apt descargará e instalará Python, virtualenv y todas sus dependencias necesarias.

      A continuación, creará los directorios necesarios para OctoDNS, en los que se almacenará su configuración de DNS y del programa. Comience creando los directorios ~/octodns y ~/octodns/config:

      • mkdir ~/octodns ~/octodns/config

      Ahora, posiciónese en ~/octodns:

      A continuación, es necesario crear el entorno virtual de Python; un entorno aislado con bibliotecas y configuración propias para ejecutar OctoDNS:

      Active su entorno con el siguiente comando:

      Con esto, se mostrará algo similar a lo siguiente:

      Output

      Running virtualenv with interpreter /usr/bin/python2 New python executable in /home/user/octodns/env/bin/python2 Also creating executable in /home/user/octodns/env/bin/python Installing setuptools, pkg_resources, pip, wheel...done.

      Ahora, su intérprete de comandos de shell de Bash también llevará como prefijo el nombre de su entorno virtual. Esto indica que actualmente realiza operaciones dentro de virtualenv:

      (env) user@digitalocean:~/octodns$
      

      Si quiere cerrar virtualenv, puede usar el comando deactivate en cualquier momento. Sin embargo, debe permanecer en su virtualenv para continuar con este tutorial.

      Ahora que instaló y configuró Python y virtualenv, puede instalar OctoDNS. OctoDNS se distribuye como un paquete pip de Python, que es la herramienta estándar de administración de paquetes y bibliotecas de Python.

      Puede instalar el paquete de pip de OctoDNS utilizando el siguiente comando dentro de su virtualenv:

      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

      octoDNS 0.9.9

      Si ve un error octodns-sync: command not found, compruebe que aún se encuentre dentro de su virtualenv.

      Ahora que instaló OctoDNS, podrá crear los archivos de configuración necesarios para conectar OctoDNS con su proveedor DNS para permitir que se realicen cambios en sus registros de DNS.

      Paso 2: Configurar OctoDNS

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

      Nota: En este tutorial, nos enfocaremos en la configuración inicial de OctoDNS. Sin embargo, para el uso en producción se le recomienda almacenar su configuración de OctoDNS 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.

      Primero, debe configurar el archivo config.yaml, que define las zonas de DNS para la administración a través de OctoDNS, y permite que este se autentique en su proveedor DNS y realice cambios.

      El formato de config.yaml varía ligeramente dependiendo del proveedor DNS que está utilizando. Consulte la lista de proveedores compatibles en la documentación oficial de OctoDNS para hallar la configuración de su propio proveedor. Si se observa este hiperenlace, los detalles de configuración se presentan como comentarios de código en el código real de Python para su proveedor, que está vinculado en la columna de “Provider” de la tabla. Una vez que encuentre el código de Python para su proveedor, como cloudflare.py o route53.py, podrá hallar el comentario de código pertinente directamente en la class ProviderNameProvider. Por ejemplo:

      Excerpt of octodns/provider/route53.py

      class Route53Provider(BaseProvider):
        '''
        AWS Route53 Provider
        route53:
            class: octodns.provider.route53.Route53Provider
            # The AWS access key id
            access_key_id:
            # The AWS secret access key
            secret_access_key:
            # The AWS session token (optional)
            # Only needed if using temporary security credentials
            session_token:
      

      Posiciónese en el directorio ~/octodns/config:

      Luego, cree y abra config.yaml para la edición:

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

      ~/octodns/config/config.yaml

      ---
      providers:
        config:
          class: octodns.provider.yaml.YamlProvider
          directory: ./config
          default_ttl: 300
          enforce_order: True
        digitalocean:
          class: octodns.provider.digitalocean.DigitalOceanProvider
          token: your-digitalocean-oauth-token
      
      zones:
        your-domain.:
          sources:
            - config
          targets:
            - digitalocean
      

      A través de este archivo se indican a OctoDNS los proveedores DNS con los que desea establecer conexión y las zonas de DNS que el software debe administrar para esos proveedores.

      Deberá proporcionar alguna forma de autenticación para proveedor DNS. Normalmente, se trata de una clave de API o un token de OAuth.

      Si no desea almacenar su token de acceso en texto simple en el archivo de configuración, como alternativa puede pasarlo como variable de entorno cuando se ejecute el programa. Para hacer esto, debe usar la siguiente línea token: en config.yaml:

      ~/octodns/config/config.yaml

      token: env/DIGITALOCEAN_OAUTH_TOKEN
      

      A continuación, antes de ejecutar OctoDNS, fije la variable de entorno pertinente en su token de acceso. OctoDNS la leerá de allí cuando se ejecute:

      • export DIGITALOCEAN_OAUTH_TOKEN=your-digitalocean-oauth-token

      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 DNS diferentes, por ejemplo, para varios nombres de dominio o zonas de DNS delegadas, puede definirlos todos en el mismo archivo config.yaml.

      Con esto, estableció el archivo de configuración inicial de OctoDNS para permitir que el programa 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.

      Cada zona de DNS que quiere administrar utilizando OctoDNS tiene su propio archivo; por ejemplo your-domain.yaml. En este archivo, los registros de DNS de la zona se definen usando YAML.

      Para comenzar, acceda al directorio ~/octodns/config:

      Luego, cree y abra your-domain.yaml para la edición:

      Añada la siguiente configuración de ejemplo al archivo:

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      

      En este archivo de muestra se define una zona de DNS para your-domain con dos registros A, con orientación hacia la dirección IPv4 en la que aloja su dominio o sitio web. Un registro A es para el dominio root (por ejemplo, your-domain) y el otro es para el subdominio www (por ejemplo, www.your-domain).

      Una vez que termine, guarde y cierre el archivo.

      De esta manera, preparó un archivo de configuración básico de zona de DNS para OctoDNS, con dos registros A básicos orientados a la dirección IPv4 de su dominio o sitio web. A continuación, ampliará el archivo con algunos registros de DNS útiles.

      Paso 4: Completar su archivo de configuración DNS

      A continuación, podrá completar el archivo de configuración de DNS con un conjunto práctico de registros de DNS para su sitio web o servicio usando el lenguaje de configuración estructurado YAML.

      A diferencia de los archivos de zona BIND tradicionales, en los cuales los registros de DNS se escriben en un formato básico línea por línea, los registros de DNS dentro de OctoDNS se definen como claves y subclaves YAML con varios valores asociados, como se muestra brevemente en el paso 3.

      La clave de nivel superior suele ser el 'name', que es básicamente el identificador de registros. www, subdomain1 y mail son ejemplos de 'name' de DNS. En OctoDNS, hay dos nombres de uso especial: ", para el registro root (por lo general citado como @) y '*', para los registros de comodín. Un valor obligatorio de cada clave (registro de DNS) es type. Esto especifica el tipo de registro DNS que define dentro de esa clave de nivel superior YAML. Existe un type para cada uno de los tipos de registros de DNS estándares, entre los que se incluyen A, AAAA, MX, TXT, NS y CNAME. Se encuentra disponible una lista completa de los tipos de registro en la sección de registros de la documentación de OctoDNS.

      Los valores para sus registros de DNS se definen directamente como valores en las claves de nivel superior (si solo tiene un valor) o como una lista (si tiene varios valores, como varias direcciones IP o direcciones MX).

      Por ejemplo, para definir un valor podría usar la siguiente configuración:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        value: 203.0.113.1
      

      Asimismo, para definir varios valores para un registro único:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        values:
        - 203.0.113.1
        - 203.0.113.2
      

      La sintaxis para configurar registros de DNS varía ligeramente según cada tipo de registro. Los siguientes son algunos ejemplos para los tipos de registro más comunes:

      Registros A:

      Propósito: apuntar a una dirección IPv4.

      Sintaxis:

      'name':
        type: A
        value: ipv4-address
      

      Ejemplo:

      'www':
        type: A
        value: your-server-ipv4-address
      

      Registros AAA:

      Propósito: apuntar a una dirección IPv6.

      Sintaxis:

      'name':
        type: AAAA
        value: ipv6-address
      

      Ejemplo:

      'www':
        type: AAAA
        value: your-server-ipv6-address
      

      Registros CNAME:

      Propósito: convertir su dominio o subdominio en un alias de otro.

      Sintaxis:

      'name':
        type: CNAME
        value: fully-qualified-domain-name
      

      Ejemplo:

      'www':
        type: CNAME
        value: www.example.org
      

      Registros MX:

      Propósito: dirigir el correo electrónico a direcciones o servidores específicos.

      Sintaxis:

      'name':
        type: MX
        value:
          exchange: mail-server
          preference: priority-value
      

      Tenga en cuenta que un . final se debe incluir si hay puntos en el valor de MX.

      Ejemplo:

      '':
        type: MX
        value:
          exchange: mail.your-domain.
          preference: 10
      

      Registros TXT:

      Propósito: agregar texto simple arbitrario, a menudo utilizado para configuraciones sin su propio tipo de registro dedicado.

      Sintaxis:

      'name':
        type: TXT
        value: content
      

      Ejemplo:

      '':
        type: TXT
        value: This is a TXT record.
      

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

      • cd ~/octodns/config
      • nano your-domain.yaml

      A continuación, podrá comenzar a completar su zona de DNS usando la sintaxis descrita en la lista anterior y en la sección de registros de la documentación oficial de OctoDNS.

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

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
        - type: MX
          value:
            exchange: mail.your-domain.
            preference: 10
      
        - type: TXT
          value: v=spf1 -all
      
      _dmarc:
        type: TXT
        value: v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;
      
      mail:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      

      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, acceda a su directorio octodns:

      Asegúrese de seguir operando dentro de su virtualenv de Python buscando el nombre de este delante de su mensaje de Bash:

      (env) user@digitalocean:~/octodns$
      

      A continuación, utilice el comando octodns-validate para verificar la sintaxis de sus archivos de configuración. Deberá especificar la ruta a su archivo de configuración:

      • octodns-validate --config=./config/config.yaml

      Si la sintaxis YAML de su archivo de configuración de DNS es correcta, OctoDNS no mostrará resultados. Si ve un error o una advertencia en el resultado, DNSControl proporcionará detalles sobre el tipo de error y el punto en el que se encuentra dentro de su archivo.

      A continuación, podrá realizar un simulacro de la implementación de la configuración de DNS, con lo cual se mostrarán los cambios que se realizarán sin aplicarlos:

      • octodns-sync --config=./config/config.yaml

      Con esto, debería aparecer un resultado similar al siguiente:

      Output

      ******************************************************************************** * your-domain. ******************************************************************************** * digitalocean (DigitalOceanProvider) * Create <ARecord A 300, mail.your-domain., ['your-server-ipv4-address']> (config) * Create <AaaaRecord AAAA 300, mail.your-domain., ['your-server-ipv6-address']> (config) * Create <TxtRecord TXT 300, your-domain., ['v=spf1 -all']> (config) * Create <AaaaRecord AAAA 300, your-domain., ['your-server-ipv6-address']> (config) * Create <ARecord A 300, your-domain., ['your-server-ipv4-address']> (config) * Create <ARecord A 300, www.your-domain., ['your-server-ipv4-address']> (config) * Create <MxRecord MX 300, your-domain., [''10 mail.your-domain.'']> (config) * Create <TxtRecord TXT 300, _dmarc.your-domain., ['v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;']> (config) * Create <AaaaRecord AAAA 300, www.your-domain., ['your-server-ipv6-address']> (config) * Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2 ********************************************************************************

      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 en su proveedor DNS activo:

      • octodns-sync --config=./config/config.yaml --doit

      Nota: En algunos casos, OctoDNS no permitirá la introducción de cambios si realiza un número de ajustes considerable. Este es un mecanismo de protección automática para evitar configuraciones accidentales. Si se produce este rechazo, puede volver a ejecutar octodns-sync utilizando la opción --force. Sin embargo, asegúrese de estar listo para hacerlo.

      Verá un resultado como el del simulacro anterior de este paso, pero se agregará algo similar a lo siguiente:

      Output

      2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes 2019-07-07T23:17:30 INFO Manager sync: 9 total changes

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

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

      También puede verificar la creación de registros ejecutando una solicitud de DNS para su dominio o zona delegada 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 OctoDNS. Los registros DNS pueden tardar tiempo en propagarse, por lo que 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ó OctoDNS 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, Octo DNS 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 OctoDNS 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 profundizar en el uso de OctoDNS, en los siguientes artículos de DigitalOcean se ofrecen algunos pasos interesantes que podrá seguir para contribuir a la integración de OctoDNS en sus flujos de trabajo de administración de cambios e implementación de infraestructura:



      Source link

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


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

      Введение

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

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

      Инструмент OctoDNS аналогичен инструменту DNSControl, созданному Stack Exchange и написанному на Go. В отличие от OctoDNS, в DNSControl для определения зон DNS используется язык конфигурации на базе JavaScript, что позволяет использовать различные функции программирования (например циклы) для определения нескольких похожих записей в одной зоне. Статья Развертывание и управление DNS с помощью DNSControl в Debian 10 рассказывает об основах настройки и конфигурации DNSControl.

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

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

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

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

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

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

      OctoDNS распространяется как пакет Python pip и выполняется в виртуальной среде Python (virtualenv), так что мы начнем этот шаг с установки необходимых пакетов. virtualenv — это изолированная среда Python, которая может иметь собственные библиотеки и конфигурацию, отдельные от основной версии Python в системе. Python и virtualenv доступны в репозиториях программного обеспечения Debian по умолчанию, и поэтому их можно установить с помощью стандартных инструментов управления пакетами.

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

      Затем мы установим пакеты python и virtualenv:

      • sudo apt install python virtualenv

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

      Затем мы создадим необходимые для OctoDNS директории, где будут храниться конфигурации DNS и программы. Для начала создадим директории ~/octodns и ~/octodns/config:

      • mkdir ~/octodns ~/octodns/config

      Теперь перейдем в директорию ~/octodns:

      Теперь нам нужно создать виртуальную среду Python. Это изолированная среда Python с собственными библиотеками и конфигурацией, где будет работать OctoDNS:

      Активируем среду с помощью следующей команды:

      Будет выведен текст следующего вида:

      Output

      Running virtualenv with interpreter /usr/bin/python2 New python executable in /home/user/octodns/env/bin/python2 Also creating executable in /home/user/octodns/env/bin/python Installing setuptools, pkg_resources, pip, wheel...done.

      Строка оболочки Bash будет иметь префикс с именем виртуальной среды. Это показывает, что мы работаем в среде virtualenv:

      (env) user@digitalocean:~/octodns$
      

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

      Теперь вы установили и настроили Python и среду virtualenv и можете выполнить установку OctoDNS. OctoDNS распространяется как пакет Python pip (стандартный инструмент управления пакетами и библиотеками Python).

      Мы можем установить пакет OctoDNS pip с помощью команды в среде virtualenv:

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

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

      Output

      octoDNS 0.9.9

      Если будет выведено сообщение об ошибке octodns-sync: command not found, необходимо повторно убедиться, что мы находимся в среде virtualenv.

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

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

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

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

      Вначале нам нужно настроить файл config.yaml, который определит зоны DNS для управления OctoDNS и позволит проводить аутентификацию у провайдера DNS и вносить изменения.

      Формат файла config.yaml может немного отличаться в зависимости от используемого провайдера DNS. Ознакомьтесь со списком поддерживаемых провайдеров в официальной документации OctoDNS, чтобы найти конфигурацию для вашего провайдера. При просмотре этой гиперссылки детали конфигурации выводятся как комментарий к коду в фактическом коде Python нашего провайдера, привязанного в столбце Provider в таблице. Когда мы найдем код Python нашего провайдера, например cloudflare.py или route53.py, соответствующий комментарий к коду можно будет найти в классе ProviderNameProvider. Например:

      Excerpt of octodns/provider/route53.py

      class Route53Provider(BaseProvider):
        '''
        AWS Route53 Provider
        route53:
            class: octodns.provider.route53.Route53Provider
            # The AWS access key id
            access_key_id:
            # The AWS secret access key
            secret_access_key:
            # The AWS session token (optional)
            # Only needed if using temporary security credentials
            session_token:
      

      Перейдите в директорию ~/octodns/config:

      Создайте файл config.yaml и откройте его для редактирования:

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

      ~/octodns/config/config.yaml

      ---
      providers:
        config:
          class: octodns.provider.yaml.YamlProvider
          directory: ./config
          default_ttl: 300
          enforce_order: True
        digitalocean:
          class: octodns.provider.digitalocean.DigitalOceanProvider
          token: your-digitalocean-oauth-token
      
      zones:
        your-domain.:
          sources:
            - config
          targets:
            - digitalocean
      

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

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

      Если вы не хотите хранить токен доступа в текстовой форме в файле конфигурации, вы можете передать его в переменную среды при запуске программы. Для этого нужно использовать следующую строку token: в файле config.yaml:

      ~/octodns/config/config.yaml

      token: env/DIGITALOCEAN_OAUTH_TOKEN
      

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

      • export DIGITALOCEAN_OAUTH_TOKEN=your-digitalocean-oauth-token

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

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

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

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

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

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

      Для каждой зоны DNS, управляемой с помощью OctoDNS, должен существовать собственный файл, например your-domain.yaml. В этом файле записи DNS для зоны определяются с помощью YAML.

      Для начала перейдем в директорию ~/octodns/config:

      Затем создадим файл your-domain.yaml и откроем его для редактирования:

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

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      

      В этом файле образца определяется зона DNS для your-domain с двумя записями A, указывающими на адрес IPv4, на котором размещен домен или сайт. Одна запись A предназначена для корневого домена (например, your-domain), а другая — для субдомена www (например, www.your-domain).

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

      Мы настроили базовый файл конфигурации зоны DNS для OctoDNS с двумя базовыми записями A, указывающими на адрес IPv4 вашего домена или сайта. Далее мы заполним файл полезными записями DNS.

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

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

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

      Ключ 'name' обычно является ключом верхнего уровня, то есть идентификатором записи. Ключи www, subdomain1 и mail являются примерами ключа name службы DNS. В OctoDNS имеется два имени специального назначения: " для корневой записи (обычно @), и '*' для записей с подстановочными символами. Для каждого ключа (записи DNS) требуется значение type. Оно определяет, какой тип записей DNS мы определяем ключом YAML верхнего уровня. Значение type существует для каждого из стандартных типов записей DNS, в том числе A, AAAA, MX, TXT, NS, CNAME и т. д. Полный список доступных типов записей можно найти в разделе Записи в документации по OctoDNS.

      Значения записей DNS определяются напрямую как значения ключей верхнего уровня (если используется только одно значение) или в форме списка (если используется несколько значений, например несколько IP-адресов или адресов MX).

      Например, для определения одного значения можно использовать следующую конфигурацию:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        value: 203.0.113.1
      

      Также можно определить несколько значений для одной записи:

      ~/octodns/config/your-domain.yaml

      'www':
        type: A
        values:
        - 203.0.113.1
        - 203.0.113.2
      

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

      Записи A:

      Назначение: указывают на адрес IPv4.

      Синтаксис:

      'name':
        type: A
        value: ipv4-address
      

      Пример:

      'www':
        type: A
        value: your-server-ipv4-address
      

      Записи AAAA:

      Назначение: указывают на адрес IPv6.

      Синтаксис:

      'name':
        type: AAAA
        value: ipv6-address
      

      Пример:

      'www':
        type: AAAA
        value: your-server-ipv6-address
      

      Записи CNAME:

      Назначение: делают домен или субдомен псевдонимом другого домена или субдомена.

      Синтаксис:

      'name':
        type: CNAME
        value: fully-qualified-domain-name
      

      Пример:

      'www':
        type: CNAME
        value: www.example.org
      

      Записи MX:

      Назначение: направляют электронную почту на определенные серверы или адреса.

      Синтаксис:

      'name':
        type: MX
        value:
          exchange: mail-server
          preference: priority-value
      

      Следует отметить, что если в значении MX содержатся точки, завершающий символ . обязательно должен быть указан в конце строки.

      Пример:

      '':
        type: MX
        value:
          exchange: mail.your-domain.
          preference: 10
      

      Записи TXT:

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

      Синтаксис:

      'name':
        type: TXT
        value: content
      

      Пример:

      '':
        type: TXT
        value: This is a TXT record.
      

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

      • cd ~/octodns/config
      • nano your-domain.yaml

      Далее мы можем начать заполнение зоны DNS, используя синтаксис, описанный в предыдущем списке и в разделе Записи официальной документации по OctoDNS.

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

      ~/octodns/config/your-domain.yaml

      ---
      '':
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
        - type: MX
          value:
            exchange: mail.your-domain.
            preference: 10
      
        - type: TXT
          value: v=spf1 -all
      
      _dmarc:
        type: TXT
        value: v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;
      
      mail:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      
      www:
        - type: A
          value: your-server-ipv4-address
      
        - type: AAAA
          value: your-server-ipv6-address
      

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

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

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

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

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

      Еще раз проверим, что мы работаем в среде Python virtualenv, посмотрев на имя перед Bash в командной строке:

      (env) user@digitalocean:~/octodns$
      

      Затем используем команду octodns-validate для проверки синтаксиса файла или файлов конфигурации. Также необходимо указать путь к файлу конфигурации:

      • octodns-validate --config=./config/config.yaml

      Если синтаксис YAML конфигурации DNS правильный, OctoDNS не выводит никаких результатов. Если вы увидите предупреждение об ошибке в составе результатов, OctoDNS даст дополнительные данные о сущности ошибки и ее местонахождении в файле YAML.

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

      • octodns-sync --config=./config/config.yaml

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

      Output

      ******************************************************************************** * your-domain. ******************************************************************************** * digitalocean (DigitalOceanProvider) * Create <ARecord A 300, mail.your-domain., ['your-server-ipv4-address']> (config) * Create <AaaaRecord AAAA 300, mail.your-domain., ['your-server-ipv6-address']> (config) * Create <TxtRecord TXT 300, your-domain., ['v=spf1 -all']> (config) * Create <AaaaRecord AAAA 300, your-domain., ['your-server-ipv6-address']> (config) * Create <ARecord A 300, your-domain., ['your-server-ipv4-address']> (config) * Create <ARecord A 300, www.your-domain., ['your-server-ipv4-address']> (config) * Create <MxRecord MX 300, your-domain., [''10 mail.your-domain.'']> (config) * Create <TxtRecord TXT 300, _dmarc.your-domain., ['v=DMARC1; p=reject; rua=mailto:abuse@your-domain; aspf=s; adkim=s;']> (config) * Create <AaaaRecord AAAA 300, www.your-domain., ['your-server-ipv6-address']> (config) * Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2 ********************************************************************************

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

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

      • octodns-sync --config=./config/config.yaml --doit

      Примечание. В некоторых случаях OctoDNS может отказаться применять изменения, если количество модификаций значительно. Это функция автоматической защиты, которая позволит предотвратить случайные ошибки конфигурации. В случае такого отклонения можно повторно запустить octodns-sync с опцией --force, но при этом нужно быть уверенным в правильности этого шага.

      Вы увидите результаты, похожие на показанные при пробном запуске, однако при этом будет добавлено примерно следующее:

      Output

      2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes 2019-07-07T23:17:30 INFO Manager sync: 9 total changes

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

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

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

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

      • sudo apt install dnsutils

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

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

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

      Заключение

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

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

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



      Source link