Skip to content

Configuration DNS

Gabrielle Cruz edited this page Aug 25, 2023 · 5 revisions

Arborescence

├─ Intra
|   ├─ soa
|   |   ├─ Dockerfile
|   |   ├─ named.conf
|   |   ├─ mmes-3.zone
|   ├─ resolver
|   |   ├─ Dockerfile
|   |   ├─ named.conf
|   ├─ docker-compose.yml
├─ Public
|   ├─ soa
|   |   ├─ Dockerfile
|   |   ├─ named.conf
|   |   ├─ db.mmes-3
├─ docker-compose.yml

Glue Record

Pour pouvoir gérer la zone mmes-3.ephec-ti.be, il nous faut au préalable, donner notre glue record aux professeurs:

tmes-3  IN NS ns.tmes-3.ephec-ti.be.
ns.tmes-3.ephec-ti.be. IN A 51.91.248.16

Grâce à cela, toutes les requêtes concernant notre zone mmes-3.ephec-ti.be arrivant sur le NS de ephec-ti.be sera délégué à notre SOA externe.

Docker Compose

Nous trouvons notre fichier Docker Compose ici. Ce fichier nous permet de relier tous nos services dans le dossier Intra et les déployer dans seulement 2 lignes de commandes:

  • docker compose up -d: lancement du docker compose en mode detached (background)
  • docker compose down: arrêt des services du fichier

Services

Dans la partie services, un service à déployer est écrit comme tel:

<nom_du_service>:
  build:
    context: <chemin_vers_dockerfile>
    dockerfile: <nom_du_dockerfile>
  container_name: <nom_personnalisé>
  networks:
    <nom_du_reseau>:
      ipv4_address: <ip_statique>

et ces options supplémentaires peuvent être ajoutées:

  • dns: l'adresse IP d'au moins un serveur à ajouter au container; Docker reconnaît celui de l'hôte par défaut
  • ports: les ports à ouvrir entre le conteneur et l'hôte pour la communication à l'extérieur.

Réseaux

Dans la partie networks, un réseau (ou sous-réseau) est écrit ainsi:

<nom_du_reseau>:
  name: <nom_du_reseau>
  ipam:
    driver: default
    config:
      - subnet: <ip_reseau_et_son_masque> (ex: 192.168.0.0/24)
        gateway: <ip_statique> (optionnel car docker prend la première adresse disponible par défaut)

Docker n'autorisera pas la création d'un sous-réseau qui porte la même plage d'adresse que le réseau bridge (Docker par défaut).

Fichiers de configuration

Service Interne

SOA

Dockerfile
FROM ubuntu:latest

RUN apt update && apt full-upgrade -y && \
    apt install bind9 bind9utils dnsutils net-tools nano -y

COPY named.conf /etc/bind/named.conf
COPY mmes-3.zone /etc/bind/zones/mmes-3.zone


EXPOSE 53/udp
EXPOSE 53/tcp

VOLUME /etc/bind

CMD ["named", "-c", "/etc/bind/named.conf", "-g"]
mmes-3.zone
$TTL 604800      ; 1 day
$ORIGIN intra.mmes-3.ephec-ti.be.
@    IN    SOA  ns.intra.mmes-3.ephec-ti.be.  (
                                1          ; serial
                                3600       ; refresh
                                3000       ; retry
                                4619200    ; expire
                                604800     ; minimum
                                )

@    IN    NS   ns.intra.mmes-3.ephec-ti.be.

ns         IN       A        172.16.1.2
resolver   IN       A        172.16.1.3
mail       IN       A        172.16.0.4
web        IN       A        172.16.1.5
named.conf
options {
        directory "/etc/bind";

        listen-on { any; };
        listen-on-v6 { none; };

        allow-query {
                172.16.0.0/24;
                172.16.1.0/24;
                192.168.1.0/24;
        };

        allow-transfer {
                none;
        };

        pid-file "/var/run/named/named.pid";


        allow-recursion { none; };
        recursion no;
};

zone "intra.mmes-3.ephec-ti.be" IN {
    type master;
    file "/etc/bind/mmes-3.zone";
};

zone "0.16.172.in-addr.arpa" IN {
    type master;
    file "/etc/bind/reverse";
};

Resolver

Dockerfile
FROM ubuntu:latest

RUN apt update && apt full-upgrade -y && apt install bind9 bind9utils dnsutils net-tools nano -y

COPY named.conf /etc/bind/named.conf

CMD ["named", "-c", "/etc/bind/named.conf", "-g"]
named.conf
options {
        directory "/etc/bind";

        allow-query {
                172.16.0.0/24;
                172.16.1.0/24;
                192.168.0.0/24;
        };

        allow-recursion {
                172.16.0.0/24;
                172.16.1.0/24;
                192.168.0.0/24;
        };

        listen-on port 53 { any; };
        listen-on-v6 { none; };

        pid-file "/var/run/named/named.pid";

        allow-transfer { none; };
        forwarders {
                8.8.8.8;
                51.91.248.16;
         };
};

zone "localhost" IN {
        type master;
        file "pri/localhost.zone";
        allow-update { none; };
        notify no;
};

zone "127.in-addr.arpa" IN {
        type master;
        file "pri/127.zone";
        allow-update { none; };
        notify no;
};

zone "intra.mmes-3.ephec.ti.be" {
    type forward;
    forwarders { 172.16.1.2; };
    forward only;
};

zone "0.16.172.in-addr.arpa" IN {
    type forward;
    forwarders { 172.16.1.2; };
    forward only;
};

Service Public

Dockerfile

Ce fichier permet le démarrage du conteneur SOA externe de notre DNS.

FROM debian

RUN apt update && apt full-upgrade -y && \
    apt install bind9 bind9utils dnsutils net-tools nano -y

COPY named.conf /etc/bind/named.conf
COPY db.mmes-3 /etc/bind/db.mmes-3

EXPOSE 53/udp
EXPOSE 53/tcp
EXPOSE 953/udp
EXPOSE 953/tcp

VOLUME /etc/bind

CMD ["named", "-c", "/etc/bind/named.conf", "-g"]
db.mmes-3

Le fichier complèt se trouve ici, et l'extrait de SOA de base se trouve ci-dessous:

$TTL 604800
$ORIGIN mmes-3.ephec-ti.be.
@       IN      SOA     ns.mmes-3.ephec-ti.be. hostmaster.mmes-3.ephec-ti.be. (
                                1          ; serial
                                3600       ; refresh
                                3000       ; retry
                                4619200    ; expire
                                604800     ; minimum
                                )

; name serveur record
@       IN      NS      ns.mmes-3.ephec-ti.be.
@       IN      MX  10  mail
;ressource record
@       IN      A       51.91.248.16
ns      IN      A       51.91.248.16
named.conf
options {

  directory "/etc/bind";

    listen-on {
        any;
     };

    listen-on-v6 {
        none;
        };

    allow-query {
        any;
        };

    allow-transfer {
        none;
        };

    allow-update {
        none;
        };

    allow-recursion {
        none;
        };

    recursion no;

    pid-file "/var/run/named/named.pid";

    #Sécurisation
    dnssec-validation yes;
};

//zone du SOA publique
zone "mmes-3.ephec-ti.be" {
    type master;
    file "/etc/bind/db.mmes-3.signed";
};

Configuration de bind9

La configuration de bind9 est relativement simple; il suffit de créer une zone et d'y ajouter les informations nécessaires à celle-ci.

Dans le fichier /etc/bind/named.conf, il faut ajouter la zone mmes-3.ephec-ti.be.

Ensuite, il faut faire ce zone en créant un fichier nommé db.mmes-3. Ce fichier contient toutes les informations étant résolvables publiquement (Resource Record).

Après la création de ces 2 fichiers, nous devons redémarrer le service:

service named restart

et nous pouvons tester la résolution des noms avec ce commande:

dig ns.mmes-3.ephec-ti.be

Maintenance du service

SOA

Pour ajouter de futurs services, il faut créer un resource record pour chaque service supplémentaire: un dans le fichier zone, ET un dans le fichier de reverse zone. Il faut préciser le type pour ajouter un RR dans une zone:

  • A pour IPv4
  • AAAA pour IPv6
  • MX pour le mail

Exemple: <nom> IN A <ip_du_service>

Pour la reverse zone, il faut simplement préciser le dernier octet de l'adresse IP et son nom correspondant

Exemple: 24 IN PTR exemple.woodytoys.lab.

Troubleshooting

Si des erreurs venaient à survenir, il faut penser aux suivants:

  • vérifier l'ouverture des port 53 TCP et UDP sur la machine et les conteneurs Docker
  • vérifier la syntaxe correcte sur la configuration des fichiers de zones, la présence du paramètre $ORIGIN, et l'assignation de l'adresse exacte pour chaque service
  • vérifier la référencement correcte pour les fichier named.conf du SOA

Si le problème survient, nous pouvons vérifier les logs dans le dossier /var/log du conteneur défaillant.

Resolver

Pour maintenir un résolveur fonctionnel, il faut ajouter dans le fichier named.conf les futures zones à relayer en précisant:

  • son nom
  • son type
  • l'IP vers laquelle on souhaite rediriger

N'oubliez pas d'ajouter la reverse zone également si configuré sur le SOA.

Exemple:

zone "<nom_du_domaine>" IN {
    type forward;
    forwarders { <ip_du_SOA> };
    forward only;

Troubleshooting

Si des erreurs venaient à survenir, il faut penser aux suivants:

  • vérifier l'ouverture des port 53 TCP et UDP sur la machine et les conteneurs Docker
  • vérifier la référencement correcte pour les fichier named.conf du SOA

Clone this wiki locally