[네트워크] 4-6. NAT

kkado·2023년 5월 31일
0

네트워크

목록 보기
24/49
post-thumbnail

⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.


지난 글에서 IP를 동적으로 할당받는 방법인 DHCP를 알아보았고 글 말미에 더이상 IPv4 체계에서 주소를 할당할 수 없다는 내용과 함께 주소 할당을 절약할 수 있는 방법인 NAT를 언급한 바 있다. 이번 글에서는 NAT에 대해 자세히 알아본다.

NAT란

네트워크 주소 변환(영어: network address translation, NAT)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. (위키피디아)

좀 더 이해하기 쉽게 말하자면 로컬 네트워크 상의 모든 디바이스들이 외부 네트워크와 통신할 때 하나의 IPv4 주소를 공유하는 것 이다.

포인트는 로컬 네트워크 이다. 로컬 네트워크 내에서는 서로 다른 주소를 가지고 있으나, 이 로컬 네트워크 안에 속하는 호스트들이 다른 외부의 네트워크의 호스트와 통신할 때는 하나의 IPv4 주소를 사용한다.

  • 로컬 네트워크에서 나가는 데이터그램들은 같은 NAT IP address를 가지며 다른 포트 번호를 가진다.
  • 로컬 네트워크 내부에서 이동하는 데이터그램들은 평범하게 10.0.0/24 주소를 가진다. (위 그림 기준)

NAT의 장점

  • ISP으로부터 하나의 IP만 받아도 모든 디바이스가 공유할 수 있다.
  • 내부적으로 발생한 주소 변경 사항을 외부 네트워크에 알릴 필요가 없다.
  • 로컬 네트워크 상의 디바이스는 외부 네트워크에서 직접 접근하거나 볼 수 없으므로 보안이 우수하다.

NAT의 동작 구조

NAT 방식을 사용하는 라우터는 3가지 기능적 요구사항이 존재한다.

  • 외부로 나가는 데이터그램에 대해 IP 주소를 NAT address로 변경, 포트 번호도 새로운 포트 번호로 변환하는 기능이 필요하다.
  • 로컬 네트워크 내에서 어떤 IP address를 사용하는 호스트가 어떤 포트 번호를 할당받았는지 기억해야 한다.
  • 외부에서 로컬로 들어오는 데이터그램에 대해 기억해 놓은 IP 주소 및 포트 번호 테이블을 보고 올바른 IP 주소 및 포트 번호로 변환할 수 있어야 한다.

위와 같은 그림을 보고 예시를 들어보자.
1) 먼저 로컬 네트워크에서 10.0.0.1 IP, 3345 포트를 사용하는 호스트가 128.119.40.186 으로 데이터그램을 보낸다. 이는 NAT 라우터로 전달된다.

2) NAT 라우터는 이 데이터그램에서 source IP address 부분을 NAT IP인 138.76.29.7로 변경하고, 새 포트번호인 5001번으로 변경한다. 그리고 NAT translation table에 10.0.0.1 IP, 3345 포트를 사용하는 호스트가 5001번 포트를 사용하고 있다는 사실을 기록한다.

3) 외부에서 destination이 138.76.29.7 IP (NAT IP에 해당), 5001번 포트번호가 기록된 데이터그램이 들어오면 포트 번호를 table에서 찾은 후 10.0.0.1 IP, 3345 포트를 사용하는 호스트가 목적지임을 알게 된다.

4) 데이터그램의 destination 정보를 10.0.0.1 IP, 3345 포트로 변경하여 올바른 호스트에게 전달한다.


문제점이 있다. 로컬 네트워크 안의 호스트가 서버로서 동작함에 따라 먼저 데이터를 보내지 않고 먼저 요청을 받는 상황일 때, 포트번호 정보를 어떤 식으로 매핑해야 하는가에 대해서 고려해 볼 필요가 있다. 이에 대해 chatGPT에게 물어보았더니 3가지 해결책을 주었다.

포트 포워딩 (Port Forwarding):
포트 포워딩은 NAT 라우터가 특정 포트로 들어오는 
네트워크 트래픽을 사설 네트워크의 서버로 전달하도록 구성되는 기술입니다.
서버 관리자는 NAT 라우터를 구성하여 특정 포트로 들어오는 연결을
서버의 내부 IP 주소로 전달해야 합니다.
클라이언트는 NAT 라우터의 공용 IP 주소와 특정 포트 번호를 
함께 사용하여 서버에 연결할 수 있습니다.

UPnP (Universal Plug and Play):
UPnP는 로컬 네트워크의 장치가 네트워크 서비스 (포트 포워딩 포함)를
자동으로 검색하고 구성할 수 있는 네트워크 프로토콜입니다.
클라이언트와 서버 모두 UPnP를 지원하는 경우, 서버는 NAT 라우터에게 
포트를 동적으로 열고 들어오는 연결을 서버로 전달하도록 요청할 수 있습니다.
클라이언트는 NAT 라우터의 공용 IP 주소와 동적으로 열린 포트 번호를 
함께 사용하여 서버와 연결을 설정할 수 있습니다.

VPN (Virtual Private Network):
VPN을 사용하면 포트 포워딩이나 UPnP가 필요하지 않고, 
클라이언트와 서버 사이에 안전한 연결을 생성할 수 있습니다.
클라이언트와 서버는 둘 다 VPN 서버에 연결하여 동일한 
사설 네트워크 내에서 가상 IP 주소를 할당 받습니다.
VPN이 활성화되면 클라이언트는 서버의 가상 IP 주소를 사용하여 
서버와 통신할 수 있습니다.

확실하지 않음 주의


profile
울면안돼 쫄면안돼 냉면됩니다

0개의 댓글