#!/bin/bash # scripts/configurar_red_hibrida.sh # CONFIGURACIÓN DE RED HÍBRIDA (Policy Routing) # Objetivo: # - Mantener Gateway Default 10.0.10.1 (Navegación Rápida). # - Habilitar IP Pública 190.114.205.18 para acceso entrante. # - Responder tráfico entrante de 190... por su propio Gateway (190.114.205.1). CON_NAME="Red LAN 10" IP_PUB="190.114.205.18/24" GW_PUB="190.114.205.1" TABLE_ID="190" TIMEOUT_SEC=300 # 5 Minutos RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' if [ "$EUID" -ne 0 ]; then echo -e "${RED}Ejecutar con sudo.${NC}" exit 1 fi echo -e "${YELLOW}Configurando Red Híbrida en conexión '$CON_NAME'...${NC}" # 1. Agregar IP Pública (si no existe ya) # Nota: nmcli es idempotente para esto si se usa correctamente, pero limpiaremos "ipv4.addresses" duplicadas si es manual. # Aquí simplemente agregamos. echo -e "[1/4] Agregando IP Pública $IP_PUB..." nmcli con mod "$CON_NAME" +ipv4.addresses "$IP_PUB" # 2. Agregar Ruta a Tabla Secundaria # Sintaxis: ip/prefix next-hop priority attributes echo -e "[2/4] Configurando ruta de retorno (Tabla $TABLE_ID)..." nmcli con mod "$CON_NAME" +ipv4.routes "0.0.0.0/0 $GW_PUB 100 table=$TABLE_ID" # 3. Agregar Regla de Enrutamiento # Sintaxis: priority from table echo -e "[3/4] Configurando regla de política (Policy Rule)..." nmcli con mod "$CON_NAME" +ipv4.routing-rules "priority 30000 from ${IP_PUB%/*} table $TABLE_ID" # 4. Aplicar Cambios (Temporales para validación) echo -e "Aplicando configuración... (Si pierdes conexión, espera $TIMEOUT_SEC segundos)" nmcli con mod "$CON_NAME" +ipv4.addresses "$IP_PUB" nmcli con mod "$CON_NAME" +ipv4.routes "0.0.0.0/0 $GW_PUB 100 table=$TABLE_ID" nmcli con mod "$CON_NAME" +ipv4.routing-rules "priority 30000 from ${IP_PUB%/*} table $TABLE_ID" nmcli con up "$CON_NAME" # --- VERIFICACIÓN / ROLLBACK LOOP --- echo -e "\n${GREEN}*** CAMBIOS APLICADOS ***${NC}" echo "Verifica que tienes conectividad (tanto LAN como WAN)." echo "Tienes $TIMEOUT_SEC segundos para confirmar escribiendo 's' y Enter." CONFIRMADO=0 for ((i=TIMEOUT_SEC; i>0; i--)); do echo -ne " Tiempo restante para ROLLBACK: $i segundos \r" read -t 1 -n 1 key if [[ $key = "s" ]] || [[ $key = "S" ]]; then CONFIRMADO=1 break fi done if [ $CONFIRMADO -eq 1 ]; then echo -e "\n\n${GREEN}¡CONFIRMADO! Configuración de Red Híbrida establecida.${NC}" exit 0 else echo -e "\n\n${RED}¡TIEMPO AGOTADO! REVIERTIENDO CAMBIOS...${NC}" # Revertir (Undo) echo "Eliminando reglas..." nmcli con mod "$CON_NAME" -ipv4.addresses "$IP_PUB" nmcli con mod "$CON_NAME" -ipv4.routes "0.0.0.0/0 $GW_PUB 100 table=$TABLE_ID" nmcli con mod "$CON_NAME" -ipv4.routing-rules "priority 30000 from ${IP_PUB%/*} table $TABLE_ID" echo "Recargando conexión..." nmcli con up "$CON_NAME" echo -e "${GREEN}Sistema restaurado al estado original.${NC}" fi