1. Problem Definition
When deploying SIMATIC NET 8.2 as an OPC DA (Classic, COM/DCOM-based) server across two SCADA hosts, a common failure pattern is:
- The OPC server works locally on each of the two hosts (server-to-self).
- The OPC server works server-to-server between the two SCADA hosts.
- A third client PC — same domain, same Windows user, identical DCOM permissions — cannot enumerate or connect to the OPC server list.
- Other services (e.g. Microsoft SQL Server, file shares) on the same hosts are reachable from the third PC.
This isolation is the fingerprint of a DCOM / COM Security boundary problem, not a network outage, and it is amplified by SIMATIC NET's tightly coupled PC station architecture and its dependency on the SIMATIC NET Configuration Console and the S7DOS Help Service. The symptom is identical on SIMATIC NET 8.1, 8.2, and the V8.2 SP1 update (HF17 and later); the same SIMATIC NET communication settings utility (SimaticComSettings.exe) is used to correct it.
2. SIMATIC NET 8.2 OPC DA Architecture
SIMATIC NET 8.2 implements OPC DA on top of COM/DCOM with two cooperating services per PC station. Understanding them is mandatory before changing permissions.
| Component | Service / Executable | Function | Default Account |
|---|---|---|---|
| OPC DA Server |
SIMATIC NET OPC Server (out-of-process COM) |
Exposes tags for S7 / S7-1200 / S7-1500 / PROFINET / WinAC | Local System or configured user |
| S7DOS Help Service |
S7DoS Help Service (S7dos_serv.exe) |
Station name resolution (PC station index lookup for remote clients) | Local System |
| SIMATIC NET Configuration |
Configuration Console (s7wsvcx.exe) |
Local PC station mode and DB configuration | Interactive user |
| COM Security Helper | SimaticComSettings.exe |
One-click DCOM permission hardener | Interactive user |
The OPC server registers its CLSID under HKEY_CLASSES_ROOT\CLSID and HKEY_LOCAL_MACHINE\SOFTWARE\Siemens\SIMATIC NET\OPCSrv. A remote OPC client first contacts the S7DOS service on UDP/TCP to resolve the station name, then opens an authenticated DCOM channel to the OPC server CLSID. If any of the four layers below fails, the remote client silently reports "Cannot connect to OPC server" while local enumeration still succeeds.
3. Root Cause Analysis
The "works server-to-server, fails from third PC" pattern has five independent causes, each with its own diagnostic fingerprint. Walk them in this order before changing anything.
| # | Layer | Symptom | Fast Check |
|---|---|---|---|
| L1 | Windows Firewall or intermediate firewall | RPC error 0x800706BA (E_RPC_SERVER_UNAVAILABLE), DComLaunch hung | Test-NetConnection -ComputerName <Srv> -Port 135 |
| L2 | S7DOS Help Service not started / wrong logon | Server list empty from third PC; "Cannot find station" in Event Log | sc query S7DoS |
| L3 | DCOM Access / Launch permissions missing for third user | 0x80070005 (E_ACCESSDENIED) in OPC client trace |
dcomcnfg → My Computer → COM Security |
| L4 | COM authentication level mismatch (RPC_C_AUTHN_LEVEL_*) | 0x80070721 or "CoCreateInstance failed" with no further detail |
dcomcnfg → Default Properties |
| L5 | SIMATIC NET PC station mode not installed on the client | Client cannot enumerate server list even with correct DCOM | Check SIMATIC NET Configuration Console on client |
4. Solution A — Run the SIMATIC NET Communication Settings Helper
The Siemens-shipped helper configures DCOM, the firewall, and the SIMATIC NET service logon in one pass. Use it on the OPC server PC first, then re-test.
- Log in to the OPC server with a Windows account that has local administrator rights.
- Launch Start → Siemens Automation → SIMATIC → SIMATIC NET → Communication Settings.
- Click Apply. The tool performs five sub-steps:
- Registers SIMATIC NET OPC server CLSIDs (
{B6EACB30-9D4F-11D1-A80A-006008A74BFA}and{B6EACB40-9D4F-11D1-A80A-006008A74BFA}). - Sets
RPC_C_AUTHN_LEVEL_PKT_PRIVACY(encrypt) on the OPC server CLSID — required for DA 3.0. - Adds ANONYMOUS LOGON, EVERYONE, and the configured SCADA user to the DCOM Access and Launch ACLs.
- Opens Windows Firewall inbound rules for
OPCEnum.exe,S7DoS_serv.exe, and the SIMATIC NET OPC server executable. - Starts the S7DOS Help Service in auto-start mode.
- Repeat the helper on the client PC (third SCADA node) so its own DCOM outbound ACLs match.
- Reboot both machines when prompted. SIMATIC NET 8.2 requires a restart for the COM security cache to flush.
dcomcnfg on the server and expand Component Services → Computers → My Computer → DCOM Config → SIMATIC NET OPC Server. Right-click → Properties → Security. The three tabs (Launch, Access, Configuration) must list INTERACTIVE, EVERYONE, and Siemens SIMATIC NET Users with Allow. If a tab shows only Default, the helper did not run with elevation.
5. Solution B — Manual DCOM Hardening for SIMATIC NET
When the helper is unavailable (locked-down corporate image, missing installation media) or when granular audit is required, perform these steps manually. All changes are on the OPC server unless noted.
5.1 Default COM Security Properties
-
Component Services→ My Computer → right-click → Properties → Default Properties tab. - Enable Enable Distributed COM on this computer.
- Set Default Authentication Level to Connect for legacy DA 2.0 clients or Packet Privacy for DA 3.0 clients (Scout, WinCC 7.4 SP1, TIA Portal V14+).
- Set Default Impersonation Level to Identify.
5.2 COM Security ACLs
Edit My Computer → Properties → COM Security tab.
-
Access Permissions → Edit Limits: add
EVERYONEAllow Local + Remote. For hardened environments, replace with the explicit SCADA service account. -
Launch and Activation Permissions → Edit Limits: add
EVERYONEAllow Local Launch, Remote Launch, Local Activation, Remote Activation. -
Access Permissions → Edit Default: identical scope, plus
ANONYMOUS LOGON. - Launch and Activation Permissions → Edit Default: identical scope.
5.3 SIMATIC NET OPC Server CLSID Permissions
- In DCOM Config locate SIMATIC NET OPC Server (CLSID
{B6EACB30-9D4F-11D1-A80A-006008A74BFA}for DA 3.0,{B6EACB40-9D4F-11D1-A80A-006008A74BFA}for DA 2.0). - Right-click → Properties → Security tab → customize all three sections as in §5.2.
- Identity tab: keep The launching user for service accounts or This user with the SIMATIC NET runtime account for unattended operation.
- Endpoints tab: leave default unless a custom static port is required (e.g.
5000-5020TCP for Siemens S7 routing).
5.4 OPCEnum and S7DOS Registration
SIMATIC NET 8.2 ships its own OPCEnum.exe (Siemens-internal build, version 8.2.x.y) and S7DOS help service. Re-register on the server with administrative command prompt:
cd "C:\Program Files\Siemens\Automation\SIMATIC.NET\opc2\bins\opcenum"
regsvr32 /u opcenum.exe
regsvr32 opcenum.exe
sc stop S7DoS
sc start S7DoS
sc query S7DoS
6. Solution C — Firewall, RPC, and Network Configuration
DCOM negotiates dynamic TCP ports (1024-65535) via the RPC endpoint mapper on TCP/135. Both Windows Firewall with Advanced Security (WFAS) and any intermediate L3 firewalls must allow:
| Port | Protocol | Source | Destination | Purpose |
|---|---|---|---|---|
| 135 | TCP | Client | Server | RPC Endpoint Mapper |
| 1024-65535 | TCP | Client | Server | DCOM dynamic range (or restricted static range) |
| UDP 6110 | UDP | Client | Server | S7DOS station name resolution (legacy) |
| TCP 49152-49157 | TCP | Client | Server | Reserved Win10/Server 2016+ RPC range (override possible) |
For a deterministic rule set, restrict the DCOM range with the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Rpc]
"EnableAuthEpResolution"=dword:00000001
"RestrictRemoteClients"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet]
"Ports"="5000-5020"
"PortsInternetAvailable"="N"
"UseInternetPorts"="N"
This binds SIMATIC NET OPC to TCP 5000-5020 only. Then create one inbound rule on the server allowing that exact range from the third client IP.
7. Solution D — Authentication, User Rights, and Kerberos Delegation
Identical Windows user accounts are necessary but not sufficient. The third PC must also have:
- Membership in the local group Distributed COM Users on the server (or the configured OPC group).
- Log on locally (or Access this computer from the network) right granted to the user account on the server — default for Domain Users.
- If the SIMATIC NET OPC server runs under a dedicated service account (recommended for production), the SPN
HOST/<server-fqdn>must be registered to that account for Kerberos to succeed.
Register the SPN with administrative command prompt on a domain controller:
setspn -S OPCSIMATIC/<server-fqdn> <DOMAIN\service-account>
setspn -L <DOMAIN\service-account>
Then, on the third client PC, force Kerberos delegation for the OPC server name in Setspn + Active Directory Users & Computers → service account → Delegation tab → Trust this user for delegation to specified services → add HOST and cifs against the server SPN.
NTLM vs Kerberos Failure Codes
| HRESULT | Name | Typical Cause | Fix |
|---|---|---|---|
| 0x80070005 | E_ACCESSDENIED | Missing DCOM Launch/Access right | §5.2 ACL |
| 0x800706BA | RPC_SERVER_UNAVAILABLE | Firewall / endpoint mapper / RPC service stopped | §6 + restart RPCSS |
| 0x80070721 | RPC_E_AUTHN_LEVEL_MISMATCH | Server encrypts, client allows only Connect | §5.1 Default Authentication Level |
| 0x80010119 | RPC_E_SERVER_TOO_BUSY | Server CPU saturated or COM quota reached | Increase SharedSection in registry |
| 0x8001011A | RPC_E_CALL_CANCELED | Client timed out before RPC handshake | Check network latency, MTU |
8. Solution E — SIMATIC NET PC Station Mode on the Client
A subtle SIMATIC NET requirement: the client PC must have the SIMATIC NET Configuration Console installed with a PC station of its own, even if it has no S7 connection. The OPC client uses the local PC station index to negotiate the channel. Without it, server browsing succeeds but CoCreateInstance on the OPC server CLSID returns 0x80040154 (CLASS_NOT_REGISTERED) on the client side, masquerading as a server fault.
Install SIMATIC NET 8.2 in Client mode on the third PC. Open Station Configuration Editor, add a new station matching the host name, save, and close. The OPC Scout will then enumerate servers across the network.
9. OPC UA Migration Path
DCOM-based OPC DA is deprecated. SIMATIC NET 8.2 supports OPC UA server on the S7-1200, S7-1500, and WinAC side and OPC UA client on the PC station side. Migration removes every layer covered above.
| Property | OPC DA 3.0 (DCOM) | OPC UA (TCP, no DCOM) |
|---|---|---|
| Transport | COM/DCOM, RPC over TCP 135 | TCP binary or HTTPS, port 4840 (default) or 443 |
| Security | RPC authentication levels | Application + transport certificates, signing/encryption |
| Firewall impact | Dynamic RPC range required | One static port |
| Platform | Windows only | Cross-platform |
| Siemens support lifecycle | End of active development (V8.2 final) | Primary direction in TIA Portal V17+ |
To enable OPC UA on SIMATIC NET 8.2:
- Open SIMATIC NET Configuration Console → OPC UA.
- Activate the OPC UA Server for the configured S7 connection.
- Import or auto-generate the server certificate (
CN=SIMATIC NET OPC UA). - Add an Endpoint on
opc.tcp://<server>:4840withSecurityPolicy = Basic256Sha256andMessageSecurityMode = SignAndEncrypt. - Distribute the server certificate to the client's trusted peers (
%ProgramData%\Siemens\Automation\OPCUAServer\pki\trusted). - From the third PC, point OPC Scout or any OPC UA client to
opc.tcp://<server>:4840and authenticate with a user token.
10. Verification Procedure
After applying any of the solutions above, run this checklist from the third PC. Each step has a pass/fail criterion.
| Step | Command / Action | Pass Criterion | Fail → Section |
|---|---|---|---|
| V1 | Test-NetConnection -ComputerName <Srv> -Port 135 |
TcpTestSucceeded: True | §6 |
| V2 | Get-Service S7DoS -ComputerName <Srv> |
Status: Running | §4 step 5 |
| V3 | Run OPC Scout → OPC.SimaticNET → Server List |
Both SCADA servers listed | §2, §8 |
| V4 | Add group Test.Group, item S7:[S7 connection_1]DB1,W0
|
Quality Good, Value updates | §5.3, §7 |
| V5 | From third PC, repeat V3 and V4 simultaneously to both servers | Both servers respond < 200 ms | §6, §10 perf |
| V6 | Reboot third PC; V3-V5 must succeed without re-login | Service auto-restart OK | §4 step 5, §7 |
11. Troubleshooting Matrix
| Symptom | First Action | Second Action | Third Action |
|---|---|---|---|
| Server list empty from third PC, full from server itself | Verify S7DOS service running on server (§4 step 5) | Run SimaticComSettings.exe on server |
Check UDP 6110 between hosts |
Server list visible but Add Server fails with 0x800706BA |
Test-NetConnection to 135 |
Check intermediate firewall stateful inspection | Verify RPCSS service Running on server |
| Add Server OK, Connect OK, Read returns 0x80070005 | Inspect server-side Application Event Log for DCOM error 10016 | Run dcomperm against the CLSID ACL |
Add the connecting user to OPC Users group |
| Read returns 0x80070721 | Match Default Authentication Level on server (§5.1) | Match endpoint AuthenticationLevel on client DCOM Config | Force legacy Connect if DA 2.0 only |
| Intermittent drops after 15 min | Check DCOM Session Timeout registry value | Inspect SMB session limit | Disable TCP chimney offload on Broadcom NIC |
| Works from one third PC, fails from another | Compare gpresult /r
|
Check WinRM / WMI group policy | Rebuild client with SIMATIC NET install media |
| Works before Windows update, fails after | Review KB article for KB IDs that affect DCOM (e.g. KB5005565) | Re-apply SimaticComSettings.exe
|
Pin DCOM group policy via GPO |
12. Frequently Asked Questions
Why does my third PC fail to connect to SIMATIC NET 8.2 OPC DA when the two SCADA servers connect to each other fine?
The two SCADA servers were configured by the SIMATIC NET Communication Settings helper, which sets machine-wide DCOM Access/Launch ACLs and starts the S7DOS Help Service. The third PC was never enrolled, so its DCOM outbound and the server's inbound ACLs do not match. Run SimaticComSettings.exe on both server and client, then reboot.
Do I need SIMATIC NET installed on the OPC client PC, or only on the server?
Yes — the client PC must have SIMATIC NET 8.2 installed (Client mode) with a configured PC station in the Station Configuration Editor. Without it, CoCreateInstance on the SIMATIC NET OPC CLSID returns 0x80040154 (CLASS_NOT_REGISTERED) even though DCOM is correct.
Which TCP ports must be open in the firewall for SIMATIC NET OPC DA remote access?
Open TCP/135 (RPC Endpoint Mapper) plus the DCOM dynamic range (default 1024-65535) or a restricted static range such as TCP/5000-5020 if you set PortsInternetAvailable=N in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet. UDP/6110 is also required for S7DOS station-name resolution on legacy SIMATIC NET builds.
What is the equivalent HRESULT for "Cannot connect to OPC server" in SIMATIC NET 8.2?
The generic message maps to one of five HRESULTs: 0x800706BA (RPC_SERVER_UNAVAILABLE), 0x80070005 (E_ACCESSDENIED), 0x80070721 (RPC_E_AUTHN_LEVEL_MISMATCH), 0x80010119 (RPC_E_SERVER_TOO_BUSY), or 0x80040154 (CLASS_NOT_REGISTERED). Enable the COM+ tracing on the server to see the precise value in the Application Event Log.
Should I migrate from OPC DA to OPC UA on SIMATIC NET 8.2?
Yes. SIMATIC NET 8.2 supports both DA and UA, but DA relies on DCOM and is deprecated by both Siemens and the OPC Foundation. Enable OPC UA on TCP/4840 with Basic256Sha256 and SignAndEncrypt; distribute the server certificate to trusted peers; and switch the third client to an OPC UA endpoint. This eliminates every firewall, DCOM, and Kerberos configuration step covered in this article.