네트워크 구성
게이트웨이는 2 개의 NIC 로 PLC 망과 WAN 을 물리적으로 분리하도록 설계되어 있습니다. 어플라이언스 / 산업용 PC 의 표준 구성.
- LAN1 = PLC (eth1 / enp1s0 등) — 단일 PLC 또는 switch 뒤 다중 PLC
- LAN2 = WAN (eth2 / enp2s0 등) — 인터넷 / 플랫폼 / 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 static 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 — 외부 인터넷 / 상위 플랫폼 / 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 단순 구성 — 사내망 1 개
PLC 가 사내망에 직접 붙어있고 별도 PLC 서브넷이 없는 경우. NIC 2 개 다 같은 망에 둘 필요 없음:
enp1s0(WAN) 만 사용 — DHCP 또는 STATICenp2s0미사용 (또는 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 가 1 개만 있는 경우 — 모든 통신이 같은 가상 네트워크. NIC 분리는 호스트 OS 에서 vSwitch / VLAN 으로 처리.
4. 외부에서 게이트웨이로 접근하기
배포 후 외부 (사무실 PC, 모바일) 에서 게이트웨이의 웹 UI 에 접속하려면:
| 시나리오 | 방법 |
|---|---|
| 같은 사내망 안 | https://<게이트웨이-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 | 웹 UI · REST API | 있음 — 운영자가 쓰는 입구 |
| 1880 | Node-RED (플로우 편집) | 필요할 때만. 편집은 웹 UI 안에서도 됩니다 |
| 12000 · 12443 | 엣지가 내주는 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 로 설치한 뒤 직접 여세요.
방화벽 목록은 열하나지만, bin/health.sh 가 확인하는 실제 리스너는 아홉입니다 —
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 인증 적용 권장 (외부망 노출 시 필수)