Bind9 + Bash : DNS privé ESIEA
Contexte & cadrage
Établissement : ESIEA
Période : TechDay 2023 (prépa & démo)
Équipe : 4 personnes — mon rôle : scripts Bash + intégration PHP ↔ Bash (formulaires, appels
sudo)Objectif : permettre aux élèves d’obtenir un sous‑domaine privé
<pseudo>.itinet.localvia une interface légère qui pilote Bind9.
TL;DR
Domaine :
itinet.local→ démo surazni.itinet.localNS :
ns1.itinet.local→ 192.168.0.12 (Apache + Bind9 sur la même VM, Debian 11)UI : création de zone par pseudo, ajout/suppression d’enregistrements A
Ops :
rndc reload <zone>; pas de PTR auto, pas denamed-checkzoneauto (fidèle au projet)
Architecture
Bind9 (master) + Apache/PHP sur 192.168.0.12 ; NS déclaré
ns1.itinet.local.Modèle : une zone par pseudo → fichier sous
/etc/bind/user_zone/<pseudo>; déclaration dans/etc/bind/named.conf.local.Scripts Bash :
create_zone.sh,create_enr.sh,suppr_enr.sh(UI → scripts viasudo).Contrainte labo : IPv4 192.168.0.0/24, enregistrements A uniquement.
Template de zone :
$TTL 604800; SOA avec Serial entier simple, incrémenté à chaque modif.Application :
sudo rndc reload <pseudo>.itinet.local(reload granulaire, pas de restart global).
Ce que j’ai fait
Écriture des scripts Bash (création/suppression de zones et d’entrées).
Intégration PHP ↔ Bash (formulaires, appels
sudo, flux UI → scripts).
Démo
Créer la zone
azni.itinet.localdepuis l’UI (pseudo =azni).Ajouter les A :
panel.azni.itinet.local→192.168.0.12www.azni.itinet.local→192.168.0.20api.azni.itinet.local→192.168.0.21
Appliquer :
sudo rndc reload azni.itinet.local.Vérifier :
dig +short panel.azni.itinet.local A # -> 192.168.0.12
dig +short www.azni.itinet.local A # -> 192.168.0.20
dig +short api.azni.itinet.local A # -> 192.168.0.21
Supprimer
api.azni.itinet.localvia l’UI →sudo rndc reload azni.itinet.local→digrepasse à vide.
Résultats & KPI
Zone par pseudo opérationnelle ; ajout/suppression d’entrées depuis l’UI.
Reload granulaire de la zone (pas de restart complet).
Résolution validée via
dig(avant/après suppression).
Difficultés & leçons
Cohérence du Serial et syntaxe de zone : la moindre erreur casse le reload.
Périmètre volontairement restreint (A uniquement) pour une UI claire et fiable.
Droits système : scripts limités au répertoire
/etc/bind/user_zone/.
Stack & compétences mobilisées
Bind9, Debian 11, Apache, PHP, Bash.
DNS (fichiers de zones, SOA/NS/A, TTL/Serial) ; CLI :
dig,rndc.Intégration web ↔ système (formulaires → scripts) ; validation & édition de fichiers.
Réception
Démo TechDay : interface claire, fonctionnement conforme au scope posé (public étudiants & encadrants).
En quoi ce projet m’a été utile
- Renforcer mes bases DNS (Bind9) et l’automatisation via Bash.
Savoir appliquer des changements sans redémarrage (reload ciblé).
Concevoir une UI admin simple, compréhensible pour un public non‑expert.
Ressources
Repo git : à venir (refonte des scripts en cours)