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.local via une interface légère qui pilote Bind9.

TL;DR

  • Domaine : itinet.local → démo sur azni.itinet.local

  • NS : ns1.itinet.local192.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 de named-checkzone auto (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 via sudo).

  • 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

  1. Créer la zone azni.itinet.local depuis l’UI (pseudo = azni).

  2. Ajouter les A :

    • panel.azni.itinet.local192.168.0.12

    • www.azni.itinet.local192.168.0.20

    • api.azni.itinet.local192.168.0.21

  3. Appliquer : sudo rndc reload azni.itinet.local.

  4. 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

  1. Supprimer api.azni.itinet.local via l’UI → sudo rndc reload azni.itinet.localdig repasse à 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)

Retour en haut