Overview
The SIMATIC IOT2000 is Siemens' intelligent industrial IoT gateway designed to bridge field-level machinery with IT systems and cloud platforms. Two hardware variants exist: the IOT2020 with a single 10/100 Mbit/s Ethernet port and the IOT2040 with two Gigabit Ethernet ports (eth0 and eth1). Both run a customized Intel Galileo/Yocto Linux image (based on Debian) with Node-RED pre-installed for rapid application development. This reference documents how to enable outbound internet connectivity on either variant so that additional Node-RED nodes (e.g., node-red-contrib-s7, node-red-contrib-opcua) can be installed through npm.
Hardware Identification and Port Layout
Confirm the exact variant before configuring any interface file. The IOT2020 has only one RJ45 (LAN) and one USB 2.0 host port. The IOT2040 adds a second RJ45 and exposes an mPCIe slot for optional WiFi/3G/4G cards. Knowing the port count determines which configuration strategy is viable.
| Feature | SIMATIC IOT2020 | SIMATIC IOT2040 |
|---|---|---|
| Ethernet ports | 1 × 10/100 Mbit/s | 2 × 10/100/1000 Mbit/s |
| Linux interface names | eth0 |
eth0 (left), eth1 (right) |
| USB 2.0 ports | 1 | 1 |
| mPCIe slot | No | Yes (for WiFi/cellular) |
| Typical use | Single-cable serial/Ethernet bridging | Network segmentation (LAN/WAN split) |
On the IOT2040 the left port (X1, eth0) is the default management/engineering port used by the iot2000setup tool and is typically configured with a static address. The right port (X2, eth1) is intended for the upstream/corporate network. Do not place both ports in the same broadcast domain unless you intend to use bridging.
Prerequisites
-
Serial console or SSH access. Use PuTTY (Windows) or
ssh(Linux/macOS) to reach the device. The default credentials for the IOT2000 image areroot/root(change immediately on first login). -
IP plan for the management port. Default static:
192.168.200.1/24oneth0(IOT2040) or singleeth0on IOT2020. - Network with outbound internet. Either a DHCP-enabled router/switch or a documented static configuration including default gateway, subnet mask, and at least one reachable DNS server.
- Physical cabling. Cat 5e or better for Gigabit (IOT2040). Use the correct port as identified above.
-
Node-RED runtime pre-installed on the IOT2000 image (verify with
systemctl status node-red).
Method 1 - Configuring Ethernet with the iot2000setup Tool
The IOT2000 ships with a TUI setup tool that is the recommended, safe way to change network parameters. The tool validates inputs and regenerates the /etc/network/interfaces file consistently.
- Log in via SSH or serial console.
- Run
iot2000setupat the shell prompt (or invoke it from the diagnostic web page on port8443if enabled). - Navigate to Network Configuration → eth0 (and eth1 on IOT2040).
- Select DHCP if connecting directly to a router; or Static and enter
IP address,Subnet mask,Default gateway, andDNS server(use commas to separate multiple DNS entries). - On the IOT2040, configure only
eth1for internet and leaveeth0on its management address so SSH remains reachable. - Save and reboot. The tool will rewrite
/etc/network/interfacesand bring the interfaces up at boot.
eth0 on the IOT2040 into DHCP if you rely on it for shell access. Once the address is dynamic, the IOT2000 may obtain a foreign address from the upstream DHCP server, and you lose your known management path. Keep eth0 static and route via eth1.
Method 2 - Manual Configuration via /etc/network/interfaces
For deployments that do not allow the setup tool (locked-down images, scripted provisioning) edit the Debian network file directly. The syntax follows the upstream Debian Network Configuration reference.
Open the file with elevated rights:
vi /etc/network/interfaces
For the IOT2040 with a static management port on eth0 and DHCP uplink on eth1:
# /etc/network/interfaces -- IOT2040 sample
auto lo
iface lo inet loopback
# Management port -- keep static so SSH is predictable
auto eth0
iface eth0 inet static
address 192.168.200.1
netmask 255.255.255.0
# Upstream / internet port -- DHCP from router
auto eth1
iface eth1 inet dhcp
For a fully static uplink (corporate network with no DHCP), replace the eth1 stanza with:
auto eth1
iface eth1 inet static
address 192.168.10.50
netmask 255.255.255.0
gateway 192.168.10.1
dns-nameservers 192.168.10.1 8.8.8.8
Reload the configuration without rebooting:
ifdown eth1 && ifup eth1
Method 3 - Direct Laptop Bridge (Field Setup)
When no router is available, bridge the wireless NIC of an engineering laptop with its Ethernet adapter, then connect the IOT2000's uplink port to the laptop. The laptop's WiFi provides internet, and the IOT2000 reaches it through the bridged Ethernet.
- On Windows: Control Panel → Network and Sharing → Change adapter settings, select both WiFi and Ethernet, right-click → Bridge Connections.
- On Linux: install
bridge-utilsand create abr0bridge that includeseth0andwlan0, then enable IP forwarding and NAT (e.g.,iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE). - Connect the IOT2000's
eth1(IOT2040) oreth0(IOT2020) to the laptop's Ethernet port using a straight-through or crossover cable (most modern NICs auto-MDI/MDIX). - Configure the IOT uplink port for DHCP so it obtains an address from the laptop's bridge. Most OS-bridge stacks run a DHCP server (Windows ICS,
dnsmasqon Linux) by default.
DNS Resolution and /etc/resolv.conf
Even with a correct IP, gateway, and mask, npm install and apt-get update will fail silently if DNS does not resolve. Verify the resolver configuration:
cat /etc/resolv.conf
Expected output for a static setup:
nameserver 192.168.10.1
nameserver 8.8.8.8
On modern Debian-based images the file may be managed by resolvconf or systemd-resolved; the entries then come from the dns-nameservers directive in /etc/network/interfaces. If /etc/resolv.conf is empty or points to 127.0.0.1, ensure resolvconf is installed and re-trigger it:
apt-get install -y resolvconf
resolvconf -u
Verify name resolution end-to-end:
ping -c 3 8.8.8.8 # Layer-3 reachability
ping -c 3 www.siemens.com # DNS resolution check
nslookup registry.npmjs.org
If the first ping succeeds but the second fails, the issue is DNS only, not routing. Add a public resolver (8.8.8.8, 1.1.1.1) to /etc/resolv.conf as a workaround.
WiFi / Cellular Alternatives (IOT2040 Only)
The IOT2040's mPCIe slot accepts tested USB WiFi adapters and 2G/3G/4G modems. Common supported chipsets include Realtek RTL8188 and Atheros AR9271. Siemens maintains a compatibility list that maps vendor IDs to supported modes (client, managed, monitor).
- Insert the mPCIe card while the device is powered down.
- Boot and verify the kernel module loaded:
lsmod | grep rtl8188(or the appropriate driver). - Use
iot2000setup→ Network Configuration → wlan0 to scan and connect to an SSID, entering PSK as needed. - Alternatively edit
/etc/network/interfaceswith awpa-ssidandwpa-pskstanza referencingwlan0. - Test with
iwconfig wlan0(link quality) andpingan external host.
Installing Node-RED Nodes After Connectivity is Established
With outbound internet and working DNS confirmed, install S7 and OPC UA nodes from the Node-RED palette:
cd /usr/lib/node_modules/node-red
npm install node-red-contrib-s7
npm install node-red-contrib-opcua
systemctl restart node-red
Or, from the Node-RED web UI (default http://<iot-ip>:1880), use Menu → Manage palette → Install and search the flow library.
Verification Checklist
| Step | Command / Action | Expected Result |
|---|---|---|
| Interface up | ip addr show |
eth1 shows configured IPv4, state UP
|
| Default route | ip route |
default via <gateway> dev eth1 |
| Layer-3 | ping -c 3 8.8.8.8 |
0% loss, RTT < 50 ms on LAN |
| DNS | nslookup flows.nodered.org |
Returns A record, non-zero TTL |
| Repository | apt-get update |
Reads package lists, no DNS errors |
| Node install | npm install node-red-contrib-s7 |
Exits 0, no ENOTFOUND
|
| Runtime | systemctl status node-red |
Active (running), no failed restarts |
Troubleshooting Matrix
| Symptom | Likely Cause | Remediation |
|---|---|---|
ping 8.8.8.8 fails, ip route empty |
Missing default gateway | Add gateway line to interface stanza and ifdown/up
|
| IP works, hostname resolution fails | Empty /etc/resolv.conf
|
Install resolvconf and set dns-nameservers
|
No eth1 entry on IOT2020 |
Single-port hardware | Configure eth0 for both management and uplink, or use a USB Ethernet adapter |
SSH access lost after DHCP change on eth0
|
Address is now dynamic | Restore eth0 static via serial console and use eth1 for DHCP |
npm install hangs at reify:<pkg>
|
MTU mismatch, e.g., PPPoE 1492 | Set mtu 1400 on the interface, then retry |
apt-get update 401 Unauthorized |
Corporate proxy required | Configure /etc/apt/apt.conf.d/95proxies with Acquire::http::Proxy
|
| Node-RED cannot reach cloud broker | Outbound 8883/443 blocked | Open firewall or use TLS terminator |
| wlan0 not detected | Incompatible chipset | Verify against Siemens' tested USB WiFi/mPCIe list |
Security Hardening After Internet is Enabled
- Change the default
rootpassword:passwd. - Disable root SSH login in
/etc/ssh/sshd_configby settingPermitRootLogin no, thensystemctl restart sshd. - Generate an SSH key pair on the engineering workstation and install the public key via
authorized_keys. - Update the firmware image to the latest Siemens release for CVE patches.
- Restrict the Node-RED admin UI (
settings.js→adminAuth) with at least a bcrypt-hashed user. - Enable Node-RED's HTTPS (
httpsNodeRed) and disablehttpNodeAuthbypass. - If exposing Node-RED to a wider network, put it behind a reverse proxy (NGINX, Caddy) with TLS and IP allow-listing.
Operational Notes
The IOT2000 image is based on a Yocto-built Debian variant. Package versions are intentionally pinned; running apt-get dist-upgrade is not supported and can break Node-RED or the Siemens-specific services. Apply updates only through Siemens-released SD card images or firmware packages.
For production deployments, treat the IOT2000 like any other industrial controller: deterministic addressing, documented VLAN, restricted outbound destinations, and a backup of the /etc directory captured with tar -czf etc-backup.tgz /etc after a working configuration is achieved. Restore on a replacement device with scp + tar -xzf to keep MTTR low.
Why can I install Node-RED base packages but not extra nodes like S7 or OPC UA?
Node-RED ships in the IOT2000 image, but palette extensions are pulled from the public registry.npmjs.org at runtime. Without a default route and a working DNS resolver, npm cannot reach the registry. Verify ip route shows default via <gw> dev eth1 and that /etc/resolv.conf contains a reachable nameserver before retrying the install.
What is the difference between eth0 and eth1 on the SIMATIC IOT2040?
The IOT2040 has two physical ports. The left RJ45 (eth0) is the engineering/management port, default 192.168.200.1/24, and is what iot2000setup binds to. The right RJ45 (eth1) is the field/upstream port intended for the plant or corporate network. Keep eth0 static for SSH access and configure eth1 (DHCP or static) for internet.
How do I set a static IP, default gateway, and DNS on the IOT2000?
Edit /etc/network/interfaces with a static stanza: address, netmask, gateway, and dns-nameservers <ip1> <ip2>. Save the file, then run ifdown <iface> && ifup <iface> or reboot. The dns-nameservers line is honored by resolvconf to populate /etc/resolv.conf.
Can I connect the IOT2020 to WiFi without a router?
The IOT2020 has a single Ethernet port and no mPCIe slot, so native WiFi is not possible. Options are a USB WiFi adapter (if the chipset is supported by the Yocto kernel in the IOT image), or bridging the IOT2020's Ethernet to a laptop that shares its WiFi. Performance is limited by USB 2.0 and the single 10/100 Mbit/s Ethernet port.
What should I check if ping works but npm install fails with ENOTFOUND?
Layer-3 is fine, but DNS resolution is broken. Confirm cat /etc/resolv.conf has a valid nameserver; if empty, install resolvconf, add dns-nameservers to the interface stanza, and run resolvconf -u. Test with nslookup registry.npmjs.org before retrying npm.