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

89 lines
2.7 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"