ProxyTcpReverse/INDUSTRIAL_README.md

237 lines
5.4 KiB
Markdown

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