El autor seleccionó la Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.
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.
Para completar esta guía, necesitará lo siguiente:
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.your_domain
en todo momento y DigitalOcean será el proveedor de servicio.Una vez que tenga todo esto listo, inicie sesión en su servidor como usuario no root.
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:
- sudo apt update
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
:
- cd ~/octodns
A continuación, es necesario crear el entorno virtual de Python; un entorno aislado con bibliotecas y configuración propias para ejecutar OctoDNS:
- virtualenv env
Active su entorno con el siguiente comando:
- source env/bin/activate
Con esto, se mostrará algo similar a lo siguiente:
OutputRunning 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
:
- pip install octodns
Una vez completado esto, puede verificar la versión instalada para asegurar que todo funcione:
- octodns-sync --version
El resultado debe tener un aspecto similar al siguiente:
OutputoctoDNS 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.
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:
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
:
- cd ~/octodns/config
Luego, cree y abra config.yaml
para la edición:
- nano config.yaml
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:
---
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
:
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.
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
:
- cd ~/octodns/config
Luego, cree y abra your-domain.yaml
para la edición:
- nano your-domain.yaml
Añada la siguiente configuración de ejemplo al archivo:
---
'':
- 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.
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:
'www':
type: A
value: 203.0.113.1
Asimismo, para definir varios valores para un registro único:
'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:
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
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
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
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
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:
---
'':
- 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á.
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
:
- cd ~/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:
Output2019-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.
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:
- dig +short your-domain
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.
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:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!