#!/bin/bash
# ----------------------------------------------------------
# wifi_bridge.sh – Crea un puente NAT entre Wi-Fi y Ethernet
# Compatible con Debian 12/13 (Bookworm/Trixie)
# ----------------------------------------------------------

# Interfaces
WIFI_IF="wlp3s0"
ETH_IF="enp0s25"

# IP interna para la red compartida
LAN_IP="192.168.137.1"
LAN_NET="192.168.137.0/24"

echo "[*] Configurando reenvío IPv4..."
echo 1 | tee /proc/sys/net/ipv4/ip_forward >/dev/null

# Aplicar persistencia en sysctl
if ! grep -q '^net.ipv4.ip_forward=1' /etc/sysctl.conf; then
    echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
fi

echo "[*] Asignando IP local a $ETH_IF..."
ip addr flush dev "$ETH_IF"
ip addr add "$LAN_IP/24" dev "$ETH_IF"
ip link set "$ETH_IF" up

echo "[*] Limpiando reglas iptables anteriores..."
iptables -t nat -F
iptables -F
iptables -X

echo "[*] Configurando NAT y reenvío..."
iptables -t nat -A POSTROUTING -o "$WIFI_IF" -j MASQUERADE
iptables -A FORWARD -i "$ETH_IF" -o "$WIFI_IF" -j ACCEPT
iptables -A FORWARD -i "$WIFI_IF" -o "$ETH_IF" -m state --state RELATED,ESTABLISHED -j ACCEPT

# Guardar reglas
if command -v iptables-save &>/dev/null; then
    mkdir -p /etc/iptables
    iptables-save > /etc/iptables/rules.v4
    echo "[*] Reglas iptables guardadas en /etc/iptables/rules.v4"
else
    echo "[!] iptables-save no encontrado. Instala iptables-persistent si querés guardar reglas."
fi

# Opcional: iniciar dnsmasq si existe
if command -v dnsmasq &>/dev/null; then
    echo "[*] Verificando configuración DHCP (dnsmasq)..."
    if ! grep -q "interface=$ETH_IF" /etc/dnsmasq.conf 2>/dev/null; then
        echo -e "\ninterface=$ETH_IF\ndhcp-range=192.168.137.10,192.168.137.100,12h" >> /etc/dnsmasq.conf
    fi
    systemctl restart dnsmasq
    echo "[*] dnsmasq configurado y reiniciado."
else
    echo "[!] dnsmasq no instalado. Los clientes deberán usar IP manual o instalá dnsmasq."
fi

echo "[✔] Puente Wi-Fi ↔ Ethernet activado correctamente."
echo "    Wi-Fi: $WIFI_IF  →  Ethernet: $ETH_IF"
echo "    Red interna: $LAN_NET (Gateway: $LAN_IP)"
