133 lines
4.0 KiB
Bash
133 lines
4.0 KiB
Bash
#!/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 <<EOF
|
|
[server]
|
|
host-name=$(hostname)
|
|
use-ipv4=yes
|
|
use-ipv6=no
|
|
allow-interfaces=$ALLOWED_INTERFACES
|
|
ratelimit-interval-usec=1000000
|
|
ratelimit-burst=10
|
|
|
|
[wide-area]
|
|
enable-wide-area=no
|
|
|
|
[publish]
|
|
publish-addresses=yes
|
|
publish-hinfo=yes
|
|
publish-workstation=yes
|
|
publish-domain=yes
|
|
|
|
[reflector]
|
|
enable-reflector=no
|
|
|
|
[rlimits]
|
|
rlimit-as=0
|
|
rlimit-core=0
|
|
rlimit-data=4194304
|
|
rlimit-fsize=0
|
|
rlimit-nofile=300
|
|
rlimit-stack=4194304
|
|
EOF
|
|
|
|
if $PUBLISH_HTTP; then
|
|
echo "=== Publication temporaire d'un service HTTP de test ==="
|
|
mkdir -p /etc/avahi/services
|
|
cat > /etc/avahi/services/test-http.service <<EOF
|
|
<?xml version="1.0" standalone='no'?>
|
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
|
<service-group>
|
|
<name replace-wildcards="yes">Test HTTP on %h</name>
|
|
<service>
|
|
<type>_http._tcp</type>
|
|
<port>80</port>
|
|
</service>
|
|
</service-group>
|
|
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" |