더북(TheBook)

Note ≣

NAT에 관해 몇 가지 더 알아두어야 할 것이 있다. 첫째, 앞에서 설명한 기법이 모든 NAT에서 동작하는 건 아니다. 일부 NAT는 할당한 포트 번호를 계속 유지하지 않는 것도 있는데, 이를 대칭형 NAT(symmetric NAT)라 한다. 대칭형 NAT는 밖으로 나가는 요청마다 고유한 외부 포트를 할당한다. 해당 IP 주소와 포트가 이미 NAT 테이블에 있을 경우라도 그렇다. 이 때문에 STUN 메커니즘이 깨지는데, 라우터 A가 첫 패킷을 호스트 B에 보내려 할 때 새로운 외부 포트를 할당하기 때문이다. 호스트 N이 썼던 외부 포트로 호스트 B가 라우터 A와 접촉해 호스트 A에 접근하려 할 때, NAT 테이블에 해당 정보가 없으므로 패킷이 버려진다.

대칭형 NAT 중 보안이 강하지 않은 것도 있어 이들 NAT는 예측 가능한 순서로 외부 포트를 할당하는데, 이 점을 노려 포트 할당 예측(port assignment prediction)이라는 기법으로 STUN과 비슷한 트릭을 써서 대칭형 NAT를 투과하기도 한다. 보안이 강화된 NAT는 아예 임의로 포트를 할당하므로 쉽게 예측하기 어렵다.

STUN은 UDP에서만 동작한다. 3장 버클리 소켓에서 설명하겠지만, TCP는 포트 할당 체계가 다르고 접속을 리스닝하는 포트와 데이터를 주고받는 포트가 다르므로 다른 방법을 써야 한다. TCP 홀 펀칭(TCP hole punching)이라는 기법을 쓰면 이를 지원하는 NAT 라우터를 투과할 수 있다. 2.11 더 읽을거리 절의 RFC 5128에 이외에도 다양한 NAT 투과 기법을 소개하고 있으며, TCP 홀 펀칭도 찾아볼 수 있다.

마지막으로, NAT 라우터를 투과하는 데 많이 쓰는 방법이 또 있다. IGDP(Internet gateway device protocol)라는 방법으로, 일부 UPnP(Universal Plug and Play) 라우터가 채용하여 랜 호스트로 하여금 외부와 내부 포트 사이에 매핑을 수동으로 설정토록 하는 프로토콜이다. 항상 지원되는 것도 아니며 학술 가치도 덜하므로 굳이 여기서 다루진 않겠다. 구체적인 내용은 2.11 더 읽을거리 절을 참고하자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.