L’auteur a choisi que la Electronic Frontier Foundation recevrait une donation dans le cadre du programme Write for Donations.
OctoDNS est un outil infrastructure-as-code qui vous permet de déployer et de gérer vos zones DNS en utilisant des principes de développement logiciel standard, y compris le contrôle de version, les tests et le déploiement automatisé. OctoDNS a été créé par GitHub et est écrit en Python.
L’utilisation d’OctoDNS élimine bon nombre des pièges de la gestion manuelle du DNS, car les fichiers de zone sont stockés dans un format structuré (YAML). Cela vous permet de déployer des zones vers plusieurs fournisseurs DNS simultanément, d’identifier les erreurs de syntaxe et de pousser votre configuration DNS automatiquement, réduisant ainsi le risque d’erreur humaine. L’une des autres utilisations courantes d’OctoDNS est la synchronisation de votre configuration DNS entre différents fournisseurs, comme un système de test et de production, ou entre des environnements en direct et de basculement.
OctoDNS est similaire à DNSControl, qui est un outil équivalent créé par Stack Exchange et écrit en Go. Contrairement à OctoDNS, DNSControl utilise un langage de configuration basé sur JavaScript pour définir les zones DNS, ce qui vous permet d’utiliser des fonctions de programmation avancées telles que les boucles pour spécifier plusieurs enregistrements similaires dans la même zone. L’article Comment déployer et gérer votre DNS en utilisant DNSControl sous Debian 10 traite de l’installation et de la configuration de base de DNSControl.
Dans ce tutoriel, vous installerez et configurerez OctoDNS, créerez une configuration DNS de base, et commencerez à déployer des enregistrements DNS vers un fournisseur en direct. Dans le cadre de ce tutoriel, nous utiliserons DigitalOcean comme exemple de fournisseur de DNS. Si vous souhaitez utiliser un autre fournisseur, l’installation est très similaire. Lorsque vous aurez terminé, vous pourrez gérer et tester votre configuration DNS dans un environnement sécurisé et hors ligne, puis la déployer automatiquement en production.
Avant de commencer ce guide, vous aurez besoin des éléments suivants :
your-server-ipv4-address
et your-server-ipv6-address
font référence aux adresses IP du serveur où vous hébergez votre site web ou votre domaine.your-domain
pendant toute sa durée et DigitalOcean comme fournisseur de services.Une fois que tout cela est prêt, connectez-vous à votre serveur en tant qu’utilisateur non root pour commencer.
OctoDNS est distribué sous forme de package Python pip, et fonctionne dans un environnement virtuel Python (virtualenv
), vous commencerez donc cette étape en installant les packages requis pour cela. Un virtualenv
est un environnement Python isolé qui peut avoir ses propres librairies et sa propre configuration, distinctes de l’installation principale de Python à l’échelle du système. Python et virtualenv
sont disponibles dans les référentiels de logiciels par défaut de Debian, ce qui permet de les installer à l’aide d’outils classiques de gestion des paquets.
Commencez par mettre à jour l’index local des paquets pour refléter tout nouveau changement en amont :
- sudo apt update
Ensuite, installez les paquets python
et virtualenv
:
- sudo apt install python virtualenv
Après avoir confirmé l’installation, apt
téléchargera et installera Python, virtualenv
, et toutes leurs dépendances requises.
Ensuite, vous créerez les répertoires nécessaires pour OctoDNS, où votre DNS et la configuration de votre programme seront stockés. Commencez par créer les répertoires ~/octodns
et ~/octodns/config
:
- mkdir ~/octodns ~/octodns/config
Entrez maintenant dans ~/octodns
:
- cd ~/octodns
Ensuite, vous devez créer l’environnement virtuel Python - un environnement Python isolé avec ses propres librairies et sa propre configuration pour exécuter OctoDNS :
- virtualenv env
Activez votre environnement avec la commande suivante :
- source env/bin/activate
Il en résultera quelque chose de similaire à ce qui suit :
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.
L’invite de votre shell Bash sera désormais également préfixée par le nom de l’environnement virtuel. Cela montre que vous opérez actuellement au sein du virtualenv
:
(env) user@digitalocean:~/octodns$
Si vous souhaitez quitter le virtualenv
, vous pouvez utiliser la commande deactivate
à tout moment. Cependant, vous devez rester dans votre virtualenv
pour poursuivre ce tutoriel.
Maintenant que vous avez installé et configuré Python et virtualenv
, vous pouvez installer OctoDNS. OctoDNS est distribué sous forme de package Python pip, qui est l’outil standard de gestion des paquets pour les paquets et les librairies Python.
Vous pouvez installer le package OctoDNS pip en utilisant la commande suivante dans votre virtualenv
:
- pip install octodns
Une fois cette opération terminée, vous pouvez vérifier la version installée pour vous assurer que tout fonctionne :
- octodns-sync --version
Votre sortie ressemblera à ce qui suit :
OutputoctoDNS 0.9.9
Si vous voyez une erreur octodns-sync : command not found
, vérifiez que vous vous trouvez toujours dans votre virtualenv
.
Maintenant que vous avez installé OctoDNS, vous pouvez créer les fichiers de configuration nécessaires pour connecter OctoDNS à votre fournisseur de DNS, afin de lui permettre d’apporter des modifications à vos enregistrements DNS.
Au cours de cette étape, vous allez créer les fichiers de configuration requis pour OctoDNS, et le connecter à votre fournisseur DNS afin qu’il puisse commencer à apporter des modifications en direct à vos enregistrements DNS.
Remarque : ce tutoriel portera sur la configuration initiale d’OctoDNS ; toutefois, pour une utilisation en production, il est recommandé de stocker votre configuration OctoDNS dans un système de contrôle de version (VCS) tel que Git. Les avantages de cette solution sont notamment le contrôle complet des versions, l’intégration avec les CI/CD pour les tests, les déploiements rétroactifs harmonieux, etc.
Tout d’abord, vous devez configurer le fichier config.yaml
, qui définit les zones DNS que OctoDNS devra gérer, et lui permettre d’authentifier votre fournisseur de DNS et d’effectuer des modifications.
Le format de config.yaml
diffère légèrement en fonction du fournisseur de DNS que vous utilisez. Veuillez consulter la liste des fournisseurs pris en charge dans la documentation officielle d’OctoDNS pour trouver la configuration adaptée à votre propre fournisseur. Lorsque vous consultez cet hyperlien, les détails de la configuration sont présentés sous la forme d’un commentaire de code dans le code Python de votre fournisseur, qui est lié dans la colonne “Fournisseur” du tableau. Une fois que vous avez trouvé le code Python adapté à votre fournisseur, tel que cloudflare.py
ou route53.py
, le commentaire de code pertinent peut être trouvé directement sous la classe
ProviderNameProvider
. Par exemple :
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:
Entrez dans le répertoire ~/octodns/config
:
- cd ~/octodns/config
Ensuite, créez et ouvrez config.yaml
pour le modifier :
- nano config.yaml
Ajoutez au fichier l’exemple de configuration config.yaml
pour votre fournisseur de DNS. Si DigitalOcean est votre fournisseur de DNS, vous pouvez utiliser ce qui suit :
---
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
Ce fichier indique à OctoDNS à quels fournisseurs de DNS vous voulez qu’il se connecte, et quelles zones DNS il doit gérer pour ces fournisseurs.
Vous devrez fournir une forme d’authentification pour votre fournisseur de DNS. Il s’agit généralement d’une clé API ou d’un jeton OAuth.
Si vous ne souhaitez pas stocker votre jeton d’accès en texte clair dans le fichier de configuration, vous pouvez à la place le passer comme variable d’environnement lorsque le programme s’exécute. Pour ce faire, vous devez plutôt utiliser la ligne de token:
suivante dans config.yaml
:
token: env/DIGITALOCEAN\_OAUTH\_TOKEN
Ensuite, avant d’exécuter OctoDNS, définissez la variable d’environnement pertinente sur votre jeton d’accès, et OctoDNS la lira à partir de là lorsqu’il sera exécuté :
- export DIGITALOCEAN\_OAUTH\_TOKEN=your-digitalocean-oauth-token
Attention : ce jeton donnera accès à votre compte de fournisseur de DNS, vous devez donc le protéger comme vous le feriez avec un mot de passe. Par ailleurs, si vous utilisez un système de contrôle de version, assurez-vous que le fichier contenant le jeton est exclu (par exemple en utilisant .gitignore
), ou qu’il est crypté de manière sécurisée.
Si vous utilisez DigitalOcean comme fournisseur de DNS, vous pouvez utiliser le jeton OAuth (requis dans les paramètres de votre compte DigitalOcean) que vous avez généré dans le cadre des conditions préalables.
Si vous avez plusieurs fournisseurs de DNS différents - par exemple, pour plusieurs noms de domaine ou des zones DNS déléguées - vous pouvez tous les définir dans le même fichier config.yaml
.
Vous avez configuré le fichier de configuration initial OctoDNS pour permettre au programme de s’authentifier auprès de votre fournisseur de DNS et d’y apporter des modifications. Maintenant, vous allez créer la configuration de vos zones DNS.
Au cours de cette étape, vous allez créer un fichier de configuration DNS initial, qui contiendra les enregistrements DNS pour votre nom de domaine ou la zone DNS déléguée.
Chaque zone DNS que vous souhaitez gérer à l’aide d’OctoDNS possède son propre fichier, par exemple your-domain.yaml
. Dans ce fichier, les enregistrements DNS de la zone sont définis à l’aide de YAML.
Pour commencer, entrez dans le répertoire ~/octodns/config
:
- cd ~/octodns/config
Ensuite, créez et ouvrez your-domain.yaml
pour le modifier :
- nano your-domain.yaml
Ajoutez l’exemple de configuration suivant au fichier :
---
'':
- type: A
value: your-server-ipv4-address
www:
- type: A
value: your-server-ipv4-address
Ce fichier exemple définit une zone DNS pour your-domain
avec deux enregistrements A
, pointant vers l’adresse IPv4 sur laquelle vous hébergez votre domaine ou votre site web L’un des enregistrements A
est destiné au domaine root (par exemple : your-domain
) et l’autre est destiné au sous-domaine www
(par exemple : www.your-domain
).
Une fois terminé, enregistrez et fermez le fichier.
Vous avez mis en place un fichier de configuration de base de la zone DNS pour OctoDNS, avec deux enregistrements A
de base pointant vers l’adresse IPv4 de votre domaine ou site web. Maintenant, vous allez développer le fichier avec quelques enregistrements DNS utiles.
Maintenant, vous pouvez remplir le fichier de configuration DNS avec un ensemble pratique d’enregistrements DNS pour votre site web ou service, en utilisant le langage de configuration structuré YAML.
Contrairement aux fichiers de zones BIND, où les enregistrements DNS sont écrits dans un format brut, ligne par ligne, les enregistrements DNS dans OctoDNS sont définis comme des clés et sous-clés YAML avec un certain nombre de valeurs associées, comme indiqué brièvement à l’Étape 3.
La clé de niveau supérieur est habituellement le 'name'
, qui est de manière générale l’identifiant d’enregistrement. www
, subdomain1
et mail
sont tous des exemples de 'name'
de DNS. Dans OctoDNS, il existe deux noms à usage spécial, qui sont "
pour l’enregistrement root (généralement appelé @
) et '*'
pour les enregistrements wildcard. type
est une valeur requise pour chaque clé (enregistrement DNS). Elle détermine le type d’enregistrement DNS que vous définissez dans cette clé YAML de niveau supérieur. Il existe un type
pour chacun des types d’enregistrement DNS standard, notamment A
, AAAA
, MX
, TXT
, NS
, CNAME
, etc. Une liste complète des types d’enregistrement disponibles est disponible dans la section Enregistrements de la documentation OctoDNS.
Les valeurs de vos enregistrements DNS sont définies soit directement en tant que valeurs des clés de niveau supérieur (si vous n’avez qu’une seule valeur), soit sous forme de liste (si vous avez plusieurs valeurs, par exemple plusieurs adresses IP ou adresses MX).
Par exemple, pour définir une valeur unique, vous pourriez utiliser la configuration suivante :
'www':
type: A
value: 203.0.113.1
Ou bien, si vous souhaitez définir plusieurs valeurs pour un seul enregistrement :
'www':
type: A
values:
- 203.0.113.1
- 203.0.113.2
La syntaxe utilisée pour définir les enregistrements DNS varie légèrement selon les types d’enregistrement. Vous trouverez ci-dessous quelques exemples des types d’enregistrement les plus courants :
A
:Objectif : pointer vers une adresse IPv4.
Syntaxe :
'name':
type: A
value: ipv4-address
Exemple :
'www':
type: A
value: your-server-ipv4-address
AAAA
:Objectif : pointer vers une adresse IPv6.
Syntaxe :
'name':
type: AAAA
value: ipv6-address
Exemple :
'www':
type: AAAA
value: your-server-ipv6-address
CNAME
:Objectif : faire de votre domaine/sous-domaine un alias d’un autre.
Syntaxe :
'name':
type: CNAME
value: fully-qualified-domain-name
Exemple :
'www':
type: CNAME
value: www.example.org
MX
:Objectif : diriger le courrier électronique vers des serveurs/adresses spécifiques.
Syntaxe :
'name':
type: MX
value:
exchange: mail-server
preference: priority-value
Notez qu’un .
final doit être inclus s’il y a des points dans la valeur MX.
Exemple :
'':
type: MX
value:
exchange: mail.your-domain.
preference: 10
TXT
:Objectif : ajouter du texte arbitraire en clair, souvent utilisé pour les configurations n’ayant pas leur propre type d’enregistrement dédié.
Syntaxe :
'name':
type: TXT
value: content
Exemple :
'':
type: TXT
value: This is a TXT record.
Afin de commencer à ajouter des enregistrements DNS pour votre domaine ou votre zone DNS déléguée, modifiez votre fichier de configuration DNS :
- cd ~/octodns/config
- nano your-domain.yaml
Ensuite, vous pouvez commencer à alimenter votre zone DNS en utilisant la syntaxe décrite dans la liste précédente, ainsi que la section Enregistrements de la documentation officielle d’OctoDNS.
Pour référence, le bloc de code ci-joint contient un exemple complet de configuration pour une configuration DNS initiale :
---
'':
- 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
Une fois que vous avez terminé votre configuration DNS initiale, enregistrez et fermez le fichier.
Au cours de cette étape, vous avez configuré le fichier de configuration DNS initial, contenant vos enregistrements DNS. Maintenant, vous allez tester la configuration et la déployer.
Au cours de cette étape, vous allez effectuer un contrôle syntaxique local sur votre configuration DNS, puis déployer les modifications sur le serveur/fournisseur DNS en direct.
Tout d’abord, entrez dans votre répertoire octodns
:
- cd ~/octodns
Vérifiez que vous opérez toujours au sein de votre virtualenv
Python en cherchant le nom de celui-ci avant votre invite Bash :
(env) user@digitalocean:~/octodns$
Ensuite, utilisez la commande octodns-validate
pour vérifier la syntaxe de votre ou vos fichier(s) de configuration. Vous devrez préciser le chemin d’accès à votre fichier de configuration :
- octodns-validate --config=./config/config.yaml
Si la syntaxe YAML de votre fichier de configuration DNS est correcte, OctoDNS ne trouvera pas de résultat. Si vous voyez une erreur ou un avertissement dans votre sortie, OctoDNS fournira des détails sur la nature et l’emplacement de l’erreur dans votre fichier YAML.
Ensuite, vous pouvez effectuer un test à blanc de la configuration DNS, qui affichera les modifications devant être apportées, sans réellement les appliquer :
- octodns-sync --config=./config/config.yaml
Cela devrait produire un résultat similaire à ce qui suit :
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
********************************************************************************
Attention : la commande suivante apportera des modifications en direct à vos enregistrements DNS et éventuellement à d’autres paramètres. Veuillez vous assurer que vous êtes prêt pour cela, notamment en effectuant une sauvegarde de votre configuration DNS existante, et en vous assurant que vous avez les moyens de revenir en arrière si nécessaire.
Enfin, vous pouvez répercuter les changements sur votre fournisseur de DNS en direct :
- octodns-sync --config=./config/config.yaml --doit
Remarque : dans certains cas, OctoDNS refusera de pousser les changements s’il procède à un nombre important d’ajustements. Il s’agit d’un dispositif de protection automatique destiné à prévenir les erreurs de configuration accidentelles. Si vous rencontrez ce refus, vous pouvez ré-exécuter octodns-sync
en utilisant l’option --force
, mais assurez-vous que vous êtes prêt à le faire.
Vous verrez un résultat semblable à celui du test à blanc de cette étape, mais avec l’ajout d’un élément similaire à celui qui suit :
Output2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes
2019-07-07T23:17:30 INFO Manager sync: 9 total changes
Maintenant, si vous vérifiez les paramètres DNS de votre domaine dans le panneau de contrôle de DigitalOcean, vous verrez les changements.
Vous pouvez également vérifier la création de l’enregistrement en lançant une requête DNS pour votre domaine/zone déléguée en utilisant dig
.
Si vous ne disposez pas de dig
, vous devrez installer le package dnsutils
:
- sudo apt install dnsutils
Une fois que vous avez installé dig
, vous pouvez l’utiliser pour effectuer une recherche DNS pour votre domaine. Vous verrez que les dossiers ont été mis à jour en conséquence :
- dig +short your-domain
Vous verrez une sortie indiquant l’adresse IP et l’enregistrement DNS relatif à votre zone (que vous avez déployés à l’aide d’OctoDNS). Les enregistrements DNS peuvent prendre un certain temps pour se propager, vous devrez donc peut-être attendre et exécuter à nouveau cette commande.
Lors de cette dernière étape, vous avez effectué un contrôle syntaxique local du fichier de configuration DNS, puis vous l’avez déployé chez votre fournisseur de DNS en direct, et vous avez vérifié que les modifications avaient été apportées avec succès.
Dans cet article, vous avez mis en place OctoDNS et déployé une configuration DNS chez un fournisseur en direct. Vous pouvez désormais gérer et tester vos changements de configuration DNS dans un environnement sûr et hors ligne avant de les déployer en production.
Si vous souhaitez approfondir ce sujet, OctoDNS est conçu pour être intégré à votre pipeline de CI/CD, ce qui vous permet d’effectuer des tests approfondis et d’avoir plus de contrôle sur votre déploiement en production. Vous pourriez également envisager d’intégrer OctoDNS à vos processus de construction/déploiement de l’infrastructure, ce qui vous permettrait de déployer des serveurs et de les ajouter au DNS de manière entièrement automatique.
Si vous souhaitez aller plus loin avec OctoDNS, les articles suivants de DigitalOcean proposent quelques étapes intéressantes pour vous aider à intégrer OctoDNS à vos processus de gestion du changement et de déploiement d’infrastructures :
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!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.