#!/bin/bash # Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0 # Importer les fonctions communes source "$(dirname "$0")/../common/common_utils.sh" # Vérifier si le script est exécuté en root check_root set -e echo "=== Détection des interfaces réseau actives ===" INTERFACES=$(ip -o link show | awk -F': ' '{print $2}' | grep -Ev 'lo|docker|veth|br|vmnet|virbr') echo "Interfaces détectées : $INTERFACES" ALLOWED_INTERFACES=$(echo "$INTERFACES" | paste -sd "," -) echo "=== Installation d'Avahi (mDNS) et des dépendances ===" apt update apt install -y avahi-daemon avahi-utils libnss-mdns nscd systemd-resolved echo "=== Vérification de la présence de libnss_mdns.so.2 ===" if [[ ! -f /lib/x86_64-linux-gnu/libnss_mdns.so.2 ]]; then echo "❌ libnss_mdns.so.2 manquante, tentative de réinstallation" apt install --reinstall -y libnss-mdns fi echo "=== Configuration de /etc/nsswitch.conf ===" if grep -q '^hosts:' /etc/nsswitch.conf; then sed -i 's/^hosts:.*/hosts: files mdns4 dns/' /etc/nsswitch.conf else echo "hosts: files mdns4 dns" >> /etc/nsswitch.conf fi grep hosts /etc/nsswitch.conf echo "=== Redémarrage des caches DNS si présents ===" systemctl restart nscd || echo "nscd non utilisé" systemctl restart systemd-resolved || echo "systemd-resolved non utilisé" echo "=== Vérification d'un éventuel service sur le port 80 ===" if ss -tuln | grep -q ':80 '; then echo "❌ Un service écoute déjà sur le port 80. Abandon de la publication HTTP de test." PUBLISH_HTTP=false else PUBLISH_HTTP=true fi echo "=== Sauvegarde de la conf avahi ===" cp /etc/avahi/avahi-daemon.conf /etc/avahi/avahi-daemon.conf.bak.$(date +%F-%H%M) echo "=== Génération de la configuration avahi-daemon.conf ===" cat > /etc/avahi/avahi-daemon.conf < /etc/avahi/services/test-http.service < Test HTTP on %h _http._tcp 80 EOF fi echo "=== Activation et redémarrage du service Avahi ===" systemctl enable avahi-daemon systemctl restart avahi-daemon echo "=== Vérification du statut du service ===" systemctl status avahi-daemon --no-pager || { echo "❌ Avahi ne fonctionne pas."; exit 1; } echo "=== Vérification du multicast sur l'interface ===" ip a | grep MULTICAST || echo "⚠️ Aucune interface multicast détectée" echo "=== Vérification de l'écoute sur le port UDP 5353 ===" ss -uln | grep 5353 || echo "⚠️ Aucun service écoutant sur UDP/5353" echo "=== Test de la résolution mDNS avec getent (NSS) ===" LOCAL_HOST="$(hostname).local" if getent hosts "$LOCAL_HOST"; then echo "✅ Résolution mDNS de $LOCAL_HOST réussie via getent" else echo "❌ La résolution mDNS de $LOCAL_HOST a échoué via getent" exit 1 fi echo "=== Scan des services mDNS disponibles ===" avahi-browse -a -t || echo "⚠️ Aucun service mDNS visible (normal si peu de services publiés)" echo "✅ mDNS opérationnel sur : $ALLOWED_INTERFACES" echo "$INTERFACES" > /var/log/mdns_interfaces.log echo "Interfaces enregistrées dans /var/log/mdns_interfaces.log" if $PUBLISH_HTTP; then echo "=== Suppression du service HTTP de test ===" rm -f /etc/avahi/services/test-http.service systemctl restart avahi-daemon echo "✅ Service HTTP de test retiré proprement" fi echo "✅ Script terminé avec succès"