# NAT Traversal 작동 방식 (2020)

> Clean Markdown view of GeekNews topic #18587. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18587](https://news.hada.io/topic?id=18587)
- GeekNews Markdown: [https://news.hada.io/topic/18587.md](https://news.hada.io/topic/18587.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-06T09:51:50+09:00
- Updated: 2025-01-06T09:51:50+09:00
- Original source: [tailscale.com](https://tailscale.com/blog/how-nat-traversal-works)
- Points: 1
- Comments: 0

## Topic Body

### NAT 트래버설의 작동 원리

- **기본 문제**: 두 기계 간의 피어 투 피어 연결을 설정하는 문제를 다룸. Tailscale의 경우, WireGuard® 터널을 설정하고자 함. 이 기술은 WebRTC, VoIP 전화, 비디오 게임 등 다양한 분야에서 사용됨.

- **UDP 기반 프로토콜**: NAT 트래버설을 위해 UDP 기반 프로토콜이 필요함. TCP를 사용할 수도 있지만, 복잡성이 증가하고 커널 커스터마이징이 필요할 수 있음.

- **네트워크 소켓의 직접 제어**: 네트워크 패킷을 보내고 받는 소켓에 대한 직접 제어가 필요함. 기존 네트워크 라이브러리를 사용하여 NAT를 통과할 수 없음.

- **로컬 프록시 사용**: 직접 소켓 액세스가 어려운 경우, 로컬 프록시를 사용하여 NAT 트래버설과 패킷 릴레이를 수행할 수 있음.

### 방화벽 이해하기

- **상태 저장 방화벽**: 대부분의 NAT 장치는 상태 저장 방화벽을 포함하며, 이는 과거에 본 패킷을 기억하고 새로운 패킷 처리에 활용함.

- **UDP 트래픽 규칙**: 방화벽은 이전에 본 아웃바운드 패킷과 일치하는 인바운드 UDP 패킷을 허용함.

- **방화벽 대처**: 모든 방화벽이 동일한 방향을 향하고 있는 경우, 클라이언트/서버 통신을 재발명한 것과 같음. 그러나 두 클라이언트가 직접 통신하려고 할 때 문제가 발생함.

### 방화벽 우회

- **방화벽 재구성 없이 해결**: 방화벽을 재구성하지 않고도 문제를 해결할 수 있는 방법이 필요함. UDP 패킷이 올바른 소스와 목적지를 가지고 있다면, 응답으로 보이는 패킷은 허용됨.

- **정보 공유**: 피어들이 상대방의 ip:port 정보를 사전에 알고 있어야 함. 이를 위해 조정 서버를 사용하여 ip:port 정보를 동기화함.

### NAT의 본질

- **NAT 장치**: NAT 장치는 패킷을 변경하며, 특히 소스 NAT(SNAT)가 문제를 일으킴. 이는 여러 기기를 인터넷에 연결하기 위해 사용됨.

- **NAT 탐색**: NAT 장치가 패킷을 변경하기 때문에, 두 피어가 상대방의 ip:port를 알지 못함. STUN 프로토콜을 사용하여 NAT 탐색을 지원함.

### STUN과 NAT 탐색

- **STUN 프로토콜**: NAT된 클라이언트가 인터넷의 서버와 통신할 때, 서버는 NAT 장치가 생성한 공용 ip:port를 볼 수 있음. STUN 서버는 클라이언트에게 이 정보를 제공함.

- **제한 사항**: STUN은 일부 경우에만 작동하며, 특히 보안 장치로 광고되는 NAT 게이트웨이에서는 실패할 가능성이 높음.

### 추가적인 해결책

- **릴레이 사용**: 직접 연결이 실패할 경우, 양쪽이 방해받지 않고 통신할 수 있는 릴레이를 사용하여 패킷을 전달함.

- **DERP 프로토콜**: Tailscale은 DERP(Detoured Encrypted Routing Protocol)를 사용하여 데이터를 릴레이하고, NAT 탐색을 지원함.

- **포트 매핑 프로토콜**: UPnP IGD, NAT-PMP, PCP와 같은 포트 매핑 프로토콜을 사용하여 NAT 장치가 더 친절하게 작동하도록 요청할 수 있음.

## Comments



_No public comments on this page._
