237 lines
5.4 KiB
Markdown
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. |