#!/bin/bash # Importer les fonctions communes source "$(dirname "$0")/../common/common_utils.sh" # Vérifier si le script est exécuté en root check_root # Installer dnsmasq s'il n'est pas déjà installé if ! command -v dnsmasq &> /dev/null; then echo "Installation de dnsmasq..." apt update && apt install -y dnsmasq else echo "dnsmasq est déjà installé." fi # Obtenir l'adresse IP du serveur sur l'interface principale IP_SERVEUR=$(ip -4 addr show $(ip route show default | awk '/default/ {print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}') if [[ -z "$IP_SERVEUR" ]]; then echo "Impossible de déterminer l'adresse IP du serveur." exit 1 fi # Vérifier si l'IP est dans une plage privée autorisée if [[ "$IP_SERVEUR" =~ ^10\..* || "$IP_SERVEUR" =~ ^192\.168\..* || "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\..* ]]; then echo "Adresse IP privée détectée : $IP_SERVEUR" else echo "Erreur : L'adresse IP $IP_SERVEUR n'est pas dans un réseau privé." exit 1 fi FORCE=false if [[ "$1" == "--force" ]]; then FORCE=true echo "Mode forçage activé : reconfiguration complète..." fi if systemctl is-active --quiet dnsmasq && [ "$FORCE" = false ]; then echo "dnsmasq est déjà actif et configuré. Utilisez --force pour reconfigurer." exit 0 fi # Déduire le sous-réseau et proposer des domaines en fonction du réseau détecté if [[ "$IP_SERVEUR" =~ ^10\. ]]; then SOUS_RESEAU=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1".0.0.0/8"}') DHCP_START=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1".0.0.10"}') DHCP_END=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1".0.0.100"}') DOMAIN_SUGGESTIONS=("lan10.local" "private10.local" "intranet10.local") elif [[ "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]]; then SOUS_RESEAU=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2".0.0/16"}') DHCP_START=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2".0.10"}') DHCP_END=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2".0.100"}') DOMAIN_SUGGESTIONS=("lan172.local" "private172.local" "intranet172.local") elif [[ "$IP_SERVEUR" =~ ^192\.168\. ]]; then SOUS_RESEAU=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2"."$3".0/24"}') DHCP_START=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2"."$3".10"}') DHCP_END=$(echo "$IP_SERVEUR" | awk -F '.' '{print $1"."$2"."$3".100"}') DOMAIN_SUGGESTIONS=("home.local" "office.local" "lan.local") fi # Afficher les suggestions de domaine et demander à l'utilisateur de choisir echo "Propositions de domaine :" for i in "${!DOMAIN_SUGGESTIONS[@]}"; do echo "[$((i+1))] ${DOMAIN_SUGGESTIONS[$i]}" done echo "[0] Saisir un autre domaine" read -p "Choisissez un domaine (1-${#DOMAIN_SUGGESTIONS[@]}) ou 0 pour entrer le vôtre : " CHOIX_DOMAINE if [[ "$CHOIX_DOMAINE" =~ ^[1-9]+$ ]] && ((CHOIX_DOMAINE >= 1 && CHOIX_DOMAINE <= ${#DOMAIN_SUGGESTIONS[@]})); then DOMAINE=${DOMAIN_SUGGESTIONS[$((CHOIX_DOMAINE-1))]} elif [[ "$CHOIX_DOMAINE" == "0" ]]; then read -p "Entrez votre domaine personnalisé : " DOMAINE if [[ -z "$DOMAINE" ]]; then echo "Domaine invalide." exit 1 fi else echo "Choix invalide." exit 1 fi # Configurer dnsmasq echo "Configuration de dnsmasq..." cat <<EOF > /etc/dnsmasq.conf # Configuration de dnsmasq # Interface réseau principale interface=$(ip route show default | awk '/default/ {print $5}') listen-address=127.0.0.1,$IP_SERVEUR # Activer le service DHCP dhcp-range=${DHCP_START},${DHCP_END},12h # Associer le nom de domaine domain=${DOMAINE} # Gestion des Alias alias=8.8.8.8,$IP_SERVEUR # Activer la mise à jour DNS dynamique pour les clients DHCP dhcp-authoritative expand-hosts domain-needed no-negcache bogus-priv filterwin2k no-resolv server=9.9.9.9 server=149.112.112.112 # Activer la journalisation pour voir les affectations DHCP/DNS log-queries log-dhcp # Option DHCP dhcp-option=1,255.255.255.0 # Passerelle par défaut dhcp-option=3,$IP_SERVEUR # DNS dhcp-option=6,$IP_SERVEUR # NIS Domain Name # dhcp-option=40,$DOMAINE # Domaine DNS dhcp-option=15,$DOMAINE # TTL des paquests (eviter les boucles réseau) dhcp-option=23,64 # Taille MTU dhcp-option=26,1500 # Désactiver NetBIOS sur Windows dhcp-option=43,01:04:00:00:00:02 # Suffixe DNS dhcp-option=119,$DOMAINE # WPAD (Web Proxy Auto-Discovery Protocol) dhcp-option=252,"\n" dhcp-name-match=set:wpad-ignore,wpad dhcp-ignore-names=tag:wpad-ignore EOF # Redémarrer dnsmasq pour appliquer les modifications systemctl restart dnsmasq echo "Configuration terminée avec succès!" echo "Serveur DHCP/DNS fonctionnel sur $IP_SERVEUR" echo "Les clients recevront une IP entre $DHCP_START et $DHCP_END et seront associés au domaine $DOMAINE"