OPNsense 에서 WAN:<SSH_PORT> → <NAS_IP>:2222 같은 SSH 포트 포워딩이 실제로 pf 에 반영됐는지, 트래픽이 변환돼 내부로 들어가는지를 콘솔에서 확인하는 명령 모음이다. NAT 규칙은 필터 규칙보다 먼저 처리되므로 WAN 필터 룰의 destination 은 NAT 변환 후의 내부 IP · 포트다. Port Forward 를 만들 때 "Add associated filter rule" 로 자동 생성된 룰이 그것이다.
| 구성요소 | 확인 위치 | 정상 상태 |
|---|---|---|
| NAT (Port Forward) | Firewall → NAT → Port Forward | WAN:<SSH_PORT> → <NAS_IP>:2222 한 줄 |
| 필터 룰 (WAN allow) | Firewall → Rules → WAN | wan in TCP any → <NAS_IP>:2222, enabled |
| 외부 포트 충돌 | NAT 목록 | 같은 외부 포트를 쓰는 룰이 하나뿐 |
같은 외부 포트를 두 내부 호스트로 동시에 보낼 수는 없다. 신규 호스트에는 다른 외부 포트를 쓰거나, 호스트가 이전된 것이면 기존 룰의 Redirect Target IP 를 고친다.
# NAT(rdr) 룰이 로드됐는지 — <SSH_PORT> 가 어디로 매핑됐는지
pfctl -sn | grep -E '<SSH_PORT>|2222'
pfctl -s nat
# 자동 생성된 pass 룰
pfctl -sr | grep '<NAS_IP>.*2222'
# OPNsense 가 pf 에 푸시한 최종 룰셋 원본
grep -nE '<SSH_PORT>|2222' /tmp/rules.debug
# 활성 세션
pfctl -ss | grep -E '<SSH_PORT>|:2222'
# 대상 호스트 도달성
nc -vz -w 3 <NAS_IP> 2222
netstat -rn | grep 192.168.1
arp -an | grep <NAS_IP>
# 인터페이스–서브넷 매핑
ifconfig | awk '/^[a-z]/{iface=$1} /inet /{print iface, $2}'
netstat -rn | awk '/^default/{print $NF}' # WAN 디바이스명
외부에서 ssh -p <SSH_PORT> user@<공인IP> 를 시도하면서 두 터미널로 패킷을 본다.
tcpdump -ni <WAN_IF> 'tcp port <SSH_PORT>'
tcpdump -ni <LAN_IF> 'tcp port 2222 and host <NAS_IP>'
GUI 에서는 Firewall → Diagnostics → States(필터 <SSH_PORT> 또는 2222), Firewall → Log Files → Live View, Interfaces → Diagnostics → Packet capture 가 같은 역할을 한다.
nmap -Pn -p <SSH_PORT> <공인IP> 로 확인ListenAddress 127.0.0.1 로 묶여 외부 인터페이스를 듣지 않음