« DNS est l’annuaire qui contient tous les sites Internet. »
DNS est un système distribué de zones, serveurs et résolveurs. Dans ce laboratoire, tu vas isoler une fonction précise : répondre localement qu’un nom correspond à une adresse IPv4.
Tu vas publier intranet.soria.test → 10.30.0.20, puis prouver qu’une résolution réussie ne signifie pas encore que le service web répond.
01Préparer le LAN
sudo apt update
sudo apt install -y dnsmasq-base dnsutils tcpdump curl python3
chmod +x module3-services-lab.sh
sudo ./module3-services-lab.sh up
sudo ip -n soria-cli addr add 10.30.0.100/24 dev eth0
Le client possède ici une adresse statique afin que la leçon DNS reste indépendante du serveur DHCP.
02Décrire la résolution locale
cat >/tmp/soria-dnsmasq.conf <<'EOF'
interface=eth0
bind-interfaces
no-resolv
no-hosts
domain-needed
bogus-priv
local=/soria.test/
host-record=dns.soria.test,10.30.0.1
host-record=intranet.soria.test,10.30.0.20
log-queries
log-facility=-
pid-file=/tmp/soria-dnsmasq-dns.pid
EOF
Comprends ce que ce serveur sait réellement
Ce dnsmasq connaît deux noms locaux. Avec local=/soria.test/, les noms inconnus de ce domaine reçoivent une réponse négative locale au lieu d’être transmis ailleurs. Ce laboratoire ne prétend pas reproduire toute la hiérarchie DNS publique.
03Lancer et interroger le serveur
Lance dnsmasq dans son namespace
sudo ip netns exec soria-svc dnsmasq --no-daemon --conf-file=/tmp/soria-dnsmasq.confDemande l’enregistrement A
sudo ip netns exec soria-cli dig @10.30.0.1 intranet.soria.test A
sudo ip netns exec soria-cli dig @10.30.0.1 intranet.soria.test A +shortObserve10.30.0.2004Observer UDP puis TCP
Capture le port 53
sudo tcpdump -ni br-soria-svc -vv 'port 53'Dans le terminal client :
sudo ip netns exec soria-cli dig @10.30.0.1 intranet.soria.test A
sudo ip netns exec soria-cli dig @10.30.0.1 intranet.soria.test A +tcp05Lire une réponse négative
sudo ip netns exec soria-cli dig @10.30.0.1 absent.soria.test A
Repère le statut NXDOMAIN. Il signifie que le serveur affirme que ce nom n’existe pas dans l’espace qu’il traite. Un timeout serait différent : il indiquerait l’absence de réponse, pas une réponse négative.
06Distinguer DNS et HTTP
Lance un vrai service web :
sudo ip netns exec soria-web python3 -m http.server 8080 --bind 10.30.0.20
Dans un autre terminal, résous d’abord le nom puis contacte l’adresse obtenue :
IP=$(sudo ip netns exec soria-cli dig @10.30.0.1 intranet.soria.test A +short)
sudo ip netns exec soria-cli curl -v "http://${IP}:8080/" -H 'Host: intranet.soria.test'
Publie une mauvaise adresse
- remplace
10.30.0.20par10.30.0.21dans la configuration ; - redémarre dnsmasq ;
- montre que
digréussit malgré l’échec decurl; - corrige l’enregistrement ;
- valide à nouveau DNS puis HTTP.
Note : les network namespaces partagent le système de fichiers de la VM. Pour ne pas modifier le /etc/resolv.conf de l’hôte, cette leçon interroge explicitement @10.30.0.1.
07Nettoyer
sudo ./module3-services-lab.sh down
✓Ce que tu retiens
DNS transforme un nom en donnée exploitable par le client, ici une adresse A. Une réponse positive, une réponse NXDOMAIN et un timeout décrivent trois situations différentes. La disponibilité du nom et celle de l’application doivent être testées séparément.