Rapport troubleshooting - bpatureau/admin-2-TP GitHub Wiki

Auteurs : Maxime, Bastien, Guillaume

1. Bug report

Liens vers l'issue github

Description du bug :

Lors de la configuration de notre DNS nous avons eu un bug qui nous empêchais de résoudre le nom l1-2.ephec-ti.be.

Résultat attendu :

La commande ping l1-2.ephec-ti.be doit fonctionner et la commande dig l1-2.ephec-ti.be doit renvoyer le record A du serveur dns.

Résultat obtenu :

dig l1-2.ephec-ti.be

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> l1-2.ephec-ti.be
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63978
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;l1-2.ephec-ti.be.              IN      A

;; Query time: 35 msec
;; SERVER: 213.186.33.99#53(213.186.33.99) (UDP)
;; WHEN: Sat May 10 15:27:13 UTC 2025
;; MSG SIZE  rcvd: 45

Système concerné :

  • Infrastructure :

    • Serveur DNS dans un container docker sur un VPS
  • Schéma : schema-reseau

  • Logiciel :

    • Image du serveur dns : internetsystemsconsortium/bind9:9.18
  • Configuration :

  • Dockerfile :

FROM internetsystemsconsortium/bind9:9.18

ADD named.conf /etc/bind/named.conf
ADD l1-2.zone /etc/bind/l1-2.zone

RUN chown -R bind:bind /etc/bind/

ENTRYPOINT []
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
  • Fichier zone /etc/bind/l1-2.zone :
$TTL 86400
@   IN  SOA ns.l1-2.ephec-ti.be. admin.l1-2.ephec-ti.be. (
        2025041420  ; Serial (YYYYMMDDXX)
        21600       ; Refresh
        3600        ; Retry (1h)
        1209600     ; Exp
        86400       ; Valeur par défaut du TTL négatif
)

; Les NS
@   IN  NS  ns.l1-2.ephec-ti.be.

; Les A
ns      IN  A    54.36.180.26
www     IN  A    54.36.181.70
mail    IN  A    54.36.180.122
@       IN  A    54.36.180.26
  • Fichier de configuration bind /etc/bind/named.conf :
options {
        directory "/var/cache/bind";
        // version statement for security to avoid hacking known weaknesses
        // if the real version number is revealed
        version "not currently available";
        allow-query { any; };
        allow-query-cache { none; };
        recursion no;
};

zone "l1-2.ephec.ti.be." {
        type master;
        file "/etc/bind/l1-2.zone";
        allow-transfer {
                none;
        };
        inline-signing yes;
        dnssec-policy default;
};

Reproduction du bug :

  1. Créer cette strucutre de fichier et remplir le contenu de ces fichiers avec les fichiers correspondant ci-dessus:
DNS/
├── named.conf
├── l1-2.zone
└── Dockerfile
  1. Démmarer le serveur DNS :
  • Se déplacer dans le dossier DNS où se trouvent le Dockerfile et les deux fichiers de configs
  • Construire l'image :
docker build -t dns .
  • Lancer le conteneur avec :
docker run -d --name dns -p 53:53/udp -p 53:53/tcp dns
  1. Exécuter :
    dig l1-2.ephec-ti.be
    
  2. Observer l'erreur de résolution / l'absence de réponse

Analyse préliminaire :

  • Commande : dig l1-2.ephec-ti.be
  • Résultat : aucun enregistrement retourné
  • Conclusion : une erreur de config dns

2. Analyse du problème

Symptôme 1

  • Commande : depuis un poste client sur Internet, effectuer un ping l1-2.ephec-ti.be.

  • Résultat obtenu : impossible de ping image

  • Conclusions :

    • Le ping n'a pas pu partir vers une adresse IP => La résolution DNS n'a pas renvoyé d'adresse

Symptôme 2

  • Commande : trace wireshark d'un ping l1-2.ephec-ti.be depuis un poste client sur Internet.

  • Résultat : image image

  • Conclusion : Server failure A l1-2.ephec-ti.be la résolution qui est censée être apportée par le serveur dns ne fonctionne pas. On a un problème au niveau du serveur dns.

Symptôme 3

  • Commande : depuis un poste client sur Internet, effectuer un dig l1-2.ephec-ti.be.

  • Résultat obtenu : image

  • Conclusions :

    • Le dig ne nous a pas renvoyé d'enregistrement A => le serveur dns ne renvois pas de record A pour cette addresse

Symptôme 4

  • Commande : depuis un poste client sur Internet, effectuer un dig @<ip-serveur-dns> l1-2.ephec-ti.be.

  • Résultat obtenu : image

  • Conclusions :

    • Le dig ne nous a pas renvoyé d'enregistrement A => le serveur dns de notre zone ne renvois pas de record A pour cette addresse. Nous somme maintenant sur que le problème vient de notre zone, au niveau de notre serveur dns.

Symptôme 5

  • Commande : analyse des logs du container docker logs dns.

  • Résultat obtenu : image

  • Conclusions :

    • Nous pouvons voir que la zone n'a pas été chargée à cause d'erreurs, ce qui prouve qu'il y a une erreur de config.

Symptôme 6

  • Commande : analyse du fichier de config de la zone : cat l1-2.zone.

  • Résultat obtenu : image

  • Conclusions :

    • A priori aucun soucis car les enregistrements A sont bien présents

Symptôme 7

  • Commande : analyse du fichier de config du serveur : cat named.conf.

  • Résultat obtenu : image

  • Conclusions :

    • Nous regardons si le fichier pointe bien vers la bonne zone, c'est ici qu'on trouve le bug, plus d'explications au point 3.

3. Explication du problème

  • Bug : cette ligne : zone "l1-2.ephec.ti.be." {. Est erronée, le nom de la zone est mal écrit, on a un "." au lieu d'un "-" entre ephec et ti
  • Conséquence : Le fichier de config du dns dirige vers une autre zone qui n'existe pas (l1-2.ephec.ti.be.) et donc notre zone l1-2.ephec-ti.be n'est pas valide. Notre ficher zone est configuré pour donner des records A aux requêtes concernant la zone l1-2.ephec.ti-be. et non l1-2.ephec.ti.be. donc quand on demande la zone l1-2.ephec-ti.be. par exemple avec un ping l1-2.ephec-ti.be. aucun enregistrement A n'est renvoyé.

4. Correction du bug

  1. Modifier le fichier nano named.conf et remplacer la ligne
zone "l1-2.ephec.ti.be." {

Par la ligne (remplacer le "." par un "-") :

zone "l1-2.ephec-ti.be." {
  1. Sauvegarder et fermer le fichier
  2. Redémarrer le docker :
docker stop dns
docker start dns

5. Validation

Procédure

  1. Exécuter
ping l1-2.ephec-ti.be
  • Résultat attendu : Le ping passe
  1. Exécuter
dig l1-2.ephec-ti.be
  • Résultat attendu : Réception d'une IP correspondante à un record A

Vérification

  • Commande : ping l1-2.ephec-ti.be
  • Résultat : Le ping passe bien. image
  • Commande : dig l1-2.ephec-ti.be
  • Résultat : Le dig nous donne l'enregistrement A correspondant. image