Files
notes-techniques/scripts/server-dhcp/setup_dhcp.sh

89 lines
2.9 KiB
Bash

#!/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
# Déduire le sous-réseau en fonction de l'adresse IP détectée
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"}')
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"}')
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"}')
fi
# Demander le nom de domaine
read -p "Entrez le domaine (ex: monreseau.local): " DOMAINE
if [[ -z "$DOMAINE" ]]; then
echo "Domaine 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}')
# Activer le service DHCP
dhcp-range=${DHCP_START},${DHCP_END},12h
# Associer le nom de domaine
domain=${DOMAINE}
# Activer la mise à jour DNS dynamique pour les clients DHCP
dhcp-authoritative
expand-hosts
domain-needed
bogus-priv
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
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"