网络配置
网关设计为使用 2 个 NIC,以便将 PLC 网络与 WAN 进行 物理 分离。这是设备 / 工业 PC 的标准配置。
- LAN1 = PLC (eth1 / enp1s0 等) — 单个 PLC 或 switch 后的多个 PLC
- LAN2 = WAN (eth2 / enp2s0 等) — 互联网 / Platform / OTA
- wlan0 / wwan0 / tun0 / usb0 — WiFi / GSM / VPN / 管理 USB-Ethernet
NIC 名称映射可以在每个设备中通过 /etc/kopens/app.properties 的 edge.net.lan1.iface 等进行调整,并在安装时通过 env 覆盖。此设置仅用于屏幕监控卡显示,IP 设置本身由 OS NetworkManager / netplan 负责。install.sh 还提供了 nmcli 静态 IP 设置作为选项。
🔴 配置文件的名称与安装 env 的名称不同。 配置文件为 lan1,安装 env 为 NET1 — 如果提供 LAN1_IFACE,则 不会发生任何操作,将保持默认值。
app.properties 键 | 安装时提供的 env | 默认值 |
|---|---|---|
edge.net.lan1.iface | NET1_IFACE | enp1s0 |
edge.net.lan2.iface | NET2_IFACE | enp2s0 |
edge.net.wifi.iface | WIFI_IFACE | wlan0 |
edge.net.gsm.iface | GSM_IFACE | wwan0 |
edge.net.vpn.iface | VPN_IFACE | tun0 |
NET1_IFACE=enp1s0 NET2_IFACE=enp2s0 \
NET1_IP=192.168.100.1/24 NET2_IP=192.168.0.10/24 \
bash install.sh
NET1_IP 是 PLC 网络,因此 不设置默认路由。如果 NET2_IP 为空,则该侧使用 DHCP。
1. 标准拓扑
┌──────────────────────┐ ┌─────────────┐
│ 상위 플랫폼 / 클라우드 │ ◀─── HTTPS / MQTT ─── │ 게이트웨이 │
│ (PlantPulse / SCADA) │ └─────────────┘
└──────────────────────┘ enp1s0 │ enp2s0
│ │
┌───────────────┘ └────────────┐
│ │
WAN (외부) PLC 망 (내부)
│ │
│ ┌───┴────────────┐
│ │ │
PLC₁ PLC₂ PLC₃
(Modbus / S7 / OPCUA)
| NIC | 名称 (Fedora 默认) | 角色 | 默认网关? |
|---|---|---|---|
| NIC 1 | enp1s0 | WAN — 外部互联网 / 上级 Platform / NTP | ✅ Yes |
| NIC 2 | enp2s0 | PLC 网络 — 私有 IP,仅用于与 PLC 通信 | ❌ No (ipv4.never-default yes) |
2. 建议 IP 设计 (示例)
| 区域 | CIDR | 用途 |
|---|---|---|
| WAN | DHCP 或 公司内网 / 192.168.0.0/24 | 网关外部 IP — 办公室网络 |
| PLC 网络 | 192.168.100.0/24 | PLC 专用私有网 — 与 WAN 隔离 |
| 网关自身 | WAN: 192.168.0.50 / PLC: 192.168.100.10 | |
| PLC | 192.168.100.20–254 | 按线 / 按单元 |
3. 不同场景配置
3.1 简单配置 — 单一公司内网
PLC 直接连接到公司内网且没有独立 PLC 子网的情况。无需将 2 个 NIC 都置于同一网络:
- 仅使用
enp1s0(WAN) — DHCP 或 STATIC enp2s0不使用 (或 link down)
在运行 install.sh 时省略 NET2_IFACE,或在安装后于 OS NetworkManager 中将不使用的 NIC 设为 down 状态即可。
3.2 标准分离配置 — WAN + PLC 网络 (建议)
如上述 1. 标准拓扑 所示。从安全角度看,可以将 PLC 网络与外部互联网完全隔离 — 网关成为两个网络之间 唯一的桥梁。PLC 在互联网上不可见。
3.3 3 NIC — WAN + PLC + 管理
大型现场。
install.sh 仅接收 NET1_* (PLC 网络) 和 NET2_* (WAN) 这两项 — 不包含 NET3。
第三个 NIC (管理通道) 请在 安装后手动 配置。
sudo nmcli con add type ethernet ifname enp3s0 con-name mgnt \
ipv4.method manual ipv4.addresses 10.10.0.50/24
sudo nmcli con up mgnt
enp1s0(WAN) — 外部enp2s0(PLC) — 私有 PLC 网络enp3s0或 USB-Ethernet (管理) — 独立诊断 / 巡检通道 (公司 IT)
主页卡的 管理端口 显示此 NIC 的 IP。
3.4 云端 / VM 1 NIC
在 VM 环境中仅有一个 NIC 的情况 — 所有通信处于同一虚拟网络。NIC 分离在 宿主机 OS 中通过 vSwitch / VLAN 处理。
4. 从外部访问网关
部署后,若要从外部 (办公室 PC, 移动设备) 访问网关的 Web UI:
| 场景 | 方法 |
|---|---|
| 处于同一公司内网 | 通过 https://<gateway-wan-ip>/ui/main 直接访问 |
| 外部 → 公司内网 | 连接 VPN 后同上 |
| 外部 → 互联网 (危险) | 防火墙 NAT 端口转发 + 必须进行 REST API 认证 + HTTPS |
网关 v1 REST 使用
X-API-Key/ Bearer 认证。即便如此,仍不建议直接暴露在互联网。 外部访问请在设置 VPN 或 mTLS/API gateway 等额外保护层后再行允许。
5. 防火墙 — 开放端口
install.sh 将开放端口注册到防火墙。由于容器以 host 网络 模式运行,因此宿主机防火墙即是访问控制。
| 端口 | 用途 | 是否有理由对外开放 |
|---|---|---|
| 80 · 443 | Web UI · REST API | 有 — 操作员入口 |
| 1880 | Node-RED (流编辑) | 仅在需要时。编辑也可在 Web UI 中完成 |
| 12000 · 12443 | Edge 提供的 OPC-UA 服务器 | 仅在外部 SCADA 连接时开放 |
| 1883 · 8883 | MQTT 明文 · TLS | 仅在使用 MQTT 发布时开放 |
| 3000 | Grafana | ⚠ 审查 — 2026-07-02 起用于外部访问而开放 |
| 7800 · 7801 | 时序引擎 HTTP · HTTPS (时序查询) | ⚠ 审查 — 2026-07-02 起用于外部访问而开放 |
| 9042 | Cassandra | 🔴 必须审查 — 数据库端口 |
install.sh 将上述端口 不分接口 全部开放。特别是 9042 (Cassandra) 和 3000 (Grafana) · 7800/7801 (时序引擎) 通常没有理由从外部访问。
请关闭不使用的端口,或仅在 WAN NIC 侧进行拦截。
firewall-cmd --list-ports # 지금 열린 것
firewall-cmd --permanent --remove-port=9042/tcp
firewall-cmd --permanent --remove-port=3000/tcp
firewall-cmd --reload
若希望从安装起就不触动防火墙,请使用 SKIP_FIREWALL=1 安装后自行开启。
防火墙列表虽有 11 个端口,但 bin/health.sh 确认的 实际监听者为 9 个 — 80 · 443 · 1883 · 1884 · 6379 · 9042 · 1880 · 12000 · 12443。
两者不同属正常现象。防火墙是 «允许」,监听者是 «实际运行的进程」。根据配置 (例如:未使用 MQTT),可能会出现虽开放但无人监听的端口。 相反,6379 (Redis) 和 1884 虽在监听,但不在防火墙列表中 — 因此外部无法访问。
JMX 无认证,仅在 127.0.0.1 监听。从 2026.11 重新发布起,install.sh 的防火墙阶段不再开放 7799,若已开放则将其关闭 (firewall-cmd --remove-port=7799/tcp)。若使用其他防火墙 (iptables · ufw · nftables) 的设备,请手动拦截 7799。
在生产环境中,无需 外部访问 的端口请通过防火墙拦截,或 仅在 WAN NIC 侧拦截 (firewall-cmd --remove-port)。
6. 网络验证
安装后立即或在添加 PLC 前确认网络可达性:
# 1) WAN — 외부 ping
ping -c 3 8.8.8.8
# 2) WAN — DNS
nslookup google.com
# 3) WAN — 플랫폼 / 다운로드
curl -I https://product.kopens.io/plantpulse-edge/install.sh
# 4) PLC 망 — 인터페이스 활성
ip a show enp2s0
# 5) PLC 망 — PLC 도달
ping -c 3 192.168.100.20 # 첫 PLC IP
# 6) PLC 포트 도달 (Modbus 502 예시)
nc -vz 192.168.100.20 502
# Connection succeeded ... 면 정상
# 7) 게이트웨이 자체 시스템 헬스 (컨테이너 모드)
sudo bash /opt/kopens/install/bin/status.sh
curl -ks https://127.0.0.1/api/v1/system/health | python3 -m json.tool
7. 常见误区
| 症状 | 原因 / 解决方法 |
|---|---|
| WAN 正常但 PLC 无法 ping 通 | NIC 2 IP / 掩码 / PLC 侧网关设置。通过 ip route 确认路由 |
| PLC 网络似乎在泄露至互联网 | enp2s0 的 ipv4.never-default yes 缺失。nmcli con modify enp2s0 ipv4.never-default yes |
| 网关外部 IP 变更 (DHCP) | 若外部 SCADA 通过 IP 访问则会中断 — 建议使用 STATIC |
| 两个 NIC 之间存在路由 (桥接) | 检查 NIC 2 的 ipv4.method, ipv6.method。解除桥接模式 |
| PLC 侧报警响应缓慢 | 检查 PLC 网络 NIC 的 keepalive / 数据包大小。tcpdump -i enp2s0 host <PLC-IP> |
| OPC-UA 外部客户端连接被拒 | 防火墙 12000 拦截 / 证书未受信任。确认 firewall-cmd --list-ports 及 OPC-UA 安全 |
8. 更多信息
- 安装时 NIC env: 快速安装 — 指定站点值 / 网络值
- 投产前网络 Go/No-Go: 生产就绪标准
- 防火墙自动开放端口: 安装指南
- 外部暴露时的安全强化: 建议采用 REST API 认证 (外部网暴露时必选)