5.4 KiB
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.