기능 둘러보기 (Overview of Operations)
- STUN 서버는 본 규격을 제공하기 위해 다른 주소(또는 포트)를 추가로 이용해야 한다.
- STUN 서버에 본 규격이 추가된 시점부터는 더이상 RFC3489(Classic STUN)를 지원하지 않을 것이 강하게 요구된다.
- 여러 기능들이 UDP 전용이다. (STUN은 기본적으로 TCP에 대한 다중 커넥션을 금지함)
- STUN의 확장을 통해 기능을 제공하는데, 메소드 추가는 없고 속성 추가만 있다.
※ 분석자주) 본 규격(RFC5780)의 공표 연도는 2010년인데, 현재 STUN은 RFC3489에서 RFC5389를 넘어 2020년에 RFC8489로 개정되었다. 즉, RFC3489의 하위호환성 유지는 무의미하다. 자세한 내용은 여기 참조
NAT Mapping 방식 판별 (Determining NAT Mapping)
- NAT의 주소 매핑 방식을 판별
- BINDING 명령에 OTHER-ADDRESS 속성을 추가하여 진행
- UDP, TCP, TCP/TLS에서 사용 가능
- NAT 주소 매핑 방식은 아래와 같으며 RFC4787에 기술되어 있음
- Endpoint-Independent Mapping
- Address-Dependent Mapping
- Address and Port-Dependent Mapping
※ 분석자 주) 참고로 Independent Mapping을 제외한 나머지 방식은 홀펀칭이 불가능하다.
NAT Filtering 방식 판별 (Determining NAT Filtering)
- NAT의 주소 필터링 방식을 판별
- BINDING 명령에 OTHER-ADDRESS 속성과 CHANGE-REQUEST 속성을 추가하여 진행
- 선행조건이 있는데, 클라이언트가 대체(alternate) 주소와 binding이 되지 않은 상태여야 한다.
- NAT는 대체 주소가 같은 서버의 것인지 알지 못하므로 대체 응답이 그저 다른 호스트로부터의 데이터로만 처리된다. 그러므로, 대체 주소로부터의 바인딩 성공 응답은 NAT의 필터링 방식을 포함한다고 볼 수 있다.
- UDP에서만 사용 가능
- NAT 주소 필터링 방식은 아래와 같으며 RFC4787에 기술되어 있음
- Endpoint-Independent Filtering
- Address-Dependent Filtering
- Address and Port-Dependent Filtering
※ 분석자 주) Filtering 방식은 홀펀칭 가능여부와 관계가 없으나, 각 방식이 홀펀칭 과정에 약간씩 영향을 미친다.
바인딩 주소 유효시간 탐지 (Binding Lifetime Discovery)
- NAT 바인딩은 일정시간 동안 사용하지 않을 경우 소멸함. 이를 방지하기 위해 일정 주기로 keepalive를 진행하는데, 이 주기를 최대한 길게 하기 위해 바인딩의 실제 유효시간을 탐지하는 기능 제공
- RESPONSE-PORT 속성으로 두개의 포트틀 클라이언트가 이용하고 둘 간의 request/response를 통해 탐지
- 자세한 시퀀스는 추후 분석(추후 링크)
- UDP에서만 사용 가능
Hairpinning을 지원하는지 확인 (Diagnosing NAT Hairpinning)
- NAT가 *hairpinning을 지원하는지 확인
- 클라이언트의 한 포트에서 BINDING 명령을 수행하여 NAT에 매핑된 주소를 획득
- 다른 포트에서 해당 매핑 주소를 목적지로 하여 BINDING 명령을 다시 보냄.
- 클라이언트 자신이 다시 받는다면(echo) hairpin이 일어난 것임.
- UDP, TCP, TCP/TLS에서 가능
분석자주1) *hairpinning : 패킷의 목적지가 퍼블릭 주소이지만 NAT 장비 내에 매핑된 주소라면 NAT 내로 되돌려 보내는 기술
조각 난 패킷 처리 방식 판별 (Determining Fragment Handling)
- 몇몇 NAT 장비는 분할 패킷과 단일 패킷에 대한 처리 행위가 다르게 나타남
- PADDING이라는 속성을 메시지에 추가하여 강제로 분할이 일어나도록 하고, NAT의 행위를 관찰.
- RESPONSE-PORT 속성을 같이 쓸 수 없음
- UDP에서만 가능
※ 분석자주) 네트워크 분석에 쓰일 수 있겠으나, 게이밍 등에 이용할 필요는 없을 것으로 보임(역으로 fragmentation을 원천 차단할 필요 있음)
Generic ALG를 지원하는지 확인 (Detecting a Generic ALG)
※ ALG : Application Level Gateway -> 5계층 이상에서 필터링을 수행하는 기능
- 많은 NAT 장비들이 보편적인 ALG를 제공함.
- 이 기능은 패킷 내의 text든 binary든 IP 주소를 찾아내어 변경함.
- NAT에 기능이 활성화되어 있는지 확인하기 위해 STUN 서버의 바인딩 응답 내에 MAPPED-ADDRESS와 XOR-MAPPED-ADDRESS를 함께 실어 줌.
- 두 값이 다르다면 ALG가 작동하고 있는 것임.
- UDP, TCP에서 가능
※ 분석자주) 경험상 이 기능은 대부분의 STUN서버가 기본 제공하고 있는 것으로 보임