만쥬의 개발일기
article thumbnail
Published 2024. 3. 20. 09:09
[Network] - NAT란? 🖥️CS/🛜네트워크

Private Network(사설망)은 공인 인터넷이 아닌 한정된 공간에서 사용하는 네트워크를 의미합니다.

간단히 생각하면, 공유기는 공인 IP를 통해 인터넷 네트워크를 연결하고, 공유기는 공유기에 연결된 기기들에 사설 IP를 분배해주는 방식으로 네트워크가 구성됩니다.

 

가정에서 사용하는 공유기 이외에도, 라우터, 방화벽과 같은 네트워크 장비에서 사설 IP와 서브넷 마스크를 지정하고 게이트웨이로 사용가능하며, 이에 연결된 기기들에 사설 IP를 할당합니다.

 

만약 공인 IP와 사설 IP에 대한 도메인 지식이 없다면 이전 포스팅을 보며 간단히 이해하고 넘어갈 수 있습니다.

 

[스마트팜] - 공인IP와 사설 IP, 포트 포워딩

킥오프 미팅이후, 메일로 다음 미팅 약속을잡은 뒤 우리는 강서구에 위치한 업체에 가서 나스를 업어왔다. 사실 나스 설치까지는 업체측에서 해주기로 했었는데, 좋은 경험이 될 것 같아 우리가

kangmanjoo.tistory.com

 

개요

위 그림처럼 사설 IP가 분배되고 나면 공인망과 사설망의 경계에서 별도의 조치가 필요합니다.

사설망에서 공인 인터넷으로 나갈 때, 자신의 출발지 IP를 사설 IP 그대로 쓸 수 없기 때문입니다.

당연히 공유기에 할당된 공인 IP를 쓸 수도 없습니다.

 

문제는 공인망과의 통신에서만 발생하는 것이 아닙니다.

자사의 사설망과, 대외사의 사설망을 전용회선을 통해 연결할 때에도 사설 IP를 사용할 수 없습니다.

사설 IP는 어느 사설망에서나 똑같은 IP를 사용하기 때문입니다. 따라서 이 때에서 IP를 변환할 필요가 있습니다.

 

어떻게 해야할까요?

 

위 두가지 문제에 직면했을 때 IP를 변환하기 위한 방법이 바로 NAT(Network Address Translation)입니다.

NAT란, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술을 말합니다.

 

다시 말해 공인망 ➡️ 사설망 또는 사설망 ➡️ 공인망으로 통신할 때, 각각의 망에서 사용하는 IP로 변환하는 것을 의미합니다.

또한 TCP/UDP Port 숫자를 변환하는 것은 PAT(Port Address Translation)이라고 부릅니다.

 

NAT 예시

만약 사설망에 위치한 사용자 1이 공유기를 통해 공인망 웹 서버인 125.209.222.142:80 에 접속하려고 할 때, 보유한 사설 IP로는 공인망으로 접근할 수 없고, 자신의 사설 IP를 공인 IP로 변환(NAT)해야 합니다.

 

그리고 이를 NAT Device(공유기 등)이 수행합니다.

NAT 과정은 위 그림과 같습니다.

사용자가 웹 서버에 접속하기 위해 NAT 장비(Gateway)에 패킷을 보내면, IP/Port 정보는 1번 표와 같습니다.

그리고 1번 표의 정보를 받은 NAT 장비는 2번 표처럼 사용자의 사설 IP를 자신의 공인 IP로 변환하여 전달합니다.

그런데 여기서 의문이 생깁니다.

 

만약 여러 개의 사설 IP가 모두 80번 포트로 NAT 요청이 온다면, 똑같은 공인 IP와 똑같은 포트이므로 구분이 불가능 하지 않을까?

PAT

그러나 이를 위한 해결책이 바로 PAT입니다.

NAT 장비가 사설 IP로부터 패킷을 전달 받을때, 출발지의 포트를 임의로 변경하는 것입니다.

그러면 IP는 하나이지만 사용자마다 포트로 구분할 수 있게됩니다.

바로 위 그림처럼, 사용자 1에게 받은 패킷을 Port번호만 바꿔서 목적지 IP로 전달합니다.

목적지 IP에서는 응답 패킷을 보내고, 3번 표처럼 응답 패킷을 받은 NAT 장비는 과거 사용자가 보낸 요청에 대한 응답을 기억(Stateful) 합니다.

그리고 기억해둔 사설 IP와 Port번호를 이용해 응답 패킷을 4번 표 처럼 정상적으로 기존 출발지로 전달합니다.

 

L4 스위치의 NAT

출발지의 IP를 바꾸는 것이 아닌, 목적지의 IP를 바꾸는 경우도 있습니다. 대표적으로 L4 스위치에서 진행하는 NAT입니다.

사용자가 서비스 접속을 위해서 L4 스위치의 VIP(Virtual Server IP)로 접속하지만, 이는 서버들의 IP Pool을 대표하는 Virtual Server의 IP일 뿐 실제 서버의 IP가 아니므로, 실제 서버의 IP로 NAT 해 줄 필요가 있습니다.

먼저 사용자는 웹 서비스 사용을 위해 L4 스위치의 Virtual Server IP로 접속을 시도합니다.

사용자 (175.111.122.123) ➡️ L4 스위치 VIP (123.111.43.1)

 

이후 실제 서버로 Load Balancing 하기 위해 IP 주소를 변경합니다.

사용자 (175.111.122.123) ➡️ 실제 서버(192.168.1.11 or 192.168.1.12)

 

Session 장비 , Session 테이블

NAT를 수행하는 주로 Gateway 역할을 하는 네트워크 장비들로, 다음과 같습니다.

  • 가정 : 공유기
  • 기업 : 라우터, 방화벽, VPN, L4 스위치 등

 

이러한 장비들을 보통 Session 장비라고 부르며, NAT를 실시한 내역을 기록한 테이블을 Session 테이블 이라고 부릅니다.

위 사진은 NAT와 PAT 과정에서 생성된 세션 테이블의 예시입니다.

사용자의 IP를 공인 IP로 바꾸고, 포트를 임의로 변경하여 저장한 모습입니다.

 

보통 세션 장비에 정해진 규칙에 의해 허용된 IP만이 NAT를 실시할 수 있습니다.

그리고 그러한 필터링은 주로 방화벽과 같은 장비가 맡습니다.

 

NAT와 관련된 용어 정리

  • Static NAT : IP와 IP를 일대일 방식으로 변환
  • Dynamic NAT : IP Poop과 IP 1개 혹은 IP Pool을 다대다 방식으로 변한
  • Network Address Port Translation(NAPT) : 포트까지 같이 변환
  • Source IP NAT(SNAT) : Source IP를 변환
  • Destination IP NAT(DNAT) : Destination IP를 변환
  • Juniper
    • MIP : 일대일 변환
    • DIP : 다대다 변환
    • VIP : 다대일 변환

 

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!