75 lines
2.3 KiB
Bash
75 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# 1. Prüfen, ob das Skript als root ausgeführt wird
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Fehler: Bitte führe dieses Skript als root (oder mit sudo) aus."
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- Starte Netmaker NAT-Setup ---"
|
|
echo ""
|
|
|
|
# 2. Automatisches Erkennen des primären Interfaces (über die Default Route)
|
|
DETECTED_IFACE=$(ip route show default | awk '/default/ {print $5}' | head -n 1)
|
|
|
|
# Alle verfügbaren Interfaces auflisten (ohne das lokale Loopback 'lo')
|
|
echo "Verfügbare Netzwerk-Interfaces auf diesem System:"
|
|
ip -o link show | awk -F': ' '{print $2}' | grep -v -w "lo" | while read -r iface; do
|
|
echo " - $iface"
|
|
done
|
|
|
|
echo ""
|
|
|
|
# 3. Benutzerabfrage mit dem erkannten Standardwert
|
|
read -p "Welches Interface soll für das Masquerading (NAT) genutzt werden? [$DETECTED_IFACE]: " SELECTED_IFACE
|
|
|
|
# Wenn der Benutzer einfach nur Enter drückt, nehmen wir den erkannten Wert
|
|
if [ -z "$SELECTED_IFACE" ]; then
|
|
SELECTED_IFACE=$DETECTED_IFACE
|
|
fi
|
|
|
|
# Kurzer Sicherheits-Check: Existiert das Interface überhaupt?
|
|
if ! ip link show "$SELECTED_IFACE" > /dev/null 2>&1; then
|
|
echo "Fehler: Das Interface '$SELECTED_IFACE' existiert nicht auf diesem System! Abbruch."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Okay, nutze Interface: $SELECTED_IFACE"
|
|
echo ""
|
|
|
|
# 4. Backup der alten nftables-Konfiguration anlegen
|
|
if [ -f /etc/nftables.conf ]; then
|
|
BACKUP_FILE="/etc/nftables.conf.bak_$(date +%F_%H-%M-%S)"
|
|
cp /etc/nftables.conf "$BACKUP_FILE"
|
|
echo "Backup der alten nftables.conf unter $BACKUP_FILE gespeichert."
|
|
fi
|
|
|
|
# 5. Neue Basiskonfiguration mit dem gewählten Interface schreiben
|
|
# WICHTIG: Das EOF darf hier NICHT in Anführungszeichen stehen,
|
|
# damit die Variable $SELECTED_IFACE in den Text geschrieben wird!
|
|
echo "Schreibe neue nftables.conf..."
|
|
cat << EOF > /etc/nftables.conf
|
|
#!/usr/sbin/nft -f
|
|
|
|
flush ruleset
|
|
|
|
table inet nat {
|
|
chain POSTROUTING {
|
|
type nat hook postrouting priority srcnat; policy accept;
|
|
oifname "$SELECTED_IFACE" masquerade
|
|
}
|
|
}
|
|
EOF
|
|
|
|
# 6. Dienste aktivieren und neustarten
|
|
echo "Aktiviere und starte nftables-Dienst..."
|
|
systemctl enable nftables
|
|
systemctl restart nftables
|
|
|
|
echo "Starte netclient neu..."
|
|
systemctl restart netclient
|
|
|
|
echo ""
|
|
echo "--- Setup erfolgreich abgeschlossen! ---"
|
|
echo "Die Masquerade-Regel für '$SELECTED_IFACE' ist nun dauerhaft aktiv." |