1655 lines
39 KiB
Markdown
1655 lines
39 KiB
Markdown
|
|
# Industrial PLC Security & Modern VPN Solutions
|
|||
|
|
## Beckhoff TwinCAT and Comparison of Netbird vs. ZeroTier
|
|||
|
|
|
|||
|
|
This guide expands on industrial network security by covering Beckhoff PLC security and comparing modern mesh VPN solutions (Netbird and ZeroTier) for industrial applications.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Table of Contents
|
|||
|
|
|
|||
|
|
1. [Beckhoff TwinCAT Security](#beckhoff-security)
|
|||
|
|
2. [Understanding Mesh VPN Networks](#mesh-vpn-networks)
|
|||
|
|
3. [ZeroTier for Industrial Applications](#zerotier-industrial)
|
|||
|
|
4. [Netbird for Industrial Applications](#netbird-industrial)
|
|||
|
|
5. [Netbird vs. ZeroTier Comparison](#comparison)
|
|||
|
|
6. [Implementation Guide for Industrial PLCs](#implementation-guide)
|
|||
|
|
7. [Best Practices and Recommendations](#best-practices)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Beckhoff TwinCAT Security
|
|||
|
|
|
|||
|
|
### Overview
|
|||
|
|
|
|||
|
|
Beckhoff automation is based on **TwinCAT (The Windows Control and Automation Technology)**, which runs on standard Industrial PCs. This PC-based approach offers powerful capabilities but also unique security considerations.
|
|||
|
|
|
|||
|
|
### Key Differences from Siemens S7
|
|||
|
|
|
|||
|
|
| Aspect | Siemens S7-1200/1500 | Beckhoff TwinCAT |
|
|||
|
|
|--------|---------------------|------------------|
|
|||
|
|
| **Platform** | Dedicated PLC hardware | PC-based (Windows/BSD) |
|
|||
|
|
| **Operating System** | Proprietary embedded OS | Windows 10/11 IoT or TwinCAT/BSD |
|
|||
|
|
| **Programming** | TIA Portal | Visual Studio with TwinCAT XAE |
|
|||
|
|
| **Communication** | S7 protocol (port 102) | ADS protocol (port 48898), EtherCAT |
|
|||
|
|
| **Security Model** | PLC-level protection | Windows security + TwinCAT protection |
|
|||
|
|
| **Updates** | Firmware updates | Windows updates + TwinCAT updates |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Beckhoff Security Architecture
|
|||
|
|
|
|||
|
|
#### 1. Operating System Level (Windows)
|
|||
|
|
|
|||
|
|
Since TwinCAT runs on Windows, **all Windows security applies**:
|
|||
|
|
|
|||
|
|
**Windows Hardening Checklist:**
|
|||
|
|
```
|
|||
|
|
✓ Windows Updates: Managed and tested
|
|||
|
|
✓ Windows Firewall: Enabled with strict rules
|
|||
|
|
✓ User Account Control (UAC): Enabled
|
|||
|
|
✓ BitLocker: Enable disk encryption
|
|||
|
|
✓ Defender Antivirus: Configured for industrial use
|
|||
|
|
✓ Remote Desktop: Disabled or secured with NLA
|
|||
|
|
✓ SMBv1: Disabled
|
|||
|
|
✓ Unnecessary services: Disabled
|
|||
|
|
✓ Password policy: Strong (12+ characters)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Critical Windows Security Settings:**
|
|||
|
|
```powershell
|
|||
|
|
# Disable SMBv1 (security vulnerability)
|
|||
|
|
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
|
|||
|
|
|
|||
|
|
# Configure Windows Firewall
|
|||
|
|
New-NetFirewallRule -DisplayName "Block All Inbound" -Direction Inbound -Action Block
|
|||
|
|
New-NetFirewallRule -DisplayName "Allow ADS" -Direction Inbound -Protocol TCP -LocalPort 48898 -RemoteAddress 192.168.10.0/24 -Action Allow
|
|||
|
|
|
|||
|
|
# Disable unnecessary services
|
|||
|
|
Set-Service -Name "RemoteRegistry" -StartupType Disabled
|
|||
|
|
Set-Service -Name "Telnet" -StartupType Disabled
|
|||
|
|
|
|||
|
|
# Enable BitLocker
|
|||
|
|
Enable-BitLocker -MountPoint "C:" -EncryptionMethod XtsAes256 -UsedSpaceOnly
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. TwinCAT Application Security
|
|||
|
|
|
|||
|
|
**TwinCAT Security Management (TE1000)**
|
|||
|
|
|
|||
|
|
TwinCAT offers comprehensive protection for PLC applications:
|
|||
|
|
|
|||
|
|
**A. Source Code Protection**
|
|||
|
|
```
|
|||
|
|
1. Object Protection Level (OPL)
|
|||
|
|
- Level 0: No protection
|
|||
|
|
- Level 1: View only (no editing)
|
|||
|
|
- Level 2: No view, no edit
|
|||
|
|
- Level 3: Encrypted
|
|||
|
|
|
|||
|
|
2. Encryption
|
|||
|
|
- Uses AES-256 encryption
|
|||
|
|
- Requires OEM certificate from Beckhoff
|
|||
|
|
- Protects intellectual property
|
|||
|
|
|
|||
|
|
3. User Database
|
|||
|
|
- Defines users and access levels
|
|||
|
|
- Supports role-based access control (RBAC)
|
|||
|
|
- Password-protected
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Configuring Source Code Protection in TwinCAT:**
|
|||
|
|
```
|
|||
|
|
1. Right-click on POU (Program Organization Unit)
|
|||
|
|
2. Properties → Protection
|
|||
|
|
3. Set Object Protection Level
|
|||
|
|
4. Enable "Encrypted" if needed
|
|||
|
|
5. Build project to apply protection
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**B. OEM Certificate and Licensing**
|
|||
|
|
```
|
|||
|
|
Purpose:
|
|||
|
|
- Prevent unauthorized copying of applications
|
|||
|
|
- Enable know-how protection
|
|||
|
|
- Create custom licensing schemes
|
|||
|
|
|
|||
|
|
How it works:
|
|||
|
|
1. Request OEM certificate from Beckhoff
|
|||
|
|
2. Create User Database with certificate
|
|||
|
|
3. Protect source code and boot files
|
|||
|
|
4. Application locked to specific hardware (IPC/dongle)
|
|||
|
|
|
|||
|
|
Important: Store certificate password securely!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**C. Access Control Lists**
|
|||
|
|
|
|||
|
|
TwinCAT supports user-based access control:
|
|||
|
|
|
|||
|
|
```xml
|
|||
|
|
<!-- Example User Database Structure -->
|
|||
|
|
<UserDatabase>
|
|||
|
|
<Users>
|
|||
|
|
<User Name="Admin" Password="[hashed]" Level="Full" />
|
|||
|
|
<User Name="Operator" Password="[hashed]" Level="ReadOnly" />
|
|||
|
|
<User Name="Technician" Password="[hashed]" Level="Limited" />
|
|||
|
|
</Users>
|
|||
|
|
<AccessLevels>
|
|||
|
|
<Level Name="Full" CanView="true" CanEdit="true" CanDownload="true" />
|
|||
|
|
<Level Name="ReadOnly" CanView="true" CanEdit="false" CanDownload="false" />
|
|||
|
|
<Level Name="Limited" CanView="false" CanEdit="false" CanDownload="false" />
|
|||
|
|
</AccessLevels>
|
|||
|
|
</UserDatabase>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. TwinSAFE Security
|
|||
|
|
|
|||
|
|
**TwinSAFE** is Beckhoff's functional safety system (SIL 3 / PLe).
|
|||
|
|
|
|||
|
|
**Security Considerations for Safety Systems:**
|
|||
|
|
|
|||
|
|
**Critical:** Safety systems require special security attention because a cyber attack on safety systems can cause physical harm.
|
|||
|
|
|
|||
|
|
**TwinSAFE Security Measures:**
|
|||
|
|
```
|
|||
|
|
1. FSoE Protocol (Fail-Safe over EtherCAT)
|
|||
|
|
- Cryptographically secured
|
|||
|
|
- Detects manipulation attempts
|
|||
|
|
- Black channel principle (security independent of transport)
|
|||
|
|
|
|||
|
|
2. Safety Program Protection
|
|||
|
|
- Separate from standard PLC program
|
|||
|
|
- Requires separate password
|
|||
|
|
- Cannot be modified without proper authentication
|
|||
|
|
|
|||
|
|
3. Physical Security
|
|||
|
|
- Lock front panels on safety modules (EL6900)
|
|||
|
|
- Tamper-evident seals
|
|||
|
|
- Controlled access to safety equipment
|
|||
|
|
|
|||
|
|
4. Configuration Management
|
|||
|
|
- Version control for safety programs
|
|||
|
|
- Change approval process
|
|||
|
|
- Detailed audit logs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Safety System Configuration Security:**
|
|||
|
|
```
|
|||
|
|
1. Open TwinCAT Safety Editor
|
|||
|
|
2. TwinSAFE → Security Settings
|
|||
|
|
3. Enable password protection
|
|||
|
|
4. Set strong password (min 12 characters)
|
|||
|
|
5. Enable "Read-only mode" for production
|
|||
|
|
6. Document password in secure vault
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. ADS Protocol Security
|
|||
|
|
|
|||
|
|
**ADS (Automation Device Specification)** is Beckhoff's communication protocol (default port: 48898).
|
|||
|
|
|
|||
|
|
**ADS Security Challenges:**
|
|||
|
|
- No built-in authentication by default
|
|||
|
|
- No encryption by default
|
|||
|
|
- Anyone with network access can read/write PLC data
|
|||
|
|
|
|||
|
|
**Securing ADS Communication:**
|
|||
|
|
|
|||
|
|
**Method 1: IP Filtering (Basic)**
|
|||
|
|
```xml
|
|||
|
|
<!-- TwinCAT System Manager → Target System → ADS Router Settings -->
|
|||
|
|
<AdsRouterSettings>
|
|||
|
|
<AllowedConnections>
|
|||
|
|
<Connection IP="192.168.10.50" Description="HMI" />
|
|||
|
|
<Connection IP="192.168.10.60" Description="Engineering Station" />
|
|||
|
|
</AllowedConnections>
|
|||
|
|
<DenyAll>true</DenyAll>
|
|||
|
|
</AdsRouterSettings>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Method 2: Firewall Rules (Recommended)**
|
|||
|
|
```powershell
|
|||
|
|
# Windows Firewall - Allow ADS only from specific IPs
|
|||
|
|
New-NetFirewallRule -DisplayName "ADS - HMI" `
|
|||
|
|
-Direction Inbound `
|
|||
|
|
-Protocol TCP `
|
|||
|
|
-LocalPort 48898 `
|
|||
|
|
-RemoteAddress 192.168.10.50 `
|
|||
|
|
-Action Allow
|
|||
|
|
|
|||
|
|
New-NetFirewallRule -DisplayName "ADS - Engineering" `
|
|||
|
|
-Direction Inbound `
|
|||
|
|
-Protocol TCP `
|
|||
|
|
-LocalPort 48898 `
|
|||
|
|
-RemoteAddress 192.168.10.60 `
|
|||
|
|
-Action Allow
|
|||
|
|
|
|||
|
|
# Block all other ADS connections
|
|||
|
|
New-NetFirewallRule -DisplayName "ADS - Block All Others" `
|
|||
|
|
-Direction Inbound `
|
|||
|
|
-Protocol TCP `
|
|||
|
|
-LocalPort 48898 `
|
|||
|
|
-Action Block
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Method 3: VPN/Encrypted Tunnel (Best Practice)**
|
|||
|
|
```
|
|||
|
|
For remote access:
|
|||
|
|
1. Never expose port 48898 to internet
|
|||
|
|
2. Always use VPN (see Netbird/ZeroTier sections)
|
|||
|
|
3. Additional authentication layer
|
|||
|
|
4. Traffic encryption
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5. EtherCAT Security
|
|||
|
|
|
|||
|
|
**EtherCAT** is Beckhoff's real-time industrial Ethernet protocol.
|
|||
|
|
|
|||
|
|
**EtherCAT Security Considerations:**
|
|||
|
|
```
|
|||
|
|
Vulnerabilities:
|
|||
|
|
- Broadcasts on Layer 2 (can be sniffed)
|
|||
|
|
- No encryption by default
|
|||
|
|
- Designed for closed, trusted networks
|
|||
|
|
|
|||
|
|
Mitigations:
|
|||
|
|
1. Physical isolation of EtherCAT networks
|
|||
|
|
2. Separate VLAN for EtherCAT devices
|
|||
|
|
3. No internet connectivity on EtherCAT network
|
|||
|
|
4. Locked switch ports (MAC address filtering)
|
|||
|
|
5. Network monitoring for unauthorized devices
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**EtherCAT Network Segmentation:**
|
|||
|
|
```
|
|||
|
|
Best Practice Architecture:
|
|||
|
|
|
|||
|
|
[Internet] ←→ [Firewall] ←→ [IT Network - VLAN 10]
|
|||
|
|
↓
|
|||
|
|
[DMZ - VLAN 40]
|
|||
|
|
↓
|
|||
|
|
[Firewall]
|
|||
|
|
↓
|
|||
|
|
[TwinCAT IPC - VLAN 20]
|
|||
|
|
↓
|
|||
|
|
[EtherCAT Network - VLAN 30]
|
|||
|
|
↓
|
|||
|
|
[I/O Modules, Drives, Safety]
|
|||
|
|
|
|||
|
|
Key: No direct path from IT to EtherCAT
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Beckhoff Security Implementation Checklist
|
|||
|
|
|
|||
|
|
#### Phase 1: Operating System Hardening (Week 1)
|
|||
|
|
```
|
|||
|
|
□ Apply latest Windows updates
|
|||
|
|
□ Enable Windows Firewall with strict rules
|
|||
|
|
□ Disable unnecessary Windows services
|
|||
|
|
□ Configure strong password policy
|
|||
|
|
□ Enable BitLocker encryption
|
|||
|
|
□ Install and configure antivirus (industrial-compatible)
|
|||
|
|
□ Disable SMBv1
|
|||
|
|
□ Configure User Account Control
|
|||
|
|
□ Remove unnecessary software
|
|||
|
|
□ Disable autorun for USB devices
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Phase 2: TwinCAT Application Security (Week 2)
|
|||
|
|
```
|
|||
|
|
□ Obtain TwinCAT OEM certificate (if needed)
|
|||
|
|
□ Create User Database with role-based access
|
|||
|
|
□ Apply Object Protection Levels to all POUs
|
|||
|
|
□ Enable encryption for sensitive code
|
|||
|
|
□ Configure password protection for safety programs
|
|||
|
|
□ Document all passwords in secure vault
|
|||
|
|
□ Test access controls with different user roles
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Phase 3: Network Security (Week 3)
|
|||
|
|
```
|
|||
|
|
□ Configure IP filtering for ADS connections
|
|||
|
|
□ Set up firewall rules for port 48898
|
|||
|
|
□ Isolate EtherCAT network (separate VLAN)
|
|||
|
|
□ Install network monitoring (IDS/IPS)
|
|||
|
|
□ Configure VPN for remote access
|
|||
|
|
□ Disable direct internet access on IPC
|
|||
|
|
□ Enable logging for all network connections
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Phase 4: Physical Security (Week 4)
|
|||
|
|
```
|
|||
|
|
□ Lock server cabinet/control cabinet
|
|||
|
|
□ Install tamper-evident seals
|
|||
|
|
□ Implement badge access for control room
|
|||
|
|
□ Install CCTV if high-value assets
|
|||
|
|
□ Secure backup media in locked location
|
|||
|
|
□ Document physical security procedures
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Common Beckhoff Vulnerabilities and Mitigations
|
|||
|
|
|
|||
|
|
#### CVE-2018-7503: TwinCAT ADS Discovery Service
|
|||
|
|
**Vulnerability**: Information disclosure via ADS discovery
|
|||
|
|
**Risk**: Attacker can enumerate all TwinCAT devices on network
|
|||
|
|
**Mitigation**:
|
|||
|
|
1. Update to TwinCAT 3.1 Build 4022 or higher
|
|||
|
|
2. Disable ADS discovery if not needed
|
|||
|
|
3. Firewall rules to block UDP port 48899
|
|||
|
|
4. Network segmentation
|
|||
|
|
|
|||
|
|
#### TwinCAT Remote Access Without Authentication
|
|||
|
|
**Issue**: Default ADS configuration allows remote access without password
|
|||
|
|
**Mitigation**:
|
|||
|
|
1. Enable User Database with access control
|
|||
|
|
2. Configure ADS IP filtering
|
|||
|
|
3. Use VPN for all remote access
|
|||
|
|
4. Monitor ADS connections (port 48898)
|
|||
|
|
|
|||
|
|
#### Windows-Based Attack Surface
|
|||
|
|
**Issue**: All Windows vulnerabilities affect TwinCAT IPC
|
|||
|
|
**Mitigation**:
|
|||
|
|
1. Regular Windows updates (tested first!)
|
|||
|
|
2. Endpoint protection (AV/EDR)
|
|||
|
|
3. Application whitelisting
|
|||
|
|
4. Disable unnecessary Windows features
|
|||
|
|
5. Network isolation from IT environment
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Beckhoff Best Practices Summary
|
|||
|
|
|
|||
|
|
**1. Defense-in-Depth for TwinCAT:**
|
|||
|
|
```
|
|||
|
|
Layer 1: Physical security (locked cabinets)
|
|||
|
|
Layer 2: Network isolation (VLANs, firewalls)
|
|||
|
|
Layer 3: OS hardening (Windows updates, firewall)
|
|||
|
|
Layer 4: TwinCAT security (User DB, encryption)
|
|||
|
|
Layer 5: Application logic (secure coding)
|
|||
|
|
Layer 6: Monitoring (logging, IDS)
|
|||
|
|
Layer 7: Policies and training
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. Update Management:**
|
|||
|
|
```
|
|||
|
|
Windows Updates:
|
|||
|
|
- Test in non-production first
|
|||
|
|
- Schedule during maintenance windows
|
|||
|
|
- Have rollback plan ready
|
|||
|
|
|
|||
|
|
TwinCAT Updates:
|
|||
|
|
- Check Beckhoff support portal monthly
|
|||
|
|
- Subscribe to security advisories
|
|||
|
|
- Test in lab before production
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. Backup Strategy:**
|
|||
|
|
```
|
|||
|
|
What to backup:
|
|||
|
|
- TwinCAT project files (.tsproj)
|
|||
|
|
- Boot projects
|
|||
|
|
- User Database
|
|||
|
|
- Windows system image
|
|||
|
|
- Configuration files
|
|||
|
|
|
|||
|
|
Frequency:
|
|||
|
|
- After every change (immediate)
|
|||
|
|
- Daily (automated)
|
|||
|
|
- Weekly (full system image)
|
|||
|
|
|
|||
|
|
Storage:
|
|||
|
|
- Primary: Network location
|
|||
|
|
- Secondary: External drive
|
|||
|
|
- Tertiary: Off-site/cloud
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. Access Control:**
|
|||
|
|
```
|
|||
|
|
Principle of Least Privilege:
|
|||
|
|
- Operators: HMI access only
|
|||
|
|
- Technicians: Limited PLC access
|
|||
|
|
- Engineers: Full access (logged)
|
|||
|
|
- Vendors: Temporary access only
|
|||
|
|
|
|||
|
|
Authentication:
|
|||
|
|
- Strong passwords (12+ chars)
|
|||
|
|
- Unique accounts (no shared logins)
|
|||
|
|
- MFA for remote access
|
|||
|
|
- Regular access reviews (quarterly)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Understanding Mesh VPN Networks
|
|||
|
|
|
|||
|
|
### What is a Mesh VPN?
|
|||
|
|
|
|||
|
|
Traditional VPN:
|
|||
|
|
```
|
|||
|
|
Client → VPN Server (central gateway) → Destination
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Mesh VPN:
|
|||
|
|
```
|
|||
|
|
Client ←→ Direct encrypted tunnel ←→ Destination
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Key Differences:**
|
|||
|
|
|
|||
|
|
| Traditional VPN | Mesh VPN (Netbird/ZeroTier) |
|
|||
|
|
|----------------|----------------------------|
|
|||
|
|
| Centralized gateway | Peer-to-peer connections |
|
|||
|
|
| All traffic through server | Direct device-to-device |
|
|||
|
|
| Higher latency | Lower latency |
|
|||
|
|
| Single point of failure | No single point of failure |
|
|||
|
|
| Complex firewall rules | Automatic NAT traversal |
|
|||
|
|
| Manual key management | Automated key exchange |
|
|||
|
|
|
|||
|
|
### Why Mesh VPNs for Industrial?
|
|||
|
|
|
|||
|
|
**Advantages for PLC Remote Access:**
|
|||
|
|
|
|||
|
|
1. **Performance**: Direct connections = lower latency
|
|||
|
|
2. **Reliability**: No central gateway to fail
|
|||
|
|
3. **Scalability**: Easy to add new sites/devices
|
|||
|
|
4. **Security**: End-to-end encryption, zero-trust model
|
|||
|
|
5. **Simplicity**: No complex firewall configuration
|
|||
|
|
6. **Cost**: Lower infrastructure costs
|
|||
|
|
|
|||
|
|
**Use Cases:**
|
|||
|
|
|
|||
|
|
- Remote PLC programming and troubleshooting
|
|||
|
|
- Multi-site SCADA systems
|
|||
|
|
- Vendor remote access (temporary)
|
|||
|
|
- Mobile HMI access
|
|||
|
|
- Engineering team collaboration
|
|||
|
|
- Backup/redundant connectivity
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. ZeroTier for Industrial Applications
|
|||
|
|
|
|||
|
|
### Overview
|
|||
|
|
|
|||
|
|
**ZeroTier** is a software-defined networking (SDN) platform that creates secure virtual networks.
|
|||
|
|
|
|||
|
|
**Key Features:**
|
|||
|
|
- Proprietary encryption protocol
|
|||
|
|
- Layer 2 (Ethernet) networking
|
|||
|
|
- Supports complex network topologies
|
|||
|
|
- Works on virtually any platform
|
|||
|
|
- Free for up to 25 devices
|
|||
|
|
|
|||
|
|
### Architecture
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────┐
|
|||
|
|
│ ZeroTier Root Servers │
|
|||
|
|
│ (Coordination only, not data) │
|
|||
|
|
└──────────┬──────────────────────────┘
|
|||
|
|
│
|
|||
|
|
┌──────┴──────┬──────────────┐
|
|||
|
|
│ │ │
|
|||
|
|
┌───▼───┐ ┌───▼───┐ ┌───▼───┐
|
|||
|
|
│Device1│←P2P→│Device2│←P2P→│Device3│
|
|||
|
|
│(PLC) │ │(HMI) │ │(Laptop)│
|
|||
|
|
└───────┘ └───────┘ └───────┘
|
|||
|
|
|
|||
|
|
Legend:
|
|||
|
|
- Coordination traffic goes through root servers
|
|||
|
|
- Data traffic is peer-to-peer (direct)
|
|||
|
|
- P2P = Encrypted peer-to-peer tunnel
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Why ZeroTier for Industrial?
|
|||
|
|
|
|||
|
|
**Strengths:**
|
|||
|
|
|
|||
|
|
**1. Layer 2 Networking:**
|
|||
|
|
```
|
|||
|
|
Supports industrial protocols that require Layer 2:
|
|||
|
|
✓ PROFINET (Siemens, Beckhoff)
|
|||
|
|
✓ EtherNet/IP (Rockwell, Allen-Bradley)
|
|||
|
|
✓ Modbus TCP
|
|||
|
|
✓ BACnet
|
|||
|
|
✓ OPC UA (with multicast)
|
|||
|
|
✓ mDNS service discovery
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. Platform Support:**
|
|||
|
|
```
|
|||
|
|
Works on:
|
|||
|
|
- Windows, Mac, Linux (all PLCs)
|
|||
|
|
- Siemens HMI panels (Windows Embedded)
|
|||
|
|
- Beckhoff IPCs (Windows/BSD)
|
|||
|
|
- Raspberry Pi (ARM)
|
|||
|
|
- MikroTik routers
|
|||
|
|
- Synology/QNAP NAS
|
|||
|
|
- Android tablets
|
|||
|
|
- iOS devices
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. Network Flexibility:**
|
|||
|
|
```
|
|||
|
|
- Multiple networks per device
|
|||
|
|
- Complex routing scenarios
|
|||
|
|
- Bridge to physical networks
|
|||
|
|
- VLAN-like segmentation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ZeroTier Security Features
|
|||
|
|
|
|||
|
|
**Encryption:**
|
|||
|
|
```
|
|||
|
|
- Proprietary protocol (not WireGuard)
|
|||
|
|
- Salsa20/12 stream cipher
|
|||
|
|
- Curve25519 elliptic curve
|
|||
|
|
- Perfect forward secrecy
|
|||
|
|
- Self-healing key rotation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Access Control:**
|
|||
|
|
```
|
|||
|
|
- Centralized authorization
|
|||
|
|
- Device authentication via cryptographic IDs
|
|||
|
|
- Network-level access rules
|
|||
|
|
- IP assignment control
|
|||
|
|
- Flow rules (firewall-like)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Audit and Compliance:**
|
|||
|
|
```
|
|||
|
|
- Connection logging
|
|||
|
|
- Member authorization tracking
|
|||
|
|
- Change history
|
|||
|
|
- API for automation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ZeroTier for PLC Access - Implementation
|
|||
|
|
|
|||
|
|
#### Step 1: Network Creation
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Sign up at https://my.zerotier.com
|
|||
|
|
2. Create new network
|
|||
|
|
3. Note Network ID (16-digit hex)
|
|||
|
|
4. Configure network settings:
|
|||
|
|
- Name: "PLC-Remote-Access"
|
|||
|
|
- IPv4 Assignment: 10.144.0.0/16
|
|||
|
|
- Access Control: Private
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 2: Install on PLC/Gateway
|
|||
|
|
|
|||
|
|
**For Siemens S7 with Gateway PC:**
|
|||
|
|
```bash
|
|||
|
|
# Linux gateway
|
|||
|
|
curl -s https://install.zerotier.com | sudo bash
|
|||
|
|
sudo zerotier-cli join <NETWORK_ID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**For Beckhoff IPC:**
|
|||
|
|
```powershell
|
|||
|
|
# Windows
|
|||
|
|
# Download from zerotier.com
|
|||
|
|
msiexec /i ZeroTierOne.msi /quiet
|
|||
|
|
& "C:\Program Files (x86)\ZeroTier\One\zerotier-one_x64.exe" -q join <NETWORK_ID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 3: Authorize Devices
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Go to https://my.zerotier.com
|
|||
|
|
2. Select your network
|
|||
|
|
3. Scroll to "Members" section
|
|||
|
|
4. Check the "Authorized" box for each device
|
|||
|
|
5. Assign friendly names
|
|||
|
|
6. Note assigned IP addresses
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 4: Configure Routes (Important!)
|
|||
|
|
|
|||
|
|
**For accessing PLC subnet (192.168.10.0/24):**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
On my.zerotier.com:
|
|||
|
|
|
|||
|
|
1. Go to "Managed Routes"
|
|||
|
|
2. Add route:
|
|||
|
|
Destination: 192.168.10.0/24
|
|||
|
|
Via: <ZT_IP_of_Gateway> (e.g., 10.144.0.5)
|
|||
|
|
3. Save
|
|||
|
|
|
|||
|
|
On Gateway (Linux):
|
|||
|
|
sudo iptables -t nat -A POSTROUTING -s 10.144.0.0/16 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
|
|||
|
|
sudo iptables -A FORWARD -i zt+ -o eth0 -j ACCEPT
|
|||
|
|
sudo iptables -A FORWARD -i eth0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 5: Security Hardening
|
|||
|
|
|
|||
|
|
**Network Flow Rules:**
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// Allow only specific protocols to PLCs
|
|||
|
|
tag engineering
|
|||
|
|
id 1000
|
|||
|
|
default 0
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
// Tag engineering stations
|
|||
|
|
tag role engineering
|
|||
|
|
or ipv4 10.144.0.10/32 // Engineering laptop
|
|||
|
|
or ipv4 10.144.0.20/32 // Engineering desktop
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
// Allow S7 communication (port 102) only from engineering
|
|||
|
|
drop
|
|||
|
|
not chr ipprotocol 6 // TCP only
|
|||
|
|
or not chr tdport 102 // Port 102 only
|
|||
|
|
or not tag role engineering // From eng only
|
|||
|
|
ipdest 192.168.10.0/24 // To PLCs
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
// Allow ADS (port 48898) only from engineering
|
|||
|
|
drop
|
|||
|
|
not chr ipprotocol 6
|
|||
|
|
or not chr tdport 48898
|
|||
|
|
or not tag role engineering
|
|||
|
|
ipdest 192.168.10.0/24
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
// Allow all other traffic
|
|||
|
|
accept;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ZeroTier Pricing (as of 2026)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Basic (Free):
|
|||
|
|
- Up to 25 devices
|
|||
|
|
- Unlimited networks
|
|||
|
|
- Self-hosted controller option
|
|||
|
|
|
|||
|
|
Professional ($5/month per user):
|
|||
|
|
- Up to 100 devices
|
|||
|
|
- Priority support
|
|||
|
|
- SSO integration
|
|||
|
|
|
|||
|
|
Business ($10/month per user):
|
|||
|
|
- Up to 1000 devices
|
|||
|
|
- Advanced flow rules
|
|||
|
|
- Audit logs
|
|||
|
|
- Central management
|
|||
|
|
|
|||
|
|
Self-Hosted (Free):
|
|||
|
|
- Unlimited devices
|
|||
|
|
- Full control
|
|||
|
|
- No vendor dependency
|
|||
|
|
- Requires technical expertise
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Netbird for Industrial Applications
|
|||
|
|
|
|||
|
|
### Overview
|
|||
|
|
|
|||
|
|
**Netbird** is an open-source, WireGuard-based mesh VPN platform with focus on simplicity and security.
|
|||
|
|
|
|||
|
|
**Key Features:**
|
|||
|
|
- Built on WireGuard (modern, fast, secure)
|
|||
|
|
- Fully open source (BSD-3-Clause license)
|
|||
|
|
- Self-hosting friendly
|
|||
|
|
- Identity-based access control
|
|||
|
|
- SSO/MFA integration
|
|||
|
|
- Modern web UI
|
|||
|
|
|
|||
|
|
### Architecture
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────┐
|
|||
|
|
│ Netbird Management Server │
|
|||
|
|
│ (Control plane, can be self-hosted) │
|
|||
|
|
└──────────┬──────────────────────────┘
|
|||
|
|
│
|
|||
|
|
┌──────┴──────┬──────────────┐
|
|||
|
|
│ │ │
|
|||
|
|
┌───▼───┐ ┌───▼───┐ ┌───▼───┐
|
|||
|
|
│Device1│←WG→│Device2│←WG→│Device3│
|
|||
|
|
│(PLC) │ │(HMI) │ │(Laptop)│
|
|||
|
|
└───────┘ └───────┘ └───────┘
|
|||
|
|
|
|||
|
|
Legend:
|
|||
|
|
- Control traffic goes through management server
|
|||
|
|
- Data traffic is peer-to-peer WireGuard tunnels
|
|||
|
|
- WG = WireGuard encrypted tunnel
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Why Netbird for Industrial?
|
|||
|
|
|
|||
|
|
**Strengths:**
|
|||
|
|
|
|||
|
|
**1. Performance:**
|
|||
|
|
```
|
|||
|
|
WireGuard advantages:
|
|||
|
|
- 2-3× faster than ZeroTier
|
|||
|
|
- Lower latency (0.1-0.3ms vs 0.8-1.5ms)
|
|||
|
|
- Better CPU efficiency
|
|||
|
|
- Kernel-level implementation (Linux)
|
|||
|
|
- Throughput: 2.5-3.2 Gbps vs ZT's 800-1200 Mbps
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. Open Source:**
|
|||
|
|
```
|
|||
|
|
Benefits:
|
|||
|
|
- Full transparency (audit code)
|
|||
|
|
- Community contributions
|
|||
|
|
- No vendor lock-in
|
|||
|
|
- Self-hosting option
|
|||
|
|
- European data sovereignty (GDPR)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. Modern Security:**
|
|||
|
|
```
|
|||
|
|
- WireGuard protocol (latest cryptography)
|
|||
|
|
- ChaCha20 encryption
|
|||
|
|
- Curve25519 key exchange
|
|||
|
|
- Built-in zero-trust model
|
|||
|
|
- Identity-based access (not IP-based)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. Enterprise Features (Free in Self-Hosted):**
|
|||
|
|
```
|
|||
|
|
- SSO integration (Google, Microsoft, Okta)
|
|||
|
|
- Multi-factor authentication
|
|||
|
|
- Network access control policies
|
|||
|
|
- Activity logs
|
|||
|
|
- API for automation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Netbird Security Features
|
|||
|
|
|
|||
|
|
**Encryption (WireGuard):**
|
|||
|
|
```
|
|||
|
|
- ChaCha20-Poly1305 for encryption
|
|||
|
|
- Curve25519 for key exchange
|
|||
|
|
- BLAKE2s for hashing
|
|||
|
|
- Modern, audited cryptography
|
|||
|
|
- ~4,000 lines of code (vs 100,000+ in OpenVPN)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Access Control:**
|
|||
|
|
```
|
|||
|
|
- Identity-based (not network-based)
|
|||
|
|
- Integration with IdP (Google, Microsoft, etc.)
|
|||
|
|
- Posture checks (device compliance)
|
|||
|
|
- Network ACLs
|
|||
|
|
- Group-based policies
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Zero Trust Approach:**
|
|||
|
|
```
|
|||
|
|
Principles:
|
|||
|
|
- Never trust, always verify
|
|||
|
|
- Least privilege access
|
|||
|
|
- Continuous authentication
|
|||
|
|
- Device compliance checks
|
|||
|
|
- Audit everything
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Netbird for PLC Access - Implementation
|
|||
|
|
|
|||
|
|
#### Step 1: Choose Deployment Method
|
|||
|
|
|
|||
|
|
**Option A: Cloud (Netbird.io SaaS)**
|
|||
|
|
```
|
|||
|
|
Pros:
|
|||
|
|
- Quick setup (5 minutes)
|
|||
|
|
- Managed by Netbird
|
|||
|
|
- Automatic updates
|
|||
|
|
- Built-in SSO
|
|||
|
|
|
|||
|
|
Cons:
|
|||
|
|
- Data flows through cloud (metadata only)
|
|||
|
|
- Monthly cost for advanced features
|
|||
|
|
- Less control
|
|||
|
|
|
|||
|
|
Best for: Small teams, quick POC
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Option B: Self-Hosted**
|
|||
|
|
```
|
|||
|
|
Pros:
|
|||
|
|
- Full control
|
|||
|
|
- On-premise data
|
|||
|
|
- Free advanced features
|
|||
|
|
- GDPR compliant
|
|||
|
|
|
|||
|
|
Cons:
|
|||
|
|
- Requires server (Docker)
|
|||
|
|
- Maintenance responsibility
|
|||
|
|
- Initial setup effort
|
|||
|
|
|
|||
|
|
Best for: Enterprises, data sovereignty requirements
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 2: Self-Hosted Setup (Recommended for Industrial)
|
|||
|
|
|
|||
|
|
**Prerequisites:**
|
|||
|
|
```
|
|||
|
|
- Linux server (Ubuntu 20.04+)
|
|||
|
|
- Docker and Docker Compose
|
|||
|
|
- Public domain or IP
|
|||
|
|
- 2GB RAM minimum
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Installation:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. Install Docker
|
|||
|
|
curl -fsSL https://get.docker.com | sh
|
|||
|
|
|
|||
|
|
# 2. Download Netbird
|
|||
|
|
git clone https://github.com/netbirdio/netbird
|
|||
|
|
cd netbird/infrastructure_files/getting-started-with-zitadel
|
|||
|
|
|
|||
|
|
# 3. Configure environment
|
|||
|
|
export NETBIRD_DOMAIN=vpn.yourcompany.com
|
|||
|
|
export NETBIRD_HTTP_PORT=80
|
|||
|
|
export NETBIRD_HTTPS_PORT=443
|
|||
|
|
|
|||
|
|
# 4. Generate certificates (Let's Encrypt)
|
|||
|
|
./configure.sh
|
|||
|
|
|
|||
|
|
# 5. Start services
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
# 6. Access web UI
|
|||
|
|
# https://vpn.yourcompany.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Services Started:**
|
|||
|
|
```
|
|||
|
|
- Management Server (Control plane)
|
|||
|
|
- Signal Server (NAT traversal coordination)
|
|||
|
|
- Zitadel (Identity provider for SSO)
|
|||
|
|
- Dashboard (Web UI)
|
|||
|
|
- Relay Servers (TURN/STUN)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 3: Client Installation
|
|||
|
|
|
|||
|
|
**Windows (Beckhoff IPC):**
|
|||
|
|
```powershell
|
|||
|
|
# Download from GitHub releases
|
|||
|
|
Invoke-WebRequest -Uri "https://github.com/netbirdio/netbird/releases/download/v0.27.0/netbird_installer_0.27.0_windows_amd64.exe" -OutFile "netbird-setup.exe"
|
|||
|
|
|
|||
|
|
# Install
|
|||
|
|
.\netbird-setup.exe /S
|
|||
|
|
|
|||
|
|
# Join network
|
|||
|
|
netbird up --management-url https://vpn.yourcompany.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Linux (Gateway PC for Siemens S7):**
|
|||
|
|
```bash
|
|||
|
|
# Add repository
|
|||
|
|
curl -fsSL https://pkgs.netbird.io/debian/public.key | sudo gpg --dearmor -o /usr/share/keyrings/netbird-archive-keyring.gpg
|
|||
|
|
echo 'deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main' | sudo tee /etc/apt/sources.list.d/netbird.list
|
|||
|
|
|
|||
|
|
# Install
|
|||
|
|
sudo apt-get update
|
|||
|
|
sudo apt-get install netbird
|
|||
|
|
|
|||
|
|
# Join network
|
|||
|
|
sudo netbird up --management-url https://vpn.yourcompany.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 4: Configure Network Routes
|
|||
|
|
|
|||
|
|
**In Netbird Dashboard:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Log in to https://vpn.yourcompany.com
|
|||
|
|
2. Go to "Network Routes"
|
|||
|
|
3. Click "Add Route"
|
|||
|
|
4. Configure:
|
|||
|
|
- Network: 192.168.10.0/24
|
|||
|
|
- Description: "PLC Network"
|
|||
|
|
- Peer: Select gateway peer
|
|||
|
|
- Masquerade: Enable
|
|||
|
|
- Metric: 100
|
|||
|
|
5. Save
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**On Gateway Linux System:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Enable IP forwarding
|
|||
|
|
sudo sysctl -w net.ipv4.ip_forward=1
|
|||
|
|
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
|
|||
|
|
|
|||
|
|
# No NAT needed - Netbird handles it with masquerade enabled!
|
|||
|
|
|
|||
|
|
# Just allow forwarding
|
|||
|
|
sudo iptables -A FORWARD -i wt0 -o eth0 -j ACCEPT
|
|||
|
|
sudo iptables -A FORWARD -i eth0 -o wt0 -m state --state RELATED,ESTABLISHED -j ACCEPT
|
|||
|
|
|
|||
|
|
# Save rules
|
|||
|
|
sudo iptables-save | sudo tee /etc/iptables/rules.v4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 5: Access Control Policies
|
|||
|
|
|
|||
|
|
**Create Groups:**
|
|||
|
|
```
|
|||
|
|
Dashboard → Groups:
|
|||
|
|
- "Engineers" - Engineering team
|
|||
|
|
- "Operators" - Operators with limited access
|
|||
|
|
- "PLCs" - All PLC gateway devices
|
|||
|
|
- "HMIs" - HMI panels
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Create Network ACLs:**
|
|||
|
|
```
|
|||
|
|
Dashboard → Network → Access Control:
|
|||
|
|
|
|||
|
|
Rule 1: Engineers can access everything
|
|||
|
|
- Source: Group "Engineers"
|
|||
|
|
- Destination: Group "PLCs"
|
|||
|
|
- Protocol: Any
|
|||
|
|
- Action: Allow
|
|||
|
|
|
|||
|
|
Rule 2: Operators can access HMIs only
|
|||
|
|
- Source: Group "Operators"
|
|||
|
|
- Destination: Group "HMIs"
|
|||
|
|
- Protocol: TCP Port 80, 443, 3389
|
|||
|
|
- Action: Allow
|
|||
|
|
|
|||
|
|
Rule 3: Deny all other traffic
|
|||
|
|
- Source: Any
|
|||
|
|
- Destination: Group "PLCs"
|
|||
|
|
- Protocol: Any
|
|||
|
|
- Action: Deny
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Step 6: Enable Posture Checks
|
|||
|
|
|
|||
|
|
**Device Compliance Requirements:**
|
|||
|
|
```
|
|||
|
|
Dashboard → Settings → Posture Checks:
|
|||
|
|
|
|||
|
|
1. Operating System Version
|
|||
|
|
- Minimum: Windows 10 21H2
|
|||
|
|
- Prevents outdated systems
|
|||
|
|
|
|||
|
|
2. Antivirus Running
|
|||
|
|
- Require: Windows Defender or approved AV
|
|||
|
|
- Status: Running
|
|||
|
|
|
|||
|
|
3. Disk Encryption
|
|||
|
|
- Require: BitLocker enabled
|
|||
|
|
- Ensures data protection
|
|||
|
|
|
|||
|
|
4. Geolocation (Optional)
|
|||
|
|
- Restrict: Access from specific countries
|
|||
|
|
- Compliance requirement
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**EDR Integration (Advanced):**
|
|||
|
|
```
|
|||
|
|
Dashboard → Integrations → CrowdStrike:
|
|||
|
|
|
|||
|
|
- Require: Device managed by CrowdStrike
|
|||
|
|
- Minimum: Prevention policy level 3
|
|||
|
|
- Block: Devices with active threats
|
|||
|
|
|
|||
|
|
Result: Only compliant, managed devices can access
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Netbird Pricing (as of 2026)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Free (Self-Hosted):
|
|||
|
|
- Unlimited users and devices
|
|||
|
|
- All features included
|
|||
|
|
- Self-managed
|
|||
|
|
- Community support
|
|||
|
|
|
|||
|
|
Starter (SaaS - $5/user/month):
|
|||
|
|
- Up to 100 devices
|
|||
|
|
- Managed service
|
|||
|
|
- Email support
|
|||
|
|
- SSO integration
|
|||
|
|
|
|||
|
|
Business (SaaS - $12/user/month):
|
|||
|
|
- Unlimited devices
|
|||
|
|
- Priority support
|
|||
|
|
- Advanced analytics
|
|||
|
|
- Custom integrations
|
|||
|
|
|
|||
|
|
Enterprise (Custom):
|
|||
|
|
- Dedicated infrastructure
|
|||
|
|
- SLA guarantees
|
|||
|
|
- Premium support
|
|||
|
|
- On-premise option
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Netbird vs. ZeroTier Comparison
|
|||
|
|
|
|||
|
|
### Head-to-Head Feature Comparison
|
|||
|
|
|
|||
|
|
| Feature | ZeroTier | Netbird |
|
|||
|
|
|---------|----------|---------|
|
|||
|
|
| **Protocol** | Proprietary | WireGuard |
|
|||
|
|
| **Performance** | 800-1200 Mbps | 2500-3200 Mbps |
|
|||
|
|
| **Latency** | 0.8-1.5ms | 0.1-0.3ms |
|
|||
|
|
| **Open Source** | Client only | Fully open source |
|
|||
|
|
| **OSI Layer** | Layer 2 + 3 | Layer 3 only |
|
|||
|
|
| **Self-Hosting** | Yes (complex) | Yes (simple) |
|
|||
|
|
| **Free Tier** | 25 devices | Unlimited (self-hosted) |
|
|||
|
|
| **SSO Integration** | Paid only | Free (self-hosted) |
|
|||
|
|
| **Platform Support** | Excellent | Very Good |
|
|||
|
|
| **Industrial Protocols** | Full support | Limited (no Layer 2) |
|
|||
|
|
| **Zero Trust** | Basic | Advanced |
|
|||
|
|
| **Management UI** | Good | Excellent |
|
|||
|
|
| **Learning Curve** | Medium | Low |
|
|||
|
|
| **Enterprise Features** | Paid | Free (self-hosted) |
|
|||
|
|
|
|||
|
|
### Performance Comparison
|
|||
|
|
|
|||
|
|
**Throughput Test (Same Hardware):**
|
|||
|
|
```
|
|||
|
|
Test: 1GB file transfer between two peers
|
|||
|
|
|
|||
|
|
ZeroTier:
|
|||
|
|
- Speed: 98 MB/s (784 Mbps)
|
|||
|
|
- CPU: 35% on both sides
|
|||
|
|
- Latency: +1.2ms overhead
|
|||
|
|
|
|||
|
|
Netbird (WireGuard):
|
|||
|
|
- Speed: 310 MB/s (2480 Mbps)
|
|||
|
|
- CPU: 15% on both sides
|
|||
|
|
- Latency: +0.2ms overhead
|
|||
|
|
|
|||
|
|
Result: Netbird is ~3× faster
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Use Case Recommendations
|
|||
|
|
|
|||
|
|
**Choose ZeroTier When:**
|
|||
|
|
|
|||
|
|
1. **Layer 2 Protocols Required**
|
|||
|
|
```
|
|||
|
|
- PROFINET (Siemens/Beckhoff)
|
|||
|
|
- EtherNet/IP (Rockwell)
|
|||
|
|
- Multicast discovery protocols
|
|||
|
|
- Service discovery (mDNS, SSDP)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Maximum Platform Compatibility**
|
|||
|
|
```
|
|||
|
|
- Exotic embedded devices
|
|||
|
|
- MikroTik routers
|
|||
|
|
- Synology/QNAP NAS
|
|||
|
|
- Very old systems
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Complex Network Topologies**
|
|||
|
|
```
|
|||
|
|
- Multiple site interconnection
|
|||
|
|
- Bridging to physical networks
|
|||
|
|
- VLAN-like segmentation
|
|||
|
|
- Advanced routing scenarios
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Zero Trust is Secondary**
|
|||
|
|
```
|
|||
|
|
- Basic network access control is sufficient
|
|||
|
|
- Don't need SSO/MFA integration
|
|||
|
|
- Simple authorization model
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Choose Netbird When:**
|
|||
|
|
|
|||
|
|
1. **Performance is Critical**
|
|||
|
|
```
|
|||
|
|
- High-bandwidth applications
|
|||
|
|
- Real-time HMI access
|
|||
|
|
- Large file transfers (backups)
|
|||
|
|
- Low-latency requirements
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Zero Trust Security Required**
|
|||
|
|
```
|
|||
|
|
- Identity-based access control
|
|||
|
|
- SSO/MFA integration needed
|
|||
|
|
- Posture checks (device compliance)
|
|||
|
|
- Granular access policies
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Data Sovereignty**
|
|||
|
|
```
|
|||
|
|
- GDPR compliance
|
|||
|
|
- On-premise requirement
|
|||
|
|
- No cloud dependency
|
|||
|
|
- Full control over infrastructure
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Modern Infrastructure**
|
|||
|
|
```
|
|||
|
|
- Cloud-native deployments
|
|||
|
|
- Docker/Kubernetes environments
|
|||
|
|
- Modern Windows/Linux systems
|
|||
|
|
- API-driven automation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
5. **Open Source Requirement**
|
|||
|
|
```
|
|||
|
|
- Audit entire codebase
|
|||
|
|
- Contribute improvements
|
|||
|
|
- No vendor lock-in
|
|||
|
|
- Community support
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Industrial Protocols Support
|
|||
|
|
|
|||
|
|
**Layer 2 Protocols (ZeroTier Only):**
|
|||
|
|
```
|
|||
|
|
✓ PROFINET (Beckhoff, Siemens)
|
|||
|
|
✓ EtherNet/IP (Rockwell, Allen-Bradley)
|
|||
|
|
✓ Modbus TCP (with broadcast)
|
|||
|
|
✓ BACnet MSTP
|
|||
|
|
✓ OPC UA (with multicast)
|
|||
|
|
✓ LLDP, CDP
|
|||
|
|
✓ NetBIOS, SSDP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Layer 3 Protocols (Both Support):**
|
|||
|
|
```
|
|||
|
|
✓ S7 Communication (Siemens)
|
|||
|
|
✓ ADS (Beckhoff TwinCAT)
|
|||
|
|
✓ Modbus TCP (unicast)
|
|||
|
|
✓ OPC UA (unicast)
|
|||
|
|
✓ HTTP/HTTPS (HMI, web panels)
|
|||
|
|
✓ SSH, RDP
|
|||
|
|
✓ MQTT, CoAP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Workarounds for Layer 2 on Netbird:**
|
|||
|
|
```
|
|||
|
|
1. Use Layer 3 variants of protocols when available
|
|||
|
|
2. Deploy protocol gateways (OPC UA gateway, Modbus gateway)
|
|||
|
|
3. Modify device configuration to unicast mode
|
|||
|
|
4. Consider ZeroTier for specific Layer 2 segments only
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Implementation Guide for Industrial PLCs
|
|||
|
|
|
|||
|
|
### Scenario A: Siemens S7-1200 with ZeroTier
|
|||
|
|
|
|||
|
|
**Architecture:**
|
|||
|
|
```
|
|||
|
|
[Engineer Laptop] ←ZeroTier→ [Raspberry Pi Gateway] ←Eth→ [S7-1200 PLC]
|
|||
|
|
(ZT IP) (ZT IP + Local IP) (192.168.10.100)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Step-by-Step:**
|
|||
|
|
|
|||
|
|
1. **Set up ZeroTier network** (my.zerotier.com)
|
|||
|
|
2. **Install ZeroTier on Raspberry Pi:**
|
|||
|
|
```bash
|
|||
|
|
curl -s https://install.zerotier.com | sudo bash
|
|||
|
|
sudo zerotier-cli join <NETWORK_ID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Configure routing on Pi:**
|
|||
|
|
```bash
|
|||
|
|
# Enable forwarding
|
|||
|
|
sudo sysctl -w net.ipv4.ip_forward=1
|
|||
|
|
|
|||
|
|
# Add route
|
|||
|
|
sudo ip route add 192.168.10.0/24 via 192.168.10.1 dev eth0
|
|||
|
|
|
|||
|
|
# NAT
|
|||
|
|
sudo iptables -t nat -A POSTROUTING -s 10.144.0.0/16 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
|
|||
|
|
sudo iptables -A FORWARD -i zt+ -o eth0 -j ACCEPT
|
|||
|
|
sudo iptables -A FORWARD -i eth0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Add route in ZeroTier console:**
|
|||
|
|
- Destination: 192.168.10.0/24
|
|||
|
|
- Via: <Pi_ZT_IP>
|
|||
|
|
|
|||
|
|
5. **Install ZeroTier on laptop** and join network
|
|||
|
|
|
|||
|
|
6. **Access PLC from TIA Portal:**
|
|||
|
|
- IP: 192.168.10.100 (routes through ZT)
|
|||
|
|
|
|||
|
|
### Scenario B: Beckhoff IPC with Netbird
|
|||
|
|
|
|||
|
|
**Architecture:**
|
|||
|
|
```
|
|||
|
|
[Engineer Laptop] ←Netbird→ [Beckhoff IPC] ←ADS→ [TwinCAT Runtime]
|
|||
|
|
(NB IP) (NB IP + Local IP)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Step-by-Step:**
|
|||
|
|
|
|||
|
|
1. **Deploy Netbird management server** (self-hosted or cloud)
|
|||
|
|
|
|||
|
|
2. **Install Netbird on Beckhoff IPC:**
|
|||
|
|
```powershell
|
|||
|
|
# Download installer
|
|||
|
|
Invoke-WebRequest -Uri "https://github.com/netbirdio/netbird/releases/download/v0.27.0/netbird_installer_0.27.0_windows_amd64.exe" -OutFile "netbird-setup.exe"
|
|||
|
|
|
|||
|
|
# Install
|
|||
|
|
.\netbird-setup.exe /S
|
|||
|
|
|
|||
|
|
# Connect
|
|||
|
|
netbird up --management-url https://vpn.yourcompany.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Configure Windows Firewall on IPC:**
|
|||
|
|
```powershell
|
|||
|
|
# Allow ADS from Netbird interface
|
|||
|
|
New-NetFirewallRule -DisplayName "ADS via Netbird" `
|
|||
|
|
-Direction Inbound `
|
|||
|
|
-Protocol TCP `
|
|||
|
|
-LocalPort 48898 `
|
|||
|
|
-InterfaceAlias "Netbird" `
|
|||
|
|
-Action Allow
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Install Netbird on laptop** and join
|
|||
|
|
|
|||
|
|
5. **Access PLC from TwinCAT XAE:**
|
|||
|
|
- Add route to IPC via Netbird IP
|
|||
|
|
- Connect to <Netbird_IP>:48898
|
|||
|
|
|
|||
|
|
### Scenario C: Multi-Site SCADA with Both
|
|||
|
|
|
|||
|
|
**Use Case:** 3 manufacturing sites, each with different PLC brands
|
|||
|
|
|
|||
|
|
**Architecture:**
|
|||
|
|
```
|
|||
|
|
Site A (Siemens S7) ←ZeroTier Layer 2→ Site B (Beckhoff) ←Netbird Layer 3→ Site C (Rockwell)
|
|||
|
|
↓
|
|||
|
|
Central SCADA
|
|||
|
|
(Netbird + ZT)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Strategy:**
|
|||
|
|
- **ZeroTier**: For sites needing Layer 2 (PROFINET, EtherNet/IP)
|
|||
|
|
- **Netbird**: For sites with Layer 3 protocols only (better performance)
|
|||
|
|
- **Central SCADA**: Joins both networks
|
|||
|
|
|
|||
|
|
**Implementation:**
|
|||
|
|
1. Create ZeroTier network for Layer 2 sites
|
|||
|
|
2. Deploy Netbird for Layer 3 sites
|
|||
|
|
3. SCADA server joins both networks
|
|||
|
|
4. Use network ACLs to control access
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Best Practices and Recommendations
|
|||
|
|
|
|||
|
|
### Security Best Practices
|
|||
|
|
|
|||
|
|
**1. Never Expose PLCs Directly**
|
|||
|
|
```
|
|||
|
|
❌ BAD:
|
|||
|
|
Internet → Port Forward → PLC
|
|||
|
|
|
|||
|
|
✓ GOOD:
|
|||
|
|
Internet → VPN (NB/ZT) → Gateway → PLC
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. Use Gateway Architecture**
|
|||
|
|
```
|
|||
|
|
Benefits:
|
|||
|
|
- PLC stays on isolated network
|
|||
|
|
- Gateway provides additional security layer
|
|||
|
|
- Easier to monitor and log access
|
|||
|
|
- Can implement additional authentication
|
|||
|
|
|
|||
|
|
Recommended: Raspberry Pi as dedicated gateway
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. Implement Defense-in-Depth**
|
|||
|
|
```
|
|||
|
|
Layer 1: VPN (Netbird/ZeroTier)
|
|||
|
|
Layer 2: Gateway with firewall
|
|||
|
|
Layer 3: PLC password protection
|
|||
|
|
Layer 4: Network segmentation (VLANs)
|
|||
|
|
Layer 5: Logging and monitoring
|
|||
|
|
Layer 6: Regular security audits
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. Access Control**
|
|||
|
|
```
|
|||
|
|
Principle of Least Privilege:
|
|||
|
|
- Engineers: Full access
|
|||
|
|
- Operators: HMI only
|
|||
|
|
- Vendors: Temporary, monitored access
|
|||
|
|
- Read-only accounts for monitoring
|
|||
|
|
|
|||
|
|
Use groups and role-based access control
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**5. Logging and Monitoring**
|
|||
|
|
```
|
|||
|
|
Log:
|
|||
|
|
- All VPN connections
|
|||
|
|
- PLC access attempts
|
|||
|
|
- Configuration changes
|
|||
|
|
- Failed authentication
|
|||
|
|
|
|||
|
|
Monitor for:
|
|||
|
|
- Unusual connection times
|
|||
|
|
- Connections from new locations
|
|||
|
|
- Multiple failed attempts
|
|||
|
|
- Abnormal data transfers
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Operational Best Practices
|
|||
|
|
|
|||
|
|
**1. Redundancy**
|
|||
|
|
```
|
|||
|
|
- Primary VPN: Netbird (performance)
|
|||
|
|
- Backup VPN: ZeroTier (reliability)
|
|||
|
|
- Both configured, one active
|
|||
|
|
- Automatic failover if possible
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**2. Backup and Recovery**
|
|||
|
|
```
|
|||
|
|
Before any changes:
|
|||
|
|
- Backup PLC program
|
|||
|
|
- Document current VPN config
|
|||
|
|
- Test in non-production first
|
|||
|
|
- Have rollback plan
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**3. Change Management**
|
|||
|
|
```
|
|||
|
|
VPN changes require:
|
|||
|
|
- Approval from operations
|
|||
|
|
- Testing in lab
|
|||
|
|
- Maintenance window
|
|||
|
|
- Rollback procedure
|
|||
|
|
- Post-change validation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**4. Vendor Access**
|
|||
|
|
```
|
|||
|
|
For vendor support:
|
|||
|
|
- Create temporary account
|
|||
|
|
- Time-limited (24-48 hours)
|
|||
|
|
- Monitor session (screen share)
|
|||
|
|
- Revoke immediately after
|
|||
|
|
- Audit all actions
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**5. Documentation**
|
|||
|
|
```
|
|||
|
|
Maintain:
|
|||
|
|
- Network diagrams (current)
|
|||
|
|
- Device inventory
|
|||
|
|
- IP address plan
|
|||
|
|
- Access control matrix
|
|||
|
|
- Incident response procedures
|
|||
|
|
- Recovery procedures
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Choosing Between Netbird and ZeroTier
|
|||
|
|
|
|||
|
|
**Decision Matrix:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Score each criterion 1-5, multiply by weight, sum:
|
|||
|
|
|
|||
|
|
Criterion Weight ZT Score NB Score
|
|||
|
|
========================================================
|
|||
|
|
Layer 2 protocol support 30% 5 1
|
|||
|
|
Performance requirements 20% 3 5
|
|||
|
|
Zero Trust/SSO needs 15% 2 5
|
|||
|
|
Open source requirement 10% 3 5
|
|||
|
|
Self-hosting preference 10% 3 5
|
|||
|
|
Budget constraints 5% 4 5
|
|||
|
|
Platform compatibility 10% 5 4
|
|||
|
|
|
|||
|
|
Total (example): 3.75 4.25
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Quick Decision Tree:**
|
|||
|
|
```
|
|||
|
|
Do you need Layer 2 protocols (PROFINET, EtherNet/IP)?
|
|||
|
|
├─ YES → ZeroTier
|
|||
|
|
└─ NO → Continue
|
|||
|
|
|
|||
|
|
Do you need >1 Gbps throughput?
|
|||
|
|
├─ YES → Netbird
|
|||
|
|
└─ NO → Continue
|
|||
|
|
|
|||
|
|
Do you need SSO/MFA integration?
|
|||
|
|
├─ YES → Netbird
|
|||
|
|
└─ NO → Continue
|
|||
|
|
|
|||
|
|
Do you need full open source?
|
|||
|
|
├─ YES → Netbird
|
|||
|
|
└─ NO → Either works
|
|||
|
|
|
|||
|
|
Default: Netbird (better performance, modern security)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Migration Strategies
|
|||
|
|
|
|||
|
|
**From Traditional VPN to Mesh VPN:**
|
|||
|
|
|
|||
|
|
**Phase 1: Pilot (Weeks 1-2)**
|
|||
|
|
```
|
|||
|
|
1. Set up Netbird/ZeroTier in parallel
|
|||
|
|
2. Test with 1-2 non-critical devices
|
|||
|
|
3. Validate connectivity and performance
|
|||
|
|
4. Train team on new system
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Phase 2: Gradual Rollout (Weeks 3-6)**
|
|||
|
|
```
|
|||
|
|
1. Migrate engineering access first
|
|||
|
|
2. Then HMI/SCADA connections
|
|||
|
|
3. Finally, vendor access
|
|||
|
|
4. Keep old VPN as backup
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Phase 3: Decommission (Weeks 7-8)**
|
|||
|
|
```
|
|||
|
|
1. Monitor for issues (4 weeks)
|
|||
|
|
2. Verify no old VPN usage
|
|||
|
|
3. Remove old VPN infrastructure
|
|||
|
|
4. Update documentation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**From ZeroTier to Netbird (or vice versa):**
|
|||
|
|
|
|||
|
|
**Parallel Operation:**
|
|||
|
|
```
|
|||
|
|
1. Deploy new VPN alongside old
|
|||
|
|
2. Test thoroughly
|
|||
|
|
3. Switch users gradually
|
|||
|
|
4. Monitor for 2 weeks
|
|||
|
|
5. Decommission old VPN
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Appendix A: Quick Reference Commands
|
|||
|
|
|
|||
|
|
### ZeroTier Commands
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Join network
|
|||
|
|
sudo zerotier-cli join <NETWORK_ID>
|
|||
|
|
|
|||
|
|
# Leave network
|
|||
|
|
sudo zerotier-cli leave <NETWORK_ID>
|
|||
|
|
|
|||
|
|
# List networks
|
|||
|
|
sudo zerotier-cli listnetworks
|
|||
|
|
|
|||
|
|
# Show peer connections
|
|||
|
|
sudo zerotier-cli peers
|
|||
|
|
|
|||
|
|
# Get node ID
|
|||
|
|
sudo zerotier-cli info
|
|||
|
|
|
|||
|
|
# Restart service
|
|||
|
|
sudo systemctl restart zerotier-one
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Netbird Commands
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Join network
|
|||
|
|
sudo netbird up --management-url https://vpn.yourcompany.com
|
|||
|
|
|
|||
|
|
# Leave network
|
|||
|
|
sudo netbird down
|
|||
|
|
|
|||
|
|
# Show status
|
|||
|
|
netbird status
|
|||
|
|
|
|||
|
|
# Show routes
|
|||
|
|
netbird routes
|
|||
|
|
|
|||
|
|
# Debug mode
|
|||
|
|
netbird up --log-level debug
|
|||
|
|
|
|||
|
|
# Restart service
|
|||
|
|
sudo systemctl restart netbird
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Network Testing
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Test connectivity to PLC
|
|||
|
|
ping 192.168.10.100
|
|||
|
|
|
|||
|
|
# Test PLC port (S7)
|
|||
|
|
nc -zv 192.168.10.100 102
|
|||
|
|
|
|||
|
|
# Test PLC port (ADS)
|
|||
|
|
nc -zv 192.168.10.100 48898
|
|||
|
|
|
|||
|
|
# Trace route
|
|||
|
|
traceroute 192.168.10.100
|
|||
|
|
|
|||
|
|
# Performance test
|
|||
|
|
iperf3 -c 192.168.10.100
|
|||
|
|
|
|||
|
|
# Latency test
|
|||
|
|
ping -c 100 192.168.10.100 | tail -1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Appendix B: Troubleshooting Guide
|
|||
|
|
|
|||
|
|
### Common Issues
|
|||
|
|
|
|||
|
|
**Issue 1: Cannot ping PLC through VPN**
|
|||
|
|
```
|
|||
|
|
Checklist:
|
|||
|
|
□ VPN connected? (zerotier-cli listnetworks / netbird status)
|
|||
|
|
□ Route configured? (ip route show | grep 192.168.10)
|
|||
|
|
□ Gateway forwarding enabled? (cat /proc/sys/net/ipv4/ip_forward)
|
|||
|
|
□ Firewall rules correct? (iptables -L -n)
|
|||
|
|
□ PLC actually at this IP? (ping from gateway directly)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Issue 2: Poor VPN performance**
|
|||
|
|
```
|
|||
|
|
Checklist:
|
|||
|
|
□ Direct peer connection? (zerotier-cli peers / netbird status)
|
|||
|
|
□ Relay being used? (check for relay IPs in peers list)
|
|||
|
|
□ Internet bandwidth sufficient? (speedtest)
|
|||
|
|
□ CPU overloaded? (top / htop)
|
|||
|
|
□ MTU issues? (try ping -s 1400 -M do <IP>)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Issue 3: Connection drops frequently**
|
|||
|
|
```
|
|||
|
|
Checklist:
|
|||
|
|
□ Internet stable? (ping 8.8.8.8 -c 100)
|
|||
|
|
□ NAT timeout? (adjust keep-alive settings)
|
|||
|
|
□ Firewall blocking? (check firewall logs)
|
|||
|
|
□ VPN service running? (systemctl status)
|
|||
|
|
□ Certificate issues? (check logs)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Appendix C: Security Checklist
|
|||
|
|
|
|||
|
|
### Pre-Deployment Security Review
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
VPN Configuration:
|
|||
|
|
□ Strong encryption enabled
|
|||
|
|
□ Access control configured
|
|||
|
|
□ Unnecessary features disabled
|
|||
|
|
□ Logging enabled
|
|||
|
|
□ Firewall rules reviewed
|
|||
|
|
|
|||
|
|
Gateway Security:
|
|||
|
|
□ OS hardened and updated
|
|||
|
|
□ Firewall configured
|
|||
|
|
□ SSH key-only authentication
|
|||
|
|
□ Automatic updates enabled
|
|||
|
|
□ Monitoring configured
|
|||
|
|
|
|||
|
|
PLC Security:
|
|||
|
|
□ Password protection enabled
|
|||
|
|
□ IP ACLs configured
|
|||
|
|
□ Unused services disabled
|
|||
|
|
□ Firmware up to date
|
|||
|
|
□ Backup completed
|
|||
|
|
|
|||
|
|
Network Security:
|
|||
|
|
□ VLANs configured
|
|||
|
|
□ Network segmentation in place
|
|||
|
|
□ IDS/IPS deployed
|
|||
|
|
□ No direct internet access for PLCs
|
|||
|
|
□ DMZ for historian/SCADA
|
|||
|
|
|
|||
|
|
Access Control:
|
|||
|
|
□ Role-based access defined
|
|||
|
|
□ Strong password policy
|
|||
|
|
□ MFA enabled (if supported)
|
|||
|
|
□ Access regularly reviewed
|
|||
|
|
□ Vendor access time-limited
|
|||
|
|
|
|||
|
|
Documentation:
|
|||
|
|
□ Network diagram updated
|
|||
|
|
□ Procedures documented
|
|||
|
|
□ Emergency contacts listed
|
|||
|
|
□ Incident response plan ready
|
|||
|
|
□ Recovery procedures tested
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Document Version:** 1.0
|
|||
|
|
**Last Updated:** February 16, 2026
|
|||
|
|
**Covers:** Beckhoff TwinCAT, Siemens S7, Netbird, ZeroTier
|
|||
|
|
**For Use With:** industrial-network-security-guide.md
|