읽기 전

  • 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
  • 개인적으로 사용해보면서 배운 점을 정리한 글입니다.

Peer to Peer 통신 관련해서 질문이 들어온 바 있다. 정확히는 사설 네트워크 내 호스트 간 통신인데 조사를 해보니 NAT 네트워크에 대한 전반적인 이해가 선행되고 나서 심화 개념에 대해 정리를 해야 함이 올바른 순서라고 판단했다. 기술면접을 위한 Network 개념정리 04 - IP에서 NAT에 관한 간략한 설명을 달아두었으나 정확히 사설 네트워크의 호스트 - 공인 서버 간 통신 과정에 대해서는 순서대로 파악한 적이 없어 이번 기회에 정리해보고자 한다.

NAT(Network Address Translation)

NAT는 하나의 공인 IP 주소에 여러 개의 호스트가 사설 IP를 가지고 통신할 수 있게끔 해주는 기법이다. 공인 IP 끼리의 패킷 전송은 IP 헤더가 바뀌지 않고 맥주소만 변경된 패킷을 송신한다고 작성한 바 있다. 그러나 사설 IP에서 공인 IP로 전환하는 작업은 IP 헤더의 정보를 수정한다.

효과

  • 공인 IP 주소의 절약
  • 하나의 공인 IP로 구성된 사설 subnet을 외부로부터 보호(방화벽)
    • 방화벽을 설치하여 공인 IP만 노출, 공격자는 방화벽이 숨겨둔 사설 IP 주소를 알아내야 함

Static NAT(1:1)

1개의 공인 IP에 하나의 사설 IP를 매핑한다. 그렇기 때문에 공인 IP 주소의 개수와 사설 IP의 주소 개수가 동일해야 한다.

Network_NAT_NAPT_Port_Forwarding_001

1:1 매핑이므로 외부에서 내부로의 접근도 가능하다.

Network_NAT_NAPT_Port_Forwarding_002

Dynamic NAT(N:M)

사설 IP 그룹과 공인 IP그룹을 매핑한다. 내부에서 외부로 통신 시 NAT를 수행하는 장치가 정보를 기록한다. 공인 IP 주소의 개수가 사설 IP 주소 개수보다 적을 때 사용한다. 1:1 매핑이 아니므로 NAT 테이블은 Static NAT처럼 고정적인 정보를 갖지 않는다. 따라서, Dynamic NAT에서의 NAT 테이블 레코드는 통신이 시작되면 그때마다 기록하는 임시 정보로 이해할 수 있다. 고정 매핑 방식이 아니기에 Static NAT와는 달리 외부에서 내부로 진입할 수가 없다. 오로지 내부에서 외부로의 통신만 가능하다.

NAT의 문제

NAT는 라우터가 사설-공인 IP 매핑 정보를 저장해두고 회신받은 패킷을 조사하여 정보가 일치하는 경우 해당 호스트로 보내주는 과정이다. 그런데 두 개의 호스트가 동시에 같은 외부 네트워크 목적지와 통신하는 경우 동일한 공인 IP가 목적지로 설정된 패킷들을 전송한다. 패킷들을 수신받은 외부 네트워크에 속한 상대는 두 호스트가 소속된 Subnet의 공인 IP를 목적지로 패킷들을 구성하여 회신한다. 그러나, 기존의 NAT만으로는 라우터가 어느 호스트에 보내줘야 할 지 알 수가 없다.

Network_NAT_NAPT_Port_Forwarding_003

공인 IP 주소를 갖는 외부 서버가 사설 Subnet의 대표 공인 IP로 전송하긴 했으나 두 호스트를 구별할 정보가 없어 문제가 발생했다. 외부 공인 IP 전송처에서 목적지가 같은 패킷을 보내더라도 Subnet으로 패킷을 전달하는 라우터가 어느 호스트가 받아야 하는지 알 수 있는 정보(포트)를 추가해야 한다.

NAPT(Network Address Port Translation)

1:N PAT라고도 한다. NAT에서 Port 정보 해석을 추가한 기법이다. 사설 네트워크에서 외부 공인 IP로 전송할 때 라우터에서 사설 IP|사설 포트|공인 IP|공인 포트를 기록해두고 원격지 서버로 패킷을 보낸다. 원격지 발송처는 동일한 공인 IP 주소를 목적지로 갖는 패킷을 보냈어도 포트를 첨부함으로써 사설 subnet의 호스트들을 구분하여 통신할 수 있다.

Network_NAT_NAPT_Port_Forwarding_004

Dynamic NAT처럼 사설 Subnet에서의 호스트들은 고정 포트로 구분된 상태가 아니기 때문에 내부에서 외부로 통신을 할 수 있으나 외부에서 내부로의 통신은 불가하다.

포트 포워딩(Port Forwarding)

그렇다면 NAPT를 수행하는 기기에 호스트들이 고정 포트로 매핑된 상태면 외부에서 내부로 통신을 할 수 있겠다는 생각이 든다. 바로 그 개념이 포트 포워딩이다. 그리고 고정 포트를 포워딩하기 때문에 역시 두 개의 IP가 동일 포트로 포워딩할 수 없다는 제약사항이 있다. 그리고 특정 포트로 포워딩 하기 위해선 반드시 사설 IP 주소:포트 형식으로 매핑 정보가 필요하다.

Network_NAT_NAPT_Port_Forwarding_005

+ Recent posts