ArmandXUuu / BIND_Server

Dockerized BIND Server

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BIND_Server

Ce repo sert de tutoriel pour installer un serveur DNS dans un conteneur Docker.

Il est composé:

  • d'un Dockerfile qui importe une image Docker officielle du serveur DNS BIND (Berkeley Internet Name Daemon) fournie par l'Internet Systems Consortium. Cette image est basée sur Ubuntu 20.04 LTS. Pour plus de détails, consultez https://hub.docker.com/r/internetsystemsconsortium/bind9.
  • des fichiers de configurations named.conf.options et named.conf.local qui sont ensuite copiés dans le conteneur à l'emplacement /etc/bind/.
  • des fichiers de zones db.172.17.0.2 et db.chapeau.tu qui sont eux copiés dans le conteneur à l'emplacement /var/cache/bind/.

Une zone "chapeau.tu" est créée ainsi que sa zone pour la recherche DNS inversée.

Configuration des noms de domaines

Le nom de domaine "chapeau.tu" est géré par le serveur DNS.

Le sous-domaine ns.chapeau.tu désigne l'IP du serveur de nom (NS Record).

Le sous-domain turlututu.chapeau.tu désigne l'IP d'un client (ou d'un service) sous l'autorité du serveur de nom.

Configuration IP

L'IP du serveur de nom nommé ns.chapeau.tu est définie à db.172.17.0.2.

L'IP du client (ou du service) nommé turlututu.chapeau.tu est définie à db.172.17.0.3.

Il faut adapter les IP à votre configuration réseau.

Pour vérifier l'IP d'un conteneur:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [NOM ou ID du conteneur]

Vérifier que les adresses IP de chaque fichier, y compris les IP inversées, sont bien conforme à la réalité de votre configuration réseau. Pour le fichier db.172.17.0.2, seul le dernier octet de l'IP est indiqué dans les A PTR Records.

Mise en oeuvre

Voici les étapes pour mettre en route le serveur DNS:

  • Clonage du repo:
git clone https://github.com/BuzzRage/BIND_Server
  • Déplacement dans le répertoire du repo:
cd ./BIND_Server
  • Si ce n'est pas déjà fait, démarrage du service docker:
sudo systemctl start docker
  • Configuration des IP dans les fichiers du repo. Si aucun conteneur n'est déjà lancé, cette étape n'est pas nécessaire.

Une fois les fichiers configurés pour notre réseau et nos besoins, il faut maintenant construire l'image et lancer le conteneur en ouvrant les ports spécifiques.

  • Construction de l'image que l'on nommera dnsd_img:
docker built -t dnsd_img .
  • Lancement du conteneur dnsd en exposant les ports 53 en tcp/udp:
docker run -d --name=dnsd --restart always --publish 53:53/udp --publish 53:53/tcp --publish 127.0.0.1:953:953/tcp	dnsd_img

Pour vérifier si tout fonctionne, faire une requête dig sur un des sous-domaines en passant spécifiquement par le serveur de nom précédemment configuré:

dig @172.17.0.2 turlututu.chapeau.tu

Réponse attendue:

; <<>> DiG 9.16.13 <<>> @172.17.0.2 turlututu.chapeau.tu
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22445
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 833644a49531cb7f010000006068534cd49f061a11bcc449 (good)
;; QUESTION SECTION:
;turlututu.chapeau.tu.          IN      A

;; ANSWER SECTION:
turlututu.chapeau.tu.   604800  IN      A       172.17.0.3

;; Query time: 0 msec
;; SERVER: 172.17.0.2#53(172.17.0.2)
;; WHEN: sam. avril 03 13:36:44 CEST 2021
;; MSG SIZE  rcvd: 93

Configuration côté client

Pour configurer un client DNS sur le même réseau que le serveur de nom précédemment configuré, il faut modifier le fichier /etc/resolv.conf pour y ajouter l'IP du serveur de nom via la directive nameserver comme il suit:

# Generated by NetworkManager
search home
nameserver 172.17.0.2
nameserver 192.168.1.1

Il est désormais possible pour ce client de faire la même requête dig sans avoir à spécifier le serveur de nom par lequel passer.

Test avec un serveur Web

Le fichier index.html présent dans ce repo sert de page web sommaire à placer dans le répertoire /var/wwww/html d'un serveur web.

Pour ce tutoriel, le plus simple est de lancer la commande suivante:

docker run --name webserver -d -p 1664:80 --mount type=bind,source="$(pwd)",target=/var/www/html php:apache

Pour vérifier si tout fonctionne, après avoir configuré le résolveur DNS côté client, on peut ouvrir un navigateur web et aller sur http://turlututu.chapeau.tu

Une autre manière de vérifier est de passer par le programme wget:

wget turlututu.chapeau.tu

Cela va télécharger le fichier index.html dans le répertoire courant.

About

Dockerized BIND Server


Languages

Language:Turing 48.1%Language:HTML 35.3%Language:Dockerfile 16.6%