NAT 종류

WebRTC를 이용하여 서비스를 하게 되면 NAT 동작 원리에 대한 깊은 이해를 요구하게 된다.

처음 WebRTC 스트리밍 서비스를 개발할 때에는 NAT 동작 원리에 대해서 신경쓰지 못했다. 막연하게 NAT에서 UDP 홀펀칭을 지원하고, WebRTC 라이브러리를 사용하면 P2P 통신이 가능하다고 이해했을 뿐이다. P2P 통신이 불가능한 상황이 발생할 수 있으므로 이럴 때에는 relay 통신을 지원하기 위한 turn 서버가 필요하다고만 생각했다. 서비스를 운영하고, 고도화 하는 과정에서 P2P 연결에 대한 의문점들이 계속 쏟아져 나왔다.

  • 개발 환경에서 테스트 할 때 항상 relay 통신만 되는 이유?
  • 회사 안에 있는 peer와 회사 밖에 있는 peer가 서로 스트리밍 연결이 될 때 항상 relay 통신만 되는 이유?
  • 회사 안 같은 네트워크에 있는데 서로 host 통신이 안되는 이유?

다양한 상황속에서 어떨때는 P2P 어떨때는 relay 통신이 되는 이유가 궁금했다. 아마 이때부터 였을 것이다. 해소되지 않는 의문점들을 해소하기 위한 노력을 기울였던 시점이.. 궁금한 부분과 WebRTC에 대한 기술부채를 해소하기 위해 팀 동료분들과 WebRTC 스터디 모임을 추진했다. 그때 이후로 NAT에도 여러 종류가 있음을 알게 되었다.

 

 NAT란? 

NAT(Network Address Translation)란 한마디로 Private Network에 위치하는 단말이 Public Network(인터넷)과 통신이 가능하도록 상호 간에 연결 시켜 주는 기능이다.

NAT를 사용함으로써 얻는 장점은 사설 IP 주소를 가진 여러대의 단말들이 하나의 공인 IP 주소를 통해 인터넷과 연결됨으로써 공인 IP 주소를 절약할 수 있고, 사내망을 사설 IP 주소화 하여 외부로 부터의 침입/공격을 차단할 수 있다. (방화벽의 개념)

 

NAT 테이블이란 공유기 메모리에 저장되어 있는 일종의 데이터베이스 같은 자료구조이다. 이 자료구조를 활용해서 NAT가 이루어지는 이력을 관리하게 된다.

NAT 테이블에 이력이 추가될 때는 아웃바운드 통신일 때 밖에 없다.

 

 NAT 종류 

NAT는 4가지 타입으로 구분된다. 각각의 NAT별 특징들에 대해서 정리해 보았다.

 

Full Cone NAT

  • 클라이언트와 한번 매핑하면 다른 곳에서도 해당 포트로 접속 가능하다.
  • private ip/port 와 public ip/port 가 매핑되면 누구든 간에 public ip/port로 접근 가능하다.
  • 보안성이 가장 낮다.

아래 표는 pc1, pc2, pc3이 3.3.3.3:80 서버에 UDP 패킷을 전송했을 때의 NAT 테이블에 저장된 데이터이다.

Remote IP, Remote Port 가 모두 Any로 등록되어 있으므로 외부에서 Public IP와 Port를 알고 있으면 pc1, pc2, pc3 등으로 패킷을 전달 할 수 있다.

  • 외부에서 2.2.2.2:2001 으로 UDP 패킷을 전송하게 되면 pc1 수신
  • 외부에서 2.2.2.2:2002 으로 UDP 패킷을 전송하게 되면 pc2 수신
  • 외부에서 2.2.2.2:2003 으로 UDP 패킷을 전송하게 되면 pc3 수신

 

Restricted Cone NAT

  • 클라이언트와 한번 매핑했지만, 클라이언트가 접속했던 서버만 접속 가능하며 서버에서는 해당 포트로 다른 소켓을 열어 접속 가능하다. (분류 기준은 IP)

pc1, pc2, pc3이 3.3.3.3:80 서버에 UDP 패킷을 전송했을 때의 NAT 테이블에 저장된 데이터이다.

Remote IP에는 서버 아이피가 기록되어 있고, Remote Port 는 Any로 등록되어 있다.

2.2.2.2 NAT로 전달되는 패킷의 출발지 아이피 정보가 3.3.3.3으로 되어 있다면 pc1, pc2, pc3 등으로 패킷을 전달 할 수 있다.

  • 3.3.3.3 서버에서 2.2.2.2:2001 으로 UDP 패킷을 전송하게 되면 pc1 수신
  • 3.3.3.3 서버에서 2.2.2.2:2002 으로 UDP 패킷을 전송하게 되면 pc2 수신
  • 3.3.3.3 서버에서 2.2.2.2:2003 으로 UDP 패킷을 전송하게 되면 pc3 수신

 

Port Restricted Cone NAT

  • Restricted Cone NAT 에서 포트 까지도 NAT 매핑 테이블에서 관리

pc1, pc2, pc3이 3.3.3.3:80 서버에 UDP 패킷을 전송했을 때의 NAT 테이블에 저장된 데이터이다.

Remote IP에는 서버 아이피가 기록되어 있고, Remote Port 에는 서버 포트가 기록되어 있다.

2.2.2.2 NAT로 전달되는 패킷의 출발지 아이피 정보가 3.3.3.3으로 되어 있고, 포트가 80이라면 pc1, pc2, pc3 등으로 패킷을 전달 할 수 있다.

  • 3.3.3.3:80 서버에서 2.2.2.2:2001 으로 UDP 패킷을 전송하게 되면 pc1 수신
  • 3.3.3.3:80 서버에서 2.2.2.2:2002 으로 UDP 패킷을 전송하게 되면 pc2 수신
  • 3.3.3.3:80 서버에서 2.2.2.2:2003 으로 UDP 패킷을 전송하게 되면 pc3 수신

 

Symmetric NAT

  • Port Restricted Cone NAT와 유사하게 동작하지만 Symmetric NAT는 대상에 따라 외부 포트를 지정하게 된다.

Port Restricted Cone NAT에서의 pc1이 3.3.3.3:80, 3.3.3.4:80, 3.3.3.5:80 서버로 패킷을 전송하게 되면 Public Port는 2001로 고정되어 사용된다. Public Port가 바뀌지 않는다는 특징이 있지만 Symmetric NAT는 대상 서버에 따라서 외부 포트가 변하는 특징이 있다.