오늘은 NSX DFW Rule에 의해서 특정 Packet이 Drop 되는 현상에 대해서 알아보겠습니다.
[구성 환경]
VM1의 NAT는 ESXi 서버 외부에 있는 Physical Firewall에서 NAT 기능 적용(SNAT, DNAT)
VM2의 NAT는 NSX의 NAT 기능 적용(SNAT, DNAT)
[문제 증상]
다음과 같은 환경에서 IP Address C에서 Listening 중인 15010 Port로 연결 실패
[Troubleshooting Notes]
1. 두 VM 간에 ICMP 테스트는 정상
2. 연결이 필요한 15010/tcp Port로는 연결 실패
# telnet D(C의 NAT IP) 15010
3. VM2에 SSH로 접속하여 실제로 15010을 Listening 중인지 확인
# netstat -anp 결과 확인 15010 listening 중으로 확인
4. VM2의 SSH Session에서 tcpdump를 수집 시작한 후, VM1에서 "telnet D(C의 NAT IP) 15010" 명령 실행 시 수신 Packet이 확인되지 않음
# 즉, VM 외부에서 Packet이 Drop 되는 것
# 여기서 VM 외부는 매우 많은 위치가 존재하기 때문에 구간 별로 Packet 누락 여부를 구분할 필요가 있음
5. 우선, VM2의 vNIC Level에서 Packet을 확인했지만 VM2 내부에서 tcpdump로 확인한 바와 같이 Packet이 확인되지 않음
# nsxdp-cli vswitch instance list 명령어로 VM2의 vNIC에 해당하는 Port 정보 확인
# pktcap-uw --switchport 134217798 --srcip B(A의 NAT IP) --capture VnixTx,VnixRx -o - | tcpdump-uw -r - -nne
6. 따라서, 그 아래 Layer에 위치한 DVfilter에서 Packet 확인
# 먼저, summarize-dvfilter 명령어로 VM2의 dvfilter에 해당하는 name 확인
summarize-dvfiliter 명령어 결과에서 VM2에 해당하는 결과 확인
# summarize-dvfilter
world 2110126 vmm0:vm2 vcUuid:'50 20 6a 9a b0 5a bf f1-5e 66 fc 8b 35 ba ba 22' port 134217798 vm2.eth0 vNic slot 2 name: nic-2110126-eth0-vmware-sfw.2 agentName: vmware-sfw state: IOChain Attached vmState: Attached failurePolicy: failClosed serviceVMID: 1 filter source: Dynamic Filter Creation moduleName: nsxt-vsip-17975768 |
# pktcap-uw --capture PreDVFilter --dvfilter nic-2110126-eth0-vmware-sfw.2 -o - | tcpdump-uw -r - -nne
# pktcap-uw --capture PostDVFilter --dvfilter nic-2110126-eth0-vmware-sfw.2 -o - | tcpdump-uw -r - -nne
7. 6번 단계에서 수집한 Packet을 확인해보면 PreDVFilter 단계에서는 Syn flag packet이 보이지만, PostDVFilter 단계에서는 Syn flag packet이 보이지 않음
즉, DVfiilter에 설정된 Rule에 의해서 Syn flag packet이 VM2의 Guest OS 내부로 전달되지 못한 것으로 확인
8. 따라서, VM2의 DVfilter Rule 확인
먼저, Source와 Target IP Address의 address set 확인
# /bin/vsipioctl getaddrsets -f nic-2107550-eth0-vmware-sfw.2
addrset 720ffe31-aaf5-411c-ab6e-1ccc03dab06c { ip B(A의 NAT IP), } addrset 084f2f4b-c764-42bd-bb31-47f4f794dd00 { ip x.x.x.x, ip C(VM2의 Real IP), } |
다음으로 address set을 이용한 Rule 확인
## rule 2845와 2846을 보면 VM2의 Real IP Address인 112.107.102.72가 속한 address set인 084f2f4b-c764-42bd-bb31-47f4f794dd00에 대해 drop rule이 추가되어 있음
## 결국 이 rule에 의해서 packet이 drop 되는 것으로 확인
# /bin/vsipioctl getrules -f nic-2107550-eth0-vmware-sfw.2
/bin/vsipioctl getrules -f nic-2107550-eth0-vmware-sfw.2 ruleset mainrs { # generation number: 0 # realization time : 2023-09-04T04:19:11 # FILTER (APP Category) rules <snip> rule 2845 at 39 inout protocol any from addrset 084f2f4b-c764-42bd-bb31-47f4f794dd00 to any drop; rule 2846 at 40 inout protocol any from any to addrset 084f2f4b-c764-42bd-bb31-47f4f794dd00 drop; rule 3 at 41 inout inet6 protocol ipv6-icmp icmptype 135 from any to any accept; rule 3 at 42 inout inet6 protocol ipv6-icmp icmptype 136 from any to any accept; rule 4 at 43 inout protocol udp from any to any port {67, 68} accept; rule 2 at 44 inout protocol any from any to any accept; <snip> |
9. 고객사 확인 결과 다음과 같이 방화벽 정책 정리
## 고객사 방화벽 정책 수정 필요
Source | Destination | Service | Action |
C(VM2의 Real IP) | B(A의 NAT IP) | TCP_15012-15015 | Allow |
C(VM2의 Real IP) | Any | Any | Drop |
Any | C(VM2의 Real IP) | Any | Drop |
Any | Any | Any | Allow |
'Networking' 카테고리의 다른 글
Load Balancer 정보 조회 (0) | 2023.11.05 |
---|---|
One-arm Load Balancer 생성 (0) | 2023.10.30 |
BFD Collect packets (0) | 2023.09.25 |
BFD Configuration on Tier-0 and Router (0) | 2023.09.25 |
BFD Overview (0) | 2023.09.25 |