CoreDNS 
CoreDNS permet de configurer son propre serveur DNS. Cela a plusieurs interêts :
- Avoir un cache local des résolutions DNS
- Créer ses propres résolutions DNS
Installation
Nous allons installer coreDNS via son conteneur Docker.
Pour cela nous allons utiliser le fichier docker-compose.yml suivant:
version: '3' services: coredns: image: coredns/coredns restart: "always" container_name: "coredns" volume: - "./data/:/etc/coredns/ ports: - "53:53:udp" command: - "-conf" - "/etc/coredns/Corefile"
Cette configuration crée un conteneur basé sur l'image coredns/coredns et appelé coredns.
Ce conteneur utilise le dossier data sur la machine hôte en guise de répertoire /etc/coredns au sein du conteneur.
Le port 53 du conteneur est exposé sur le port 53 de la machine pour tout le contenu UDP.
Le port 53 étant le port par défaut pour les services DNS.
Enfin, on spécifie au conteneur d'utiliser le fichier de configuration désiré au démarrage.
Notez qu'on utilise ici le dossier data situé dans le même répertoire que le fichier docker-compose.yml.
Il est bien sûr possible de changer le dossier utilisé, cependant, data est celui qui sera utilisé dans la suite de cette documentation.
Configuration
CoreDNS se configure via trois fichiers, tous situés dans data.
Corefile
Le fichier Corefile, ici, a pour but de configurer notre serveur DNS.
.:53 { errors health file /etc/coredns/<domain.tld> <domain.tld> forward . /etc/coredns/resolv.conf cache 300 loop }
Ici :
.:53{ ... }definit un nouveau bloc serveur écoutant sur le port 53.errorsactive le moduleerrorsde coredns, permettant d'afficher les erreurs sur la sortie standard.healthactive le modulehealthpermettant d'obtenir une réponse 200 et le mot OK via l'adresse<url serveur>:8080/health.file /etc/coredns/domain.tld domain.tldactive le modulefileet charge le fichier de zone/etc/coredns/domain.tldforward . /etc/coredns/resolv.confactive le moduleforwardet lui dit d'utiliser la configuration du fichier resolv.conf pour la résolution de noms de domaines inconnus localementcache 300active le modulecachepermettant de garder les résolution en cache pour, ici, 300s.loopactive le moduleloopet permet de detecteur les boucles de résolution, et de les arrêter.
domain.tld
Ce fichier permet de définir des redirections. On peut ajouter autant de ligne file ... dans le fichier Corefile pour chaque domaine à gérer.
Par exemple, pour créer un domaine monsite.toto, ajouter la ligne suivante dans Corefile :
file /etc/coredns/monsite.toto monsite.toto
Puis, créer un fichier monsite.toto contenant la ligne suivante :
monsite.toto. IN SOA sns.dns.icann.org. noc.dns.icann.org. 2019081441 7200 3600 1209600 3600
Pour ajouter des résolutions DNS, ajouter dans ce fichier des lignes de la forme :
<sousdomaine>.monsite.toto. IN A <ip>
Par exemple, un fichier monsite.toto contenant une redirection vers 3 machines virtuelles sur le réseau local pourrait être :
monsite.toto. IN SOA sns.dns.icann.org. noc.dns.icann.org. 2019081441 7200 3600 1209600 3600 vm1.monsite.toto. IN A 192.168.1.1 vm2.monsite.toto. IN A 192.168.1.2 vm3.monsite.toto. IN A 192.168.1.3
resolv.conf
Le fichier resolv.conf permet de définir les serveurs DNS sur lequels Coredns va chercher la définition des noms de domaines qui lui sont inconnus.
Par exemple, pour utiliser les serveurs de quad9, le fichier resolv.conf serait :
nameserver 9.9.9.9
Utilisation
Pour utiliser le serveur CoreDNS installé, ajouter en première ligne du fichier /etc/resolv.conf de votre machine :
nameserver <ip>
Où <ip> est l'IP de la machine où est installé CoreDNS.