CoreDNS logo

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

Documentation officielle

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.
  • errors active le module errors de coredns, permettant d'afficher les erreurs sur la sortie standard.
  • health active le module health permettant d'obtenir une réponse 200 et le mot OK via l'adresse <url serveur>:8080/health.
  • file /etc/coredns/domain.tld domain.tld active le module file et charge le fichier de zone /etc/coredns/domain.tld
  • forward . /etc/coredns/resolv.conf active le module forward et lui dit d'utiliser la configuration du fichier resolv.conf pour la résolution de noms de domaines inconnus localement
  • cache 300 active le module cache permettant de garder les résolution en cache pour, ici, 300s.
  • loop active le module loop et 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>

<ip> est l'IP de la machine où est installé CoreDNS.