Comment déployer et gérer votre DNS avec DNSControl sur Ubuntu 18.04

L’auteur a sélectionné la Electronic Frontier Foundation Inc pour recevoir un don dans le cadre de la Write pour DOnations programme.

introduction

DNSControl est un outil infrastructure-as-code qui vous permet de déployer et de gérer vos zones DNS à l’aide de la norme principes de développement logiciel, y compris le contrôle de version, les tests et le déploiement automatisé. DNSControl a été créé par Stack Exchange et est écrit en Go.

L’utilisation de DNSControl élimine bon nombre des pièges de la gestion DNS manuelle, car les fichiers de zone sont stockés dans un format programmable. Cela vous permet de déployer simultanément des zones sur plusieurs fournisseurs DNS, d’identifier les erreurs de syntaxe et d’afficher votre configuration DNS automatiquement, réduisant ainsi le risque d’erreur humaine. Une autre utilisation courante de DNSControl consiste à migrer rapidement votre DNS vers un autre fournisseur. par exemple, en cas d’attaque DDoS ou de panne du système.

Dans ce didacticiel, vous allez installer et configurer DNSControl, créer une configuration DNS de base et commencer à déployer des enregistrements DNS sur un fournisseur actif. Dans le cadre de ce didacticiel, nous utiliserons DigitalOcean comme exemple de fournisseur DNS. Si vous souhaitez utiliser un fournisseur different, la configuration est très similaire. Lorsque vous aurez terminé, vous pourrez gérer et tester votre configuration DNS dans un environnement hors ligne sécurisé, puis la déployer automatiquement en production.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

  • Un serveur Ubuntu 18.04 a été configuré en suivant la Initial Initial Server Setup avec Ubuntu 18.04, y compris un sudo non L’utilisateur root et le pare-feu activé pour bloquer les ports non essentiels. «++» fait référence à l’adresse IP du serveur sur lequel vous hébergez votre site Web ou votre domaine.

  • Un nom de domaine entièrement enregistré avec DNS hébergé par un fournisseur https://github.com/StackExchange/dnscontrol#dnscontrol. Ce tutoriel utilisera ++ partout et DigitalOcean en tant que fournisseur de services.

  • Une clé d’API DigitalOcean (jeton d’accès personnel) avec des autorisations de lecture et d’écriture. Pour en créer un, visitez le site Comment créer un jeton d’accès personnel.

Une fois ces informations prêtes, connectez-vous à votre serveur en tant qu’utilisateur non root pour commencer.

Étape 1 - Installation de DNSControl

DNSControl est écrit dans Go, vous allez donc commencer cette étape en installant Go sur votre serveur et en paramétrant votre + GOPATH +.

Go est disponible dans les référentiels logiciels par défaut d’Ubuntu, ce qui permet d’installer à l’aide d’outils de gestion de paquets classiques.

Commencez par mettre à jour l’index de package local pour refléter toutes les nouvelles modifications en amont:

sudo apt update

Ensuite, installez le paquet + golang-go +:

sudo apt install golang-go

Après confirmation de l’installation, + apt + téléchargera et installera Go et toutes ses dépendances requises.

Ensuite, vous allez configurer les variables d’environnement de chemin requises pour Go. Si vous souhaitez en savoir plus à ce sujet, vous pouvez lire ce didacticiel à l’adresse Comprendre le GOPATH. Commencez par éditer le fichier + ~ / .profile +:

nano ~/.profile

Ajoutez les lignes suivantes à la toute fin de votre fichier:

~ / .profile

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

Une fois que vous avez ajouté ces lignes au bas du fichier, sauvegardez-le et fermez-le. Rechargez ensuite votre profil en vous déconnectant et en vous reconnectant, ou en recherchant à nouveau le fichier:

source ~/.profile

Maintenant que vous avez installé et configuré Go, vous pouvez installer DNSControl.

La commande + go get peut être utilisée pour récupérer une copie du code, le compiler automatiquement et l’installer dans votre répertoire Go:

go get github.com/StackExchange/dnscontrol

Une fois cette opération terminée, vous pouvez vérifier la version installée pour vous assurer que tout fonctionne correctement:

dnscontrol version

Votre sortie ressemblera à ce qui suit:

Outputdnscontrol

Si vous voyez une erreur + dnscontrol: command not found, vérifiez de nouveau la configuration de votre chemin Go.

Maintenant que vous avez installé DNSControl, vous pouvez créer un répertoire de configuration et connecter DNSControl à votre fournisseur DNS afin de lui permettre d’apporter des modifications à vos enregistrements DNS.

Étape 2 - Configuration de DNSControl

Au cours de cette étape, vous allez créer les répertoires de configuration requis pour DNSControl et le connecter à votre fournisseur DNS afin qu’il puisse commencer à modifier en direct vos enregistrements DNS.

Tout d’abord, créez un nouveau répertoire dans lequel vous pouvez stocker votre configuration DNSControl, puis accédez-y:

mkdir ~/dnscontrol
cd ~/dnscontrol

Si vous prévoyez d’utiliser DNSControl pour écrire des fichiers de zone BIND, vous devez également créer le répertoire + zones +:

mkdir ~/dnscontrol/zones

BIND fichiers de zones sont une méthode brute et normalisée de stockage de zones / enregistrements DNS au format texte brut. Ils étaient à l’origine utilisés pour le logiciel serveur BIND DNS, mais sont maintenant largement adoptés comme méthode standard de stockage des zones DNS. Les fichiers de zone BIND générés par DNSControl sont utiles si vous souhaitez les importer sur un serveur DNS personnalisé ou auto-hébergé, ou à des fins d’audit.

Toutefois, si vous souhaitez simplement utiliser DNSControl pour transmettre les modifications DNS à un fournisseur géré, le répertoire + zones + ne sera pas nécessaire.

Ensuite, vous devez configurer le fichier + creds.json, qui permettra à DNSControl de s’authentifier auprès de votre fournisseur DNS et d’apporter des modifications. Le format de + creds.json + varie légèrement en fonction du fournisseur DNS que vous utilisez. Veuillez consulter la liste Service Providers dans la documentation officielle de DNSControl pour trouver la configuration de votre propre fournisseur.

Créez le fichier + creds.json dans le répertoire` + ~ / dnscontrol`:

cd ~/dnscontrol
nano creds.json

Ajoutez l’exemple de configuration + creds.json de votre fournisseur DNS au fichier. Si vous utilisez DigitalOcean en tant que fournisseur DNS, vous pouvez utiliser les éléments suivants:

~ / dnscontrol / creds.json

{
 "digitalocean": {
   "token": ""
 }
}

Ce fichier indique à DNSControl à quels fournisseurs DNS vous souhaitez le connecter.

Vous devrez fournir une forme d’authentification pour votre fournisseur DNS. Il s’agit généralement d’une clé API ou d’un jeton OAuth, mais certains fournisseurs ont besoin d’informations supplémentaires, comme indiqué dans la liste https://stackexchange.github.io/dnscontrol/provider-list (fournisseur de services) de la documentation officielle de DNSControl.

Si vous utilisez DigitalOcean en tant que fournisseur DNS, vous pouvez utiliser le jeton OAuth requis, dans les paramètres de votre compte DigitalOcean que vous avez généré en tant que conditions préalables.

Si vous avez plusieurs fournisseurs DNS différents, par exemple, pour plusieurs noms de domaine ou des zones DNS déléguées, vous pouvez les définir tous dans le même fichier + creds.json +.

Vous avez configuré les répertoires de configuration initiaux de DNSControl et configuré + creds.json + pour permettre à DNSControl de s’authentifier auprès de votre fournisseur DNS et d’apporter des modifications. Ensuite, vous allez créer la configuration pour vos zones DNS.

Étape 3 - Création d’un fichier de configuration DNS

Au cours de cette étape, vous créerez un fichier de configuration DNS initial contenant les enregistrements DNS de votre nom de domaine ou de votre zone DNS déléguée.

+ dnsconfig.js + est le fichier de configuration DNS principal pour DNSControl. Dans ce fichier, les zones DNS et leurs enregistrements correspondants sont définis à l’aide de la syntaxe JavaScript. C’est ce qu’on appelle un langage DSL ou langage spécifique à un domaine. La page JavaScript DSL de la documentation officielle de DNSControl fournit des détails supplémentaires.

Pour commencer, créez le fichier de configuration DNS dans le répertoire + ~ / dnscontrol +:

cd ~/dnscontrol
nano dnsconfig.js

Ajoutez ensuite l’exemple de configuration suivant au fichier:

~ / dnscontrol / dnsconfig.js

// Providers:

var  = NewRegistrar('', '');
var  = NewDnsProvider('', '');

// Domains:

D('', , DnsProvider(),
   A('@', '')
);

Cet exemple de fichier définit un nom de domaine ou une zone DNS chez un fournisseur particulier, qui dans ce cas est ++ hébergé par DigitalOcean. Un exemple d’enregistrement + A + est également défini pour la racine de la zone (+ @ +), pointant vers l’adresse IPv4 du serveur sur lequel vous hébergez votre domaine / site Web.

Un fichier de configuration DNSControl de base comprend trois fonctions principales:

  • + NewRegistrar (nom, type, métadonnées) +: définit le registraire de domaine pour votre nom de domaine. DNSControl peut l’utiliser pour apporter les modifications requises, telles que la modification des serveurs de noms faisant autorité. Si vous souhaitez uniquement utiliser DNSControl pour gérer vos zones DNS, vous pouvez généralement le laisser sous la forme + NONE +.

  • + NewDnsProvider (nom, type, métadonnées) +: définit un fournisseur de service DNS pour votre nom de domaine ou votre zone déléguée. C’est ici que DNSControl va pousser les modifications DNS que vous apportez.

  • + D (nom, registraire, modificateurs) +: définit un nom de domaine ou une zone DNS déléguée que DNSControl doit gérer, ainsi que les enregistrements DNS présents dans la zone.

Vous devez configurer + NewRegistrar () +, + NewDnsProvider () + et + D () + en conséquence avec la liste Service dans la documentation officielle de DNSControl.

Si vous utilisez DigitalOcean en tant que fournisseur DNS et que vous devez uniquement pouvoir apporter des modifications DNS (plutôt que des serveurs de noms faisant également autorité), l’exemple du bloc de code précédent est déjà correct.

Une fois terminé, enregistrez et fermez le fichier.

Dans cette étape, vous configurez un fichier de configuration DNS pour DNSControl, avec les fournisseurs pertinents définis. Ensuite, vous allez renseigner le fichier avec des enregistrements DNS utiles.

Étape 4 - Remplir votre fichier de configuration DNS

Ensuite, vous pouvez renseigner le fichier de configuration DNS avec des enregistrements DNS utiles pour votre site Web ou votre service, à l’aide de la syntaxe DNSControl.

Contrairement aux fichiers de zone BIND traditionnels, où les enregistrements DNS sont écrits dans un format brut, ligne par ligne, les enregistrements DNS dans DNSControl sont définis en tant que paramètre de fonction (modificateur de domaine) par rapport à la fonction + D () +, comme indiqué brièvement. à l’étape 3.

Il existe un modificateur de domaine pour chacun des types d’enregistrement DNS standard, notamment + A +, + AAAA +, '+ MX + ,' + TXT +, '+ + NS + , + CAA +, etc. Une liste complète des types d’enregistrement disponibles est disponible dans la section Domain Modifiers de la documentation de DNSControl.

Des modificateurs pour des enregistrements individuels sont également disponibles (modificateurs d’enregistrement). Actuellement, ils sont principalement utilisés pour définir la durée de vie des enregistrements individuels. Une liste complète des modificateurs d’enregistrement disponibles est disponible dans la section Record Modifiers de la documentation de DNSControl. Les modificateurs d’enregistrement sont facultatifs et peuvent, dans la plupart des cas, être omis.

La syntaxe de configuration des enregistrements DNS varie légèrement pour chaque type d’enregistrement. Voici quelques exemples pour les types d’enregistrement les plus courants:

  • + A + enregistre:

  • Objectif: pointer vers une adresse IPv4.

  • Syntaxe: + A ('', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + A ('', '', TTL ()) +

  • + AAAA + enregistre:

  • Objectif: pointer vers une adresse IPv6.

  • Syntaxe: + AAAA ('', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + AAAA ('', '') + (modificateur d’enregistrement laissé de côté, donc la durée de vie par défaut sera utilisée)

  • + CNAME + enregistre:

  • Objectif: faire de votre domaine / sous-domaine un alias d’un autre.

  • Syntaxe: + CNAME ('', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + CNAME ('', '') + (notez qu’un `+. + * * Final * doit * être inclus s’il y a des points dans la valeur)

  • + MX + enregistre:

  • Objectif: diriger le courrier électronique vers des serveurs / adresses spécifiques.

  • Syntaxe: + MX ('', '', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + MX ('',, '') + (notez qu’un `+. + * * * Final * doit * être inclus s’il y a des points dans la valeur)

  • + TXT + enregistre:

  • Objectif: ajouter du texte brut arbitraire, souvent utilisé pour des configurations sans leur propre type d’enregistrement dédié.

  • Syntaxe: + TXT ('', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + TXT ('', '') +

  • + CAA + enregistrements:

  • Objectif: restreindre et signaler les autorités de certification (CA) pouvant émettre des certificats TLS pour votre domaine / sous-domaine.

  • Syntaxe: + CAA ('', '', '', modificateurs d’enregistrement optionnels) +

  • Exemple: + CAA ('', '', '') +

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 ~/dnscontrol
nano dnsconfig.js

Ensuite, vous pouvez commencer à renseigner les paramètres de la fonction + D () + existante à l’aide de la syntaxe décrite dans la liste précédente, ainsi que de la commande https://stackexchange.github.io/dnscontrol/js#domain-modifiers [ Domain Modifiers] de la documentation officielle de DNSControl. Une virgule (+, +) doit être utilisée entre chaque enregistrement.

Pour référence, le bloc de code contient ici un exemple complet de configuration pour une configuration DNS initiale de base:

~ / dnscontrol / dnsconfig.js

...

D('', , DnsProvider(),
   A('', ''),
   A('', ''),
   A('', ''),
   AAAA('', ''),
   AAAA('', ''),
   AAAA('', ''),
   MX('', , ''),
   TXT('', ''),
   TXT('', '')
);

Une fois que vous avez terminé votre configuration DNS initiale, enregistrez et fermez le fichier.

Dans cette étape, vous configurez le fichier de configuration DNS initial, contenant vos enregistrements DNS. Ensuite, vous allez tester la configuration et la déployer.

Étape 5 - Test et déploiement de votre configuration DNS

Dans cette étape, vous allez exécuter une vérification de la syntaxe locale sur votre configuration DNS, puis déployer les modifications sur le serveur / fournisseur DNS actif.

Premièrement, déplacez-vous dans votre répertoire + dnscontrol +:

cd ~/dnscontrol

Ensuite, utilisez la fonction + preview + de DNSControl pour vérifier la syntaxe de votre fichier et afficher les modifications qu’il apportera (sans les apporter réellement):

dnscontrol preview

Si la syntaxe de votre fichier de configuration DNS est correcte, DNSControl affichera une vue d’ensemble des modifications qu’il apportera. Cela devrait ressembler à ce qui suit:

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

Si vous voyez un avertissement d’erreur dans votre sortie, DNSControl fournira des détails sur le type et l’emplacement de l’erreur dans votre fichier.

Enfin, vous pouvez diffuser les modifications apportées à votre fournisseur DNS en direct:

dnscontrol push

Vous verrez une sortie semblable à celle-ci:

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

Désormais, si vous vérifiez les paramètres DNS de votre domaine dans le panneau de configuration de DigitalOcean, vous verrez les modifications.

image: https: //assets.digitalocean.com/articles/dnscontrols1804/step5a.png [Une capture d’écran du panneau de configuration de DigitalOcean illustrant certaines des modifications DNS apportées par DNSControl.]

Vous pouvez également vérifier la création de l’enregistrement en exécutant une requête DNS pour votre domaine / zone déléguée. Vous constaterez que les enregistrements ont été mis à jour en conséquence:

dig +short

La sortie affiche l’adresse IP et l’enregistrement DNS pertinent de votre zone déployée à l’aide de DNSControl. La propagation des enregistrements DNS peut prendre un certain temps. Vous devrez peut-être attendre et réexécuter cette commande.

Au cours de cette dernière étape, vous avez effectué une vérification de la syntaxe locale du fichier de configuration DNS, que vous avez ensuite déployée auprès de votre fournisseur DNS actif et que les modifications ont été apportées avec succès.

Conclusion

Dans cet article, vous avez configuré DNSControl et déployé une configuration DNS sur un fournisseur actif. Vous pouvez désormais gérer et tester vos modifications de configuration DNS dans un environnement hors ligne sécurisé avant de les déployer en production.

Si vous souhaitez approfondir ce sujet, DNSControl est conçu pour être intégré à votre pipeline CI / CD, vous permettant ainsi d’exécuter des tests approfondis et de mieux contrôler votre déploiement en production. Vous pouvez également envisager d’intégrer DNSControl dans vos processus de construction / déploiement d’infrastructure, ce qui vous permet de déployer des serveurs et de les ajouter au DNS de manière totalement automatique.

Si vous souhaitez aller plus loin avec DNSControl, les articles suivants de DigitalOcean fournissent quelques étapes intéressantes pour vous aider à intégrer DNSControl à vos flux de travaux de gestion des modifications et de déploiement d’infrastructure: