요약

  • RFC 3489는 세 가지 Binding 테스트로 경로를 개방 인터넷, 방화벽 또는 네 가지 NAT 유형 중 하나로 분류했지만, 모든 답은 소켓, 서버, 대상 주소, 주소 영역과 시점에 의존했다.
  • RFC 5389는 STUN을 매핑된 주소를 관찰하는 수단으로 유지했지만, 유형 레이블을 통과 판정으로 받아들이는 것은 거부했다. 빠진 근거는 의도한 피어로부터의 확인이었고, 직접 경로가 실패할 때 사용할 릴레이가 함께 준비되어 있었다.

2003년 3월, RFC 3489는 매력적인 압축을 제시했다. 알 수 없는 중간 장비 뒤에 있는 클라이언트는 협조하는 서버로 작은 요청 시퀀스를 보낼 수 있었다. 반환된 주소와 서버 주소가 바뀐 상태에서의 응답 유무를 근거로 클라이언트는 자신의 상황에 이름을 붙일 수 있었다: 개방 인터넷, 대칭 UDP 방화벽, 풀콘 NAT, 제한 콘 NAT, 포트 제한 콘 NAT 또는 대칭 NAT.

그 흐름도는 진단처럼 보였다. Test I는 서버에 정상적으로 응답하도록 요청하고 클라이언트 소켓과MAPPED-ADDRESS를 비교했다. Test II는 다른 IP 주소와 포트에서의 응답을 요청했다. Test III는 서버 포트만 바꿨다.CHANGED-ADDRESS로 보낸 두 번째 Test I은 매핑이 유지되는지 확인했다. 이 답들은 실제 관찰이었다. 어려움은 그것을 중간 장비의 안정적인 속성으로 끌어올리는 데 있었다.

각 결과는 특정한 실험에 속했다. 하나의 로컬 소켓, 하나의 서버와 대체 주소, 여러 변환 장비를 지나는 한 방향, 하나의 주소 영역, 그리고 하나의 시점. RFC 3489 스스로도 이후의 실행은 다른 로컬 주소와 포트를 사용해야 한다고 경고했는데, 첫 실행이 남긴 상태가 다음 결과를 무효화할 수 있기 때문이었다. 오래된 바인딩이 만료되기를 기다리는 것은 대안일 뿐이었다. 측정은 자신이 묘사하려던 표면 자체를 바꾸고 있었다.

이 범주는 또한 대상을 지웠다. STUN 서버가 관찰한 튜플은 클라이언트가 그 서버에 접촉할 때는 안정적으로 유지되다가, 의도한 피어에게 접촉할 때는 달라질 수 있었다. 필터링은 한 출발지의 응답은 허용하고 다른 출발지의 응답은 거부할 수 있었다. 직렬로 연결된 여러 NAT는 가장 제한적인 하나의 겉보기 행동으로 압축되었다. “그 NAT”에 붙은 레이블은 어느 장비, 어느 대상, 어느 타이머가 답을 만들어냈는지 감추었다.

주소 영역 조건도 똑같이 중요했다. 공통 조상 영역에 위치하지 않은 서버는 다른 참여자가 사용할 수 없는 주소를 보고할 수 있었다. 같은 NAT 뒤에 있는 두 피어도 외부 매핑을 거쳐 서로에게 도달하려 할 때 실패할 수 있었다.MAPPED-ADDRESS는 “이 서버가 이 출발지 튜플을 관찰했다”는 뜻이었다. “모든 피어가 여기서 나에게 도달할 수 있다”는 뜻이 아니었다.

수명(lifetime) 발견은 또 다른 추론을 추가했다. 하나의 바인딩을 유지하면서 점점 길어지는 대기 후 다른 바인딩을 검사함으로써, 클라이언트는 상태가 사라지는 시점을 추정할 수 있었다. 그러나 RFC 3489는 바인딩마다 타이머가 다를 수 있고, 과부하가 타이머를 동적으로 바꿀 수 있으며, 재부팅이 결과를 손상시킬 수 있음을 인정했다. 한 번 학습된 숫자는 NAT가 발급한 임대가 아니었다.

보안은 이 근거 공백을 메우지 못했다. 공유 비밀과 메시지 무결성은 특정 응답을 STUN 교환에 묶을 수 있었다. 그러나 서버 기준의 관찰을 다른 대상에 대해서도 참으로 만들 수는 없었다. RFC 5389는 일부 토폴로지에서 암호학으로 근본적으로 풀 수 없는 잘못된 매핑 주소 공격을 나중에 기술했다. 증언의 진위와 증언의 범위는 별개의 문제였다.

RFC 5389의 회고는 이례적으로 직설적이다. 경험에 따르면 고전 STUN은 배포 가능한 통과 솔루션으로 충분히 잘 작동하지 않았다. 학습된 주소는 어떤 경우에는 작동했고 어떤 경우에는 그렇지 않았다; 고전 STUN은 어느 쪽이 해당되는지 판단할 수도, 실패를 복구할 수도 없었다. 많은 NAT가 원래 유형에 깔끔하게 들어맞지 않았다. 이 개정판은 따라서 오래된 응답 주소와 변경 요청 장치를 기본 프로토콜에서 제거하고, STUN의 이름을 완전해 보이는 통과 기법에서 일련의 세션 통과 유틸리티로 바꾸었다.

이후의 아키텍처는 유용한 수신은 보존하고 과잉 주장은 버렸다. RFC 5780은 매핑 행동과 필터링 행동을 별도로 측정했으며, 여전히 명시적 한계와 함께였다. RFC 8445의 ICE는 후보를 수집하고, 후보 쌍을 만들고, 실제 당사자들 사이에서 연결성 검사를 수행한 뒤 경로를 지명했다. 현재 RFC 8656로 규정된 TURN은 직접 연결을 확립할 수 없을 때 릴레이를 제공했다. 운영상의 질문은 “이 NAT는 어떤 종류인가?”에서 “지금, 이 참여자들에게, 어느 후보 쌍이 작동하는가, 그리고 어떤 대안이 남아 있는가?”로 바뀌었다.

이 변화는 Lu Heng이 최소 공유 메커니즘과 지역화된 미래 결정 사이에서 구분한 바와 일치한다. STUN은 작은 관찰 도구로 남을 수 있고, 각 사용처가 서버, 타이밍, 인증, 검사와 대안을 정의한다. 이것은 실재 계층의 규율과도 맞닿아 있다: 소켓 생성, 요청 전달, 매핑 주소 관찰, 행동 샘플, 피어 확인, 지명, 패킷 교환, 응용 성공은 서로 다른 수신이다.

역사적 교훈은 분류가 무용하다는 것이 아니다. 레이블은 근거를 요약할 수 있다. 잘못은 요약이 그것을 만들어낸 조건보다 우위에 놓이도록 내버려두는 것이다. RFC 3489는 중간 장비에 이름을 붙였고, RFC 5389는 관심을 경로로 돌렸다.

출처