diff --git a/scripts/server-dhcp/setup_nat_auto.sh b/scripts/server-dhcp/setup_nat_auto.sh new file mode 100644 index 0000000..2c5273b --- /dev/null +++ b/scripts/server-dhcp/setup_nat_auto.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0 +# Objectif : Faire du NAT du LAN vers le WAN + +# Import des fonctions utilitaires communes +source "$(dirname "$0")/../common/common_utils.sh" + +# Vérification des droits root +check_root + +echo "[+] Détection des interfaces réseau..." + +# Détection de l'interface WAN (par défaut la passerelle) +WAN_IF=$(ip route | grep default | awk '{print $5}' | head -n 1) +if [[ -z "$WAN_IF" ]]; then + echo "[❌] Aucune interface WAN détectée (pas de route par défaut)." + exit 1 +fi +echo "[+] Interface WAN détectée : $WAN_IF" + +# Détection de l'interface LAN (IP privée autre que WAN_IF) +LAN_IF="" +LAN_IP="" +LAN_SUBNET="" + +while IFS= read -r line; do + IFACE=$(echo "$line" | awk '{print $2}') + IP_CIDR=$(echo "$line" | awk '{print $4}') + IP_ADDR=${IP_CIDR%%/*} + + # Vérifie que l'interface n'est pas celle du WAN et possède une IP privée + if [[ "$IFACE" != "$WAN_IF" ]] && ( + [[ "$IP_ADDR" =~ ^192\.168\. ]] || + [[ "$IP_ADDR" =~ ^10\. ]] || + ([[ "$IP_ADDR" =~ ^172\. ]] && [[ $(echo "$IP_ADDR" | cut -d. -f2) -ge 16 ]] && [[ $(echo "$IP_ADDR" | cut -d. -f2) -le 31 ]]) + ); then + LAN_IF="$IFACE" + LAN_IP="$IP_ADDR" + LAN_SUBNET="$IP_CIDR" + break + fi +done < <(ip -o -4 addr show) + +if [[ -z "$LAN_IF" || -z "$LAN_SUBNET" ]]; then + echo "[❌] Impossible de détecter l'interface LAN ou le sous-réseau." + exit 1 +fi + +echo "[+] Interface LAN détectée : $LAN_IF ($LAN_IP / $LAN_SUBNET)" +echo "[ℹ️] Toutes les interfaces réseau :" +ip -o -4 addr show | awk '{print "- Interface:", $2, "=> IP:", $4}' + +if [[ "$LAN_IF" == "$WAN_IF" ]]; then + echo "[❌] Erreur : L'interface LAN et WAN sont identiques ($WAN_IF). Corrige ta configuration réseau." + exit 1 +fi + +if [[ -n "$LAN_IF" ]]; then + echo "[+] Interface LAN détectée : $LAN_IF" + echo "[+] Sous-réseau LAN détecté : $LAN_SUBNET" +else + echo "[⚠️] Aucune interface réseau avec une IP privée détectée." + echo " Vérifiez votre configuration réseau ou connectez-vous à un réseau local." + exit 1 +fi + + +echo "[+] Mise à jour et installation des paquets nécessaires..." +apt update -y +apt install -y iptables iproute2 + +echo "[+] Activation de l'IP forwarding..." +echo 1 > /proc/sys/net/ipv4/ip_forward +sed -i '/^#net.ipv4.ip_forward=1/s/^#//' /etc/sysctl.conf +sysctl -p + +echo "[+] Nettoyage des anciennes règles iptables NAT..." +iptables -t nat -F +iptables -F + +echo "[+] Mise en place du NAT (MASQUERADE)..." +iptables -t nat -A POSTROUTING -s "$LAN_SUBNET" -o "$WAN_IF" -j MASQUERADE + +echo "[+] Sauvegarde des règles iptables..." +apt install -y iptables-persistent +netfilter-persistent save + +echo "[✅] NAT opérationnel : $LAN_SUBNET sort par $WAN_IF"