안녕하세요 요즘 고객사에서 문의했던 내용 중 괜찮은 내용이 있어 포스팅을 해보고자 합니다.
NAT와 FW의 Stateless / Stateful의 동작 방식에 대해 알아보겠습니다.
해당 내용에 대해 VMware NSX-T Data Center Docs에 기재되어 있어
Docs내용을 기반으로 Lab을 구성하고 실습해 보았습니다.
이 테스트의 목적은 NAT와 FW의 상관관계를 통해 Connection Table(Stateful 방식 동작)의 생성 유무를 확인하는 것입니다.
먼저 Lab의 구성도는 아래와 같습니다.
하나의 T0에 서로 다른 T1을 생성하여 연결하였고 각각의 T1에 다른 Segment를 생성하여 Attach 하였습니다.
테스트 시나리오는 Docs에 기재된 4가지를 테스트하였습니다.
테스트 방안은 VM B - VM A Ping 실행 시 Edge에 Conneciton Table의 생성 유무를 판별하는 것입니다.
1. 200.200.12.11 > 20.1.1.12 Traffic에서 FW의 Stateless / Stateful과 무관하게 동작
2. 20.1.1.12 > 200.200.12.11 Traffic에서 No-NAT 설정
3. 20.1.1.12 > 200.200.12.11 Traffic에서 FW에 Stateful 적용 시
4. 20.1.1.12 > 200.200.12.11 Traffic에서 FW에 Stateless 적용 시
1. 200.200.12.11 > 20.1.1.12 Traffic에서 FW의 Stateless / Stateful과 무관하게 동작
1-1) FW Stateless
Stateless 설정 후 VM_A에서 VM_B로 ICMP Allow를 GFW에 적용하였습니다.
Stateless FW이지만 Connection Table이 생성 되었습니다.
1-2) FW Stateful
Stateful FW을 생성 후 VM_A to VM_B Ping 실행 시 동일하게 Connection Table이 생성됩니다.
2. 20.1.1.12 > 200.200.12.11 Traffic에서 No-NAT 설정
2번 테스트의 경우 No-NAT 설정에 앞서 stateless와 stateful 방식에서의 차이점에 대해 먼저 테스트해보았습니다.
2-1) FW Stateless
VM_B to VM_A로 stateless FW을 적용하였습니다.
VM_B to VM_A로 Ping 실행이 되지 않으며 Connection Table에서 확인되지 않습니다.
2-2) FW Stateful
Stateful FW에서는 Ping이 실행되며 Connection Table에서 해당 Flow가 확인됩니다.
이제 No-NAT 설정을 진행 후 테스트를 진행해 보았습니다.
2-3) Stateless FW + No NAT
Stateless FW 정책을 유지한 상태에서 No-SNAT을 적용하였습니다.
20.1.1.12 > 200.200.12.11 Ping 통신이 되지 않습니다.
또한, Edge의 Connection Table에서도 확인 되지 않습니다.
Traceflow로 양방향 추적을 진행 해 보았습니다.
VM_B에서 VM_A로 패킷이 전달되었지만, VM_A에서 VM_B로 Reply 패킷이 전송될 때 GFW에서 Block 되는 증상이 보입니다.
방화벽정책이 B to A Allow 정책만 설정하였고 해당 정책은 Stateless이기 때문에 A to B에 대한 Allow 정책이 없어 default firewall의 정책에 의해 차단되었습니다.
여기서 확인 할 수 있는 바는 NAT처리가 되어 있지만 해당 VM_A의 IP만 No-NAT 하면 Stateless 방식이 적용된다는 것입니다.
2-4) Stateful FW + No NAT
Stateful FW의 경우 VM_B to VM_A inbound traffic에서 connection table이 생성되었고 No-NAT이지만 단방향 방화벽 정책이 있어도 통신이 가능합니다.
3. 20.1.1.12 > 200.200.12.11 Traffic에서 FW에 Stateful 적용 시
Stateful 정책을 적용하면 200.200.12.11로 inbound 되는 Traffic에 대한 테이블이 생성됩니다.
그 후 200.200.12.11에서 reply 되어 outbound 되는 패킷은 해당 테이블을 참조하여 통신하게 됩니다.
이에 따라 Edge에서는 Connection Table이 생성되게 되며 20.1.1.12에서 Packet capture 시 real ip로 통신하는 모습을 볼 수 있습니다.
4. 20.1.1.12 > 200.200.12.11 Traffic에서 FW에 Stateless 적용 시
Stateless 정책으로 단방향(20.x.x.x to 200.x.x.x) allow 설정 시 20.1.1.12는 200.200.12.11로 inbound 되지만 outbound 패킷은 SNAT 정책으로 인해 10.1.1.1로 변경되어 전송됩니다.
단방향 정책으로 인해 GFW에서 20.1.1.12로 전송되지 못하고 T1에서 해당 Packet은 삭제 됩니다.
여기에 추가적으로 양방향 Stateless 정책을 적용해 보았습니다.
결과는 icmp 통신은 정상적으로 이뤄지지 않습니다. VM_B에서 패킷을 캡쳐해 본결과 기존 Dst IP와 다른 reply ip로 인해 해당 패킷을 삭제하게 됩니다.
이렇게 Docs의 4가지 시나리오를 통해 GFW의 Stateless & Stateful 동작 방식과 NAT의 동작 방식에 대해 알아보았습니다.
'VMware > NSX-T' 카테고리의 다른 글
NSX-T Edge Maintenance mode (2) | 2023.02.17 |
---|