#!/bin/bash
# ============================================================
#  REBOOTLY ARCHIVES — Réseau Proxmox
#  Configure vmbr1 (réseau interne VMs) + NAT sortant
#
#  À lancer UNE SEULE FOIS sur le nœud Proxmox
#  AVANT de créer des VMs
#
#  Résultat :
#    vmbr0 : bridge public (déjà existant, IP OVH)
#    vmbr1 : bridge interne 10.10.0.1/24 (VMs Mailpiler)
#    NAT   : VMs peuvent sortir sur internet (apt, wget...)
#            mais ne sont PAS accessibles depuis l'extérieur
# ============================================================

set -euo pipefail

GREEN='\033[0;32m'; CYAN='\033[0;36m'; YELLOW='\033[1;33m'
RED='\033[0;31m'; BOLD='\033[1m'; NC='\033[0m'
ok()      { echo -e "${GREEN}[✓]${NC} $1"; }
section() { echo -e "\n${CYAN}${BOLD}┌─ $1 ──${NC}"; }
warn()    { echo -e "${YELLOW}[!]${NC} $1"; }
err()     { echo -e "${RED}[✗]${NC} $1"; exit 1; }

[[ $EUID -ne 0 ]] && err "Root requis"
command -v qm >/dev/null 2>&1 || err "Lancer sur Proxmox"

# ─── Détecter l'interface publique ──────────────────────────
PUBLIC_IFACE=$(ip route | grep default | awk '{print $5}' | head -1)
PUBLIC_IP=$(ip addr show "$PUBLIC_IFACE" | grep "inet " | awk '{print $2}' | cut -d/ -f1 | head -1)

clear
echo -e "${CYAN}${BOLD}"
echo "  ┌──────────────────────────────────────────────────┐"
echo "  │  Rebootly — Configuration réseau Proxmox         │"
echo "  └──────────────────────────────────────────────────┘"
echo -e "${NC}"
echo -e "  Interface publique : ${BOLD}$PUBLIC_IFACE${NC}"
echo -e "  IP publique OVH    : ${BOLD}$PUBLIC_IP${NC}"
echo -e "  Réseau VMs         : ${BOLD}10.10.0.0/24${NC} (vmbr1)"
echo -e "  Gateway VMs        : ${BOLD}10.10.0.1${NC} (Proxmox)"
echo ""
warn "Ce script modifie /etc/network/interfaces et iptables."
read -p "  Continuer ? [o/N] " -n 1 -r; echo
[[ ! $REPLY =~ ^[oO]$ ]] && echo "Annulé." && exit 0

# ─── 1. Backup interfaces ────────────────────────────────────
section "1/3 — Backup /etc/network/interfaces"
cp /etc/network/interfaces "/etc/network/interfaces.backup.$(date +%Y%m%d-%H%M%S)"
ok "Backup créé"

# ─── 2. Ajouter vmbr1 si absent ─────────────────────────────
section "2/3 — Création vmbr1 (réseau interne VMs)"
if grep -q "vmbr1" /etc/network/interfaces; then
  warn "vmbr1 existe déjà dans /etc/network/interfaces — ignoré"
else
  cat >> /etc/network/interfaces << 'EOF'

# Rebootly Archives — réseau interne VMs (isolé d'internet)
auto vmbr1
iface vmbr1 inet static
    address 10.10.0.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    # NAT sortant : les VMs peuvent accéder à internet (apt, wget)
    # mais ne sont PAS joignables depuis l'extérieur
    post-up   iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.10.0.0/24' -o vmbr0 -j MASQUERADE
    post-up   iptables -A FORWARD -i vmbr1 -o vmbr0 -j ACCEPT
    post-down iptables -D FORWARD -i vmbr1 -o vmbr0 -j ACCEPT
    post-up   iptables -A FORWARD -i vmbr0 -o vmbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    post-down iptables -D FORWARD -i vmbr0 -o vmbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT
EOF
  ok "vmbr1 ajouté à /etc/network/interfaces"
fi

# ─── Activer le forwarding IP ────────────────────────────────
if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; then
  echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
fi
sysctl -w net.ipv4.ip_forward=1 >/dev/null
ok "IP forwarding activé"

# ─── Activer vmbr1 sans reboot ──────────────────────────────
ifup vmbr1 2>/dev/null || ip link add vmbr1 type bridge 2>/dev/null || true
ip addr add 10.10.0.1/24 dev vmbr1 2>/dev/null || true
ip link set vmbr1 up 2>/dev/null || true

# Appliquer les règles NAT immédiatement
iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o vmbr0 -j MASQUERADE 2>/dev/null || true
iptables -A FORWARD -i vmbr1 -o vmbr0 -j ACCEPT 2>/dev/null || true
iptables -A FORWARD -i vmbr0 -o vmbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || true

# Persister les règles iptables
apt-get install -y iptables-persistent -q 2>/dev/null || true
netfilter-persistent save 2>/dev/null || iptables-save > /etc/iptables/rules.v4 2>/dev/null || true
ok "Règles NAT appliquées et persistées"

# ─── 3. Résumé ───────────────────────────────────────────────
section "3/3 — Vérification"
ip addr show vmbr1 2>/dev/null && ok "vmbr1 actif avec 10.10.0.1/24" || warn "vmbr1 pas encore actif — reboot recommandé"

echo ""
echo -e "${CYAN}${BOLD}╔════════════════════════════════════════════════════╗"
echo -e "║      Réseau interne configuré                      ║"
echo -e "╠════════════════════════════════════════════════════╣"
echo -e "║  vmbr1       : 10.10.0.1/24 (gateway VMs)         ║"
echo -e "║  VMs IP      : 10.10.0.101, .102, .103...         ║"
echo -e "║  Accès VMs   : VPN WireGuard uniquement            ║"
echo -e "║  Sortant VM  : NAT via $PUBLIC_IP$(printf '%*s' $((19 - ${#PUBLIC_IP})) '')║"
echo -e "╠════════════════════════════════════════════════════╣"
echo -e "║  Étape suivante :                                  ║"
echo -e "║  bash 04-setup-wireguard.sh                        ║"
echo -e "╚════════════════════════════════════════════════════╝${NC}"
echo ""
echo "  En cas de problème réseau : restaurer le backup"
echo "  cp /etc/network/interfaces.backup.* /etc/network/interfaces"
echo "  systemctl restart networking"
echo ""
