ProxyTcpReverse/INDUSTRIAL_README.md

5.4 KiB

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

# 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:

ssh_server:
  host: "91.99.210.72"
  user: "tu_usuario_ssh"  # Cambiar aquí

3. Iniciar Sistema

./setup.sh

🖥️ Uso desde PC2 (Cliente Remoto)

Conexión Rápida a PLCs

# 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

# 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

# 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

# Estado completo
python nat_client.py status

# Listar conexiones activas
python nat_client.py list

📊 Ejemplos Prácticos

Escenario 1: Acceso VNC a HMI

# 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

# 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

# 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

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

# 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)

@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

# 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

# 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

# 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

# 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.