지난 시간에 이어 RFC 4787의 NAT 동작에 대한 설명을 이어 나가겠습니다.
아래 설명에서 사용되는 용어(Internal Endpoint, External Endpoint, Outbound Traffic, Inbound Traffic 등등)는 지난 시간 블로그의 용어 정의를 참조하시기 바랍니다.
2. Filtering Behavior
지난 시간에 설명드린 Address and Port Mapping Behavior는 Outbound Packet을 수신한 NAT가 패킷의 Destination IP와 Destination Port 값에 따라 어떻게 External Port를 변환/매핑하는지에 대한 룰이었다면, 오늘 말씀 드릴 Filtering Behavior는 Inbound Packet을 수신한 NAT가 패킷의 Source IP와 Source Port의 값(위 그림의 파란색 박스)에 따라 그 패킷을 허용(Pass, Internal Endpoint로 패킷 전달) 혹은 폐기(Drop)하는지를 결정하는 룰입니다.
■ Endpoint-Independent Filtering
여기서 Endpoint는 External Endpoint를 의미합니다.
"목적지 독립적 필터링(Endpoint-Independent Filtering)"은 External Endpoint가 보내는 Inbound Packet에 대해 (1) Destination IP와 (2) Destination Port만 검사하여 패킷의 허용 여부를 판단하고, External Endpoint의 소스 정보 즉, Source IP와 Source Port는 어떤 값(Any IP & Any Port)이라도 상관하지 않습니다. 즉, Inbound Packet의 External Endpoint 정보(Source IP & Source Port)는 신경쓰지 않겠다는 것이죠.
[아래 그림] Host A에서 Host B로의 패킷 전송에 의해 다음과 같이 Binding Entry와 Filtering Entry가 생성 되며
■ Address-Dependent Filtering
여기서 Address는 External Endpoint의 주소(Source IP)를 의미합니다.
"주소 의존적 필터링(Address-Dependent Filtering)"은 External Endpoint가 보내는 Inbound Packet에 대해 (1) Destination IP와 (2) Destination Port 그리고 (3) Source IP를 검사하여 패킷의 허용 여부를 판단하고, Source Port는 어떤 값(Any Port)이라도 상관하지 않습니다. 즉, Internal Endpoint가 보낸 패킷의 목적지(Source IP)로부터의 패킷만 허용하겠다는 것이죠.
[아래 그림] Host A에서 Host B로의 패킷 전송에 의해 다음과 같이 Binding Entry와 Filtering Entry가 생성 되며
■ Address and Port-Dependent Filtering
여기서 Address와 Port는 External Endpoint의 주소와 포트(Source IP & Source Port)를 의미합니다.
"주소 및 포트 의존적 필터링(Address and Port-Dependent Filtering)"은 External Endpoint가 보내는 Inbound Packet에 대해 (1) Destination IP와 (2) Destination Port 그리고 (3) Source IP와 (4) Source Port를 검사하여 패킷의 허용 여부를 판단합니다.
즉, Internal Endpoint가 보낸 패킷에 대한 응답 패킷(Source IP & Source Port)만 허용하겠다는 것이죠.
[아래 그림] Host A에서 Host B로의 패킷 전송에 의해 다음과 같이 Binding Entry와 Filtering Entry가 생성 되며
RFC 4787 권고 (REQ-8): If application transparency is most important, it is RECOMMENDED that a NAT have an "Endpoint-Independent Filtering" behavior. If a more stringent filtering behavior is most important, it is RECOMMENDED that a NAT have an "Address-Dependent Filtering" behavior |
RFC4798에 따르면 Endpoint-Independent Filtering이나 Address-Dependent Filtering 방식의 NAT에 대해서는 ICE (Interactive Connectivity Establishment, RFC 5245)를 통해 Peer-to-Peer 통신이 가능하지만, Address and Port Dependent Mapping + Address and Port-Dependent Filtering 방식의 NAT에 대해서는 Peer-to-Peer 통신이 불가능하여 모든 트래픽이 Relay 서버(TURN 서버)를 거칠 수 밖에 없다고 합니다.
3. Hairpinning Behavior
동일 NAT에 속한 2대의 Internal Endpoint가 NAT를 통해 서로 통신을 하는 기능을 Hairpinning이라 합니다. 3G/LTE 망에 적용된 LSN(Large Scale NAT, 혹은 CGN(Carrier Grade NAT)라고도 함)을 통해 2대의 무선 단말이 통신(Skeyp, 카톡 보이스 등)을 하는 경우가 대표적인 예일텐데요.
Hairpinning Behavior는 2가지로 나눌 수 있습니다.
■ External Source IP Address and Port
Host A가 Host B로 보내는 패킷(NAT가 수신하는 패킷)은 아래와 같습니다.
■ Internal Source IP Address and Port
Host A가 Host B로 보내는 패킷(NAT가 수신하는 패킷)은 위와 동일하구요.
RFC 4787 권고 (REQ-9): A NAT MUST support "Hairpinning" |
한가지 궁금증이 있는데요 헤어핀기능중 Internal Source IP Address and Port 내용중에 "Host A(sender)가 보낸 패킷의 Destination IP/Port(5.5.5.2/1001)로 응답 패킷이 수신되지 않아(Source IP/Port=10.1.1.2/5001) 커널의 TCP/IP 스택에서 본 패킷은 폐기 될 것입니다"라고 하셨는데 이경우 양 호스트는 10.1.1.x의 동일 랜구간인데 왜 커널 네트웍 스택에서 DROP 처리를 하는게 궁금합니다. ARP 테이블에 이미 MAC/IP 다 있을텐데요
좋은 글 잘 봤습니다~ ^^
안녕하세요? 항상 좋은 자료 잘 보고 있습니다.
제가 헤어피닝 기술에 대해 잘 이해가 되지 않아 질문드리고자 합니다.
헤어피닝 기술은 기본적으로 NAT 장비가 A, B 호스트에 대한 Mapping을 전제로 가지고 있는 것 인가요?
어떤 상황에서 헤어피닝 기술이 요구되는 것 인지 잘 모르겠습니다...
제가 나름 구글링하고 경험을 바탕으로 생각 시나리오는 아래와 같습니다.
Client A(10.1.1.1)가 Web Server B(10.1.1.2)에 접근하는데, Web Server B의 외부 주소는 5.5.5.2 임을 가장했을 때
Client A가 Web Server B에 접근하는 NAT 시나리오에서 Hairpin NAT를 사용하는 것인가요?
답변 해주시면 정말 감사하겠습니다.