# Sistema NAT Industrial para Acceso a PLCs/SCADA ## 🎯 **Arquitectura de Red** ``` PC2 (Remoto) → PC3 (91.99.210.72) → PC1 (WSL2+VPN) → PLCs/SCADA (10.1.33.x) ↑ ↑ ↑ ↑ ZeroTier/Internet SSH Tunnel Túnel Reverso Red Corporativa Intermediario desde WSL2 (GlobalConnect VPN) ``` ## 🏭 **Casos de Uso Industriales** - **VNC a PLCs** - Acceso gráfico remoto a pantallas HMI - **Interfaces Web** - Configuración de dispositivos industriales - **Modbus TCP** - Comunicación con controladores - **SSH/Telnet** - Acceso terminal a equipos - **Bases de datos** - Historiadores y sistemas SCADA ## 🚀 **Instalación en PC1 (WSL2)** ### 1. Configurar Clave SSH ```bash # Copiar tu clave privada SSH cp /ruta/a/tu/clave_privada certs/ssh_private_key chmod 600 certs/ssh_private_key ``` ### 2. Configurar Usuario SSH en PC3 Editar `config/nat_config.yaml`: ```yaml ssh_server: host: "91.99.210.72" user: "tu_usuario_ssh" # Cambiar aquí ``` ### 3. Iniciar Sistema ```bash ./setup.sh ``` ## 🖥️ **Uso desde PC2 (Cliente Remoto)** ### Conexión Rápida a PLCs ```bash # Instalar cliente en PC2 pip install requests # Conectar a PLC por VNC (asigna puerto automáticamente) python nat_client.py plc 10.1.33.11 vnc --wait # Resultado: # ✅ Conexión a PLC establecida! # Acceso desde PC2: 91.99.210.72:9001 # Servicio: VNC # Ahora desde PC2 conectar VNC a: 91.99.210.72:9001 ``` ### Servicios Predefinidos ```bash # VNC (puerto 5900) python nat_client.py plc 10.1.33.11 vnc # Interface Web (puerto 80) python nat_client.py plc 10.1.33.11 web # Modbus TCP (puerto 502) python nat_client.py plc 10.1.33.12 modbus # SSH al PLC (puerto 22) python nat_client.py plc 10.1.33.13 ssh ``` ### Conexión a Puerto Personalizado ```bash # Conectar a puerto específico python nat_client.py connect 10.1.33.11 8080 --description "PLC Web Admin" # Puerto específico en PC3 python nat_client.py add 10.1.33.11 1234 --external-port 9500 ``` ### Ver Estado del Sistema ```bash # Estado completo python nat_client.py status # Listar conexiones activas python nat_client.py list ``` ## 📊 **Ejemplos Prácticos** ### Escenario 1: Acceso VNC a HMI ```bash # Desde PC2 crear túnel python nat_client.py plc 10.1.33.11 vnc --wait # Conectar VNC viewer a: 91.99.210.72:9001 # ¡Ya tienes acceso al HMI como si estuvieras en la planta! ``` ### Escenario 2: Configurar Múltiples PLCs ```bash # PLC Principal - VNC python nat_client.py plc 10.1.33.11 vnc # PLC Principal - Web python nat_client.py plc 10.1.33.11 web # PLC Secundario - Modbus python nat_client.py plc 10.1.33.12 modbus # Verificar conexiones python nat_client.py list ``` ### Escenario 3: Acceso a Historiador ```bash # Base de datos del historiador python nat_client.py connect 10.1.33.20 1433 --description "SQL Server Historiador" # Conectar desde PC2: 91.99.210.72:9XXX ``` ## 🔧 **API REST para Automatización** ```python import requests # Crear conexión programáticamente response = requests.post('http://91.99.210.72:8080/quick-connect', json={ 'target_ip': '10.1.33.11', 'target_port': 5900, 'description': 'Acceso VNC automatizado' }) connection = response.json() print(f"Conectar VNC a: {connection['access_url']}") ``` ## 🛡️ **Seguridad** - **Túneles SSH cifrados** - Todo el tráfico está protegido - **Sin puertos abiertos en PC1** - Solo conexiones salientes - **Acceso controlado** - Solo dispositivos autorizados via IP - **Logs detallados** - Auditoría completa de conexiones ## 🔍 **Monitoreo y Logs** ```bash # Ver logs en tiempo real ./scripts/manage_proxy.sh logs # Estado del sistema NAT curl http://localhost:8080/status # Conexiones activas por PLC python nat_client.py status | grep "10.1.33" ``` ## 📱 **Gestión desde PC2** ### Script de Conexión Rápida (Windows) ```batch @echo off echo Conectando a PLC Principal... python nat_client.py plc 10.1.33.11 vnc --wait echo. echo ¡Listo! Conecta tu VNC viewer a: 91.99.210.72:9001 pause ``` ### PowerShell para Múltiples PLCs ```powershell # Conectar a todos los PLCs de la línea de producción $plcs = @("10.1.33.11", "10.1.33.12", "10.1.33.13") foreach ($plc in $plcs) { Write-Host "Conectando a PLC $plc..." python nat_client.py plc $plc vnc } # Mostrar estado python nat_client.py list ``` ## 🚨 **Resolución de Problemas** ### PC1 no puede conectar a PC3 ```bash # Verificar clave SSH ssh -i certs/ssh_private_key usuario@91.99.210.72 # Verificar conectividad ping 91.99.210.72 ``` ### PC2 no puede acceder al puerto ```bash # Verificar que el túnel esté activo python nat_client.py status # Probar conectividad a PC3 telnet 91.99.210.72 9001 ``` ### PLC no responde ```bash # Desde PC1, verificar acceso al PLC ping 10.1.33.11 telnet 10.1.33.11 5900 ``` ## 📋 **Puertos Comunes Industriales** | Servicio | Puerto | Descripción | |----------|--------|-------------| | VNC | 5900 | Acceso gráfico HMI | | HTTP | 80 | Interface web PLC | | HTTPS | 443 | Interface web segura | | Modbus TCP | 502 | Comunicación Modbus | | SSH | 22 | Terminal remoto | | Telnet | 23 | Terminal (inseguro) | | FTP | 21 | Transferencia archivos | | SQL Server | 1433 | Base datos historiador | | MySQL | 3306 | Base datos | | OPC | 135 | OPC Classic | --- **¡Sistema listo!** Ahora PC2 puede acceder a cualquier dispositivo en la red corporativa como si estuviera físicamente conectado en la planta.