Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 1.96 KB

File metadata and controls

87 lines (63 loc) · 1.96 KB

Industrial Network Simulation

This setup simulates an industrial SCADA-PLC-RIO network with proper isolation using Docker.

Network Topology

SCADA (192.168.1.20) → PLC (192.168.1.10 / 192.168.2.10) ← RIO_SENSOR1 (192.168.2.20)
                              ↓                            ← RIO_SENSOR2 (192.168.2.21)
                         RIO_ACTUATOR (192.168.2.30)

Network Isolation

  • SCADA Network (192.168.1.0/24): Contains SCADA and PLC
  • RIO Network (192.168.2.0/24): Contains PLC and all RIO devices
  • SCADA cannot directly access RIO devices
  • PLC acts as a gateway between networks

Quick Start

# Make setup script executable
chmod +x setup.sh

# Run the setup
./setup.sh

# View logs
docker-compose logs -f

# Test proxy communication (from host)
python3 test_proxy.py

Manual Docker Commands

# Create networks
docker network create --driver bridge --subnet=192.168.1.0/24 --gateway=192.168.1.1 scada_net
docker network create --driver bridge --subnet=192.168.2.0/24 --gateway=192.168.2.1 rio_net

# Build and run containers
docker-compose up -d

# Test isolation
docker exec scada ping -c 1 192.168.2.20  # Should fail
docker exec plc ping -c 1 192.168.2.20    # Should succeed

Components

SCADA

  • Monitors PLC via Modbus (port 502)
  • Sends actuator commands
  • Cannot access RIO devices directly

PLC

  • Dual network interfaces (SCADA and RIO networks)
  • Runs Modbus server on port 502
  • Runs proxy server on port 8080 for SCADA-RIO communication
  • Implements control logic based on sensor values

RIO Devices

  • Sensor1: Sends values to PLC register 0
  • Sensor2: Sends values to PLC register 3
  • Actuator: Reads commands from PLC register 1

PLC Proxy API

The PLC proxy (port 8080) accepts JSON requests:

Get Status

{"command": "status"}

Write to Actuator

{"command": "write", "device": "actuator", "value": 1}

Stopping the System

docker-compose down