Documentation DNS - bahuwart/Projet-admin-2 GitHub Wiki

Configuration générale

On a une partie interne et un partie externe. La partie interne est accessible seulement de l'interne et permet de résoudre les différents services interne tandis que la partie externe permet à tout le monde d'accéder au ressources dns public notamment le site b2b et www.

DNS interne

Pour le dns interne il faut faire en sorte d'accepter seulement certaine adresse ip.

        allow-recursion {
                172.18.0.0/16;
                127.0.0.1/32;
        };

resolver :

# Utilisez l'image de base Ubuntu avec BIND9 préinstallé
FROM ubuntu/bind9

# Met à jour les sources de paquets et installe BIND9
RUN apt-get update && apt-get install -y bind9

# Copie le fichier named.conf dans le répertoire /etc/bind/
COPY named.conf /etc/bind/

# Crée un répertoire pour les fichiers journaux de BIND
RUN mkdir /var/log/named

# Expose le port 53 en mode TCP pour les requêtes DNS entrantes
EXPOSE 53/tcp

# Expose le port 53 en mode UDP pour les requêtes DNS entrantes
EXPOSE 53/udp

# Commande par défaut qui sera exécutée lorsque le conteneur démarre
CMD ["/usr/sbin/named","-g"]

Zone racine (".") :

zone "." IN {
        type hint;
        file "/usr/share/dns/root.hints";
};

Caractéristiques :

  • Type : hint
  • Fichier : "/usr/share/dns/root.hints"

Explication :

Cette zone est configurée avec le type hint, ce qui indique au serveur BIND que cette zone contient des indices (hints) pour la résolution DNS. Le fichier "/usr/share/dns/root.hints" contient des informations sur les serveurs racines de l'Internet, ce qui permet à ce serveur BIND de démarrer la résolution des noms à partir de ces serveurs racines.

Zone "localhost" :

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

Caractéristique :

  • Cette zone gère les enregistrements DNS pour le nom de domaine "localhost".
  • Elle est de type master, ce qui signifie que le serveur BIND gère directement les enregistrements de cette zone.
  • Le fichier "db.local" contient les enregistrements de cette zone.
  • Les mises à jour sont désactivées avec allow-update { none; } pour empêcher toute modification non autorisée.
  • Les notifications sont désactivées avec notify no; pour éviter l'envoi de notifications lors de mises à jour.

Explication :

La zone "localhost" est utilisée pour gérer les enregistrements DNS liés au nom de domaine spécial "localhost". Le nom de domaine "localhost" est utilisé pour faire référence à la machine locale. Cette zone est généralement présente pour permettre au serveur DNS de résoudre le nom "localhost" en une adresse IP spéciale (127.0.0.1), qui est l'adresse IP loopback, et inversement.

Zone "127.in-addr.arpa" :

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

Caractéristiques :

  • Type : master
  • Fichier : "db.127"
  • Mises à jour autorisées : none
  • Notification : désactivée

Explication :

Cette zone gère la résolution inversée pour les adresses IP dans le bloc 127.0.0.0/8 (utilisé pour localhost). Elle est également de type master et contient les enregistrements de cette zone. Les mises à jour sont désactivées pour la sécurité et les notifications sont désactivées pour éviter les notifications de mises à jour.

Zone "woodytoys.interne" :

zone "woodytoys.interne" IN {
        type forward;
        forwarders {172.18.0.3;};
        forward only;
};

Caractéristiques :

  • Type : forward
  • Serveurs de redirection (forwarders) : 172.18.0.3
  • Redirection uniquement : oui

Explication :

Cette zone est configurée pour rediriger toutes les requêtes vers le domaine "woodytoys.interne" vers le serveur DNS à l'adresse IP 172.18.0.3 qui est le SOA de la zone. Le type forward indique que les requêtes seront redirigées vers les serveurs configurés comme forwarders. forward only; spécifie que ce serveur ne répondra qu'aux requêtes de redirection et ne résoudra pas localement les noms de cette zone.

Zone "0.18.172.in-addr.arpa" :

zone "0.18.172.in-addr.arpa" IN {
        type forward;
        forwarders {172.18.0.3;};
        forward only;
};

Caractéristiques :

  • Type : forward
  • Serveurs de redirection (forwarders) : 172.18.0.3
  • Redirection uniquement : oui

Explication :

Cette zone est similaire à la zone précédente, mais elle gère la résolution inversée pour les adresses IP dans le bloc 172.18.0.0/16. Les requêtes de résolution inversée pour ces adresses IP seront redirigées vers le serveur DNS à l'adresse IP 172.18.0.3.

SOA :

# Utilisez l'image de base Ubuntu avec BIND9 préinstallé
FROM ubuntu/bind9

# Met à jour les sources de paquets et installe BIND9
RUN apt-get update && apt-get install -y bind9

# Copie le fichier de configuration principal named.conf dans /etc/bind/
COPY named.conf /etc/bind/

# Copie le dossier "forward" contenant les configurations de zone vers /etc/bind/
COPY forward /etc/bind/

# Copie le dossier "reverse" contenant les configurations de zone inversée vers /etc/bind/
COPY reverse /etc/bind/

# Crée un répertoire pour les fichiers journaux de BIND
RUN mkdir /var/log/named

# Expose le port 53 en mode TCP pour les requêtes DNS entrantes
EXPOSE 53/tcp

# Expose le port 53 en mode UDP pour les requêtes DNS entrantes
EXPOSE 53/udp

# Commande par défaut qui sera exécutée lorsque le conteneur démarre
CMD ["/usr/sbin/named","-g"]

ici on définit qui est le maitre pour la zone et où se trouve son fichier de zone.

zone "." IN {
        type hint;
        file "/usr/share/dns/root.hints";
};



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


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

zone "woodytoys.interne" IN {
        type master;
        file "/etc/bind/forward";
        allow-update {none;};
        notify no;
};

zone "0.18.172.in-addr.arpa" IN {
        type master;
        file "etc/bind/reverse";
        allow-update {none;};
        notify no;
};

Fichier de zones

il y a le fichier de zone forward et reverse, forward permet de résoudre les nom de domaines vers adresse ip et le reverse des adresses ip aux nom de domaines

forward :

$ORIGIN woodytoys.interne.
$TTL 86400
@     IN     SOA    soa.woodytoys.interne.     hostmaster.woodytoys.interne. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

      IN     NS     soa.woodytoys.interne.

      IN     MX     10     mail.woodytoys.interne.

dns             IN     A       172.18.0.2
soa             IN     A       172.18.0.3
www             IN     A       172.18.0.5
mail            IN     A       172.18.0.4
db              IN     A       172.18.0.6

reverse:

$ORIGIN 0.18.172.in-addr.arpa.
$TTL 86400
@     IN     SOA    soa.woodytoys.interne.     hostmaster.woodytoys.interne. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

        IN      NS      soa.woodytoys.interne.

2       IN      PTR     dns.woodytoys.interne.
3       IN      PTR     soa.woodytoys.interne.
5       IN      PTR     www.woodytoys.interne.
4       IN      PTR     mail.woodytoys.interne.
6       IN      PTR     db.woodytoys.interne.

DNS Publique

ici on définit qui est le maitre pour la zone et où se trouve son fichier de zone ainsi que la configuration pour activer le dnssec. Ici on accepte toutes les requêtes provenant de l'extérieur.

options {

        directory "/var/cache/bind";

        // Accepte toutes les requêtes
        allow-query { any; };
        allow-recursion {none;};

        // Configurer pour écouter sur le port 53
        listen-on port 53 {any;};
        listen-on-v6 { none; };
        pid-file "/var/run/named/named.pid";
        allow-transfer { none; };

        // Active le dnssec
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
};
zone "." IN {
        type hint;
        file "/usr/share/dns/root.hints";
};



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


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

zone "m2-3.ephec-ti.be" IN {
        type master;
        file "/etc/bind/forward.signed";
        notify yes;
};


zone "166.236.52.in-addr.arpa" IN {
        type master;
        file "/etc/bind/reverse";
        allow-update {none;};
        notify no;
};

Il y a le fichier de zone forward et reverse. Forward permet de résoudre les nom de domaines vers adresse ip. Reverse, des adresses ip aux nom de domaines.

forward :

$ORIGIN m2-3.ephec-ti.be.
$TTL 86400
@     IN     SOA    ns.m2-3.ephec-ti.be.     hostmaster.m2-3.ephec-ti.be. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

      IN     NS     ns.m2-3.ephec-ti.be.

      IN     MX     10     mail.m2-3.ephec-ti.be.

ns              IN     A       52.236.166.204
www             IN     A       52.236.166.204
mail            IN     A       52.236.166.204
b2b             IN     A       52.236.166.204

reverse:

$ORIGIN 166.236.52.in-addr.arpa.
$TTL 86400
@    IN     SOA     ns.m2-3.ephec-ti.be. hostmaster.m2-3.ephec-ti.be. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day

     IN     NS     ns.m2-3.ephec-ti.be.

       IN     MX     mail.m2-3.ephec-ti.be.
204    IN     PTR    ns.m2-3.ephec-ti.be.
204    IN     PTR    www.m2-3.ephec-ti.be.
204    IN     PTR    mail.m2-3.ephec-ti.be.

Démarrer les service dns

le service dns interne est initialisé dans le docker-compose.yml du projet tandis que le soa publique est démarré séparément ce qui facilite l'update des clés dnssec et des zones. il ne faut pas oublier de mapper le port 53 de la machine hôte au container soa_externe pour UDP et TCP afin qu'il puisse récupérer les requêtes dns venant d'internet sans problème.

version: '3'

services:
  pc1:
    build:
      context: pc1/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.7
    dns:
      - 172.18.0.3
    container_name: pc1

  pc2:
    build:
      context: pc2/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.8
    dns:
      - 172.18.0.3
    container_name: pc2

  mail:
    build:
      context: mail/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.4
    dns:
      - 172.18.0.3
    container_name: mail

  dns:
    build:
      context: dns/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.2
    dns:
      - 172.18.0.3
    container_name: dns

  soa:
    build:
      context: soa/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.3
    dns:
      - 172.18.0.3
    container_name: soa

  db:
    build:
      context: db/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.6
    dns:
      - 172.18.0.3
    container_name: db

  web2:
    build:
      context: web2/
      dockerfile: Dockerfile
    networks:
      intranet:
        ipv4_address: 172.18.0.5
    dns:
      - 172.18.0.3
    container_name: web2
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - db


networks:
  intranet:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16

DNS externe

dans le dossier soa2 du projet

docker build -t soa_externe .
docker run -d -p 53:53/tcp -p 53:53/udp --name soa_externe soa_externe
docker exec -it soa_externe /bin/bash

cd /etc/bind

dnssec-keygen -a RSASHA256 -b 4096 -n ZONE m2-3.ephec-ti.be
dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n ZONE m2-3.ephec-ti.be

for key in `ls Km2-3.ephec-ti.be*.key`
do
echo "\$INCLUDE /etc/bind/$key">> forward
done


dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o m2-3.ephec-ti.be -t forward

Update des services

Si on veut rajouter un service interne ou rajouter une ressource accessible à tous sur internet, il suffit de rajouter un RR (ressource record) dans les fichiers de zone (forward, reverse) correspondant

forward :

example   IN   A   <IP ADDRESS>

après accessible sous cet forme : example.domain.xyz

reverse :

IP       IN      PTR     example.domain.xyz

Test

Pour tester si le dns fonctionne il suffit de ping ou de dig la ressource voulue

ping www.m2-3.ephec-ti.be OR  dig www.m2-3.ephec-ti.be
⚠️ **GitHub.com Fallback** ⚠️