[Network]내부망을 가능하게 만드는 NAT와 NAPT의 원리

1 minute read

회사에서 일을 하다 보면, 내부망, 외부망 이라는 단어가 자주 들린다.

어렴풋이 회사 인트라넷을 구분하는 단어겠거니, 하고 자세한 개념은 모른채 넘어갔었는데,

문득 하나의 공인 IP로 어떻게 이 많은 컴퓨터들이 인터넷과 연결될까? 하는 궁금증이 생겼고,

그 답이 NAT(NAPT) 에 있다는것을 알게 되었다.

NAT (Network Address Translation)

Basic NAT, 즉 원래의 NAT는 1개의 공인IP 주소에 N개의 사설(가상) IP주소를 매핑하는 주소변환 기술의 이름이다.

현재 IPv4의 주소는 전 세계적으로 고갈 상태에 있는데, NAT는 이 고갈되어가는 주소에 대한 효과적인 해결책 중 하나이며, 회사같은 하나의 공동체에서 보안성을 향상시키기 위한 수단으로 활용될수도 있다.

다음과 같이 여러개의 사설망 IP와, 하나의 공인IP를 할당받은 라우터가 있다고 가정해보자.

(여기에 쓰인 IP주소는 임의의 주소이며, 이해를 돕기위해 사용되었다.)

이러한 상황에서 [사설망 클라이언트 1]이 외부 서버에 IPv4 패킷을 전송하게되면, 라우터는 이 패킷의 출발지 IP를 사설망 IP에서 공인IP주소로 변환한 후, 라우팅 테이블에 맵핑 정보를 기록한다.

이렇게 기록해둔 라우팅 테이블의 정보를 참고하여, 외부 서버(위의 예에서 125.209.222.13)에서 전송되어오는 패킷을 어떤 내부 클라이언트(위의 예에서 10.20.30.1)에게 라우팅 할지 결정하게 된다.

그런데, 만약 둘 이상의 내부 클라이언트가 같은 외부서버에 접근하게 되면 위와 같은 라우팅 테이블로는 어떤 클라이언트에게 패킷을 라우팅 해야 할 지 알 수가 없게 된다.

[응답 패킷을 받아야 하는 클라이언트는 1인가, 3인가?]

이 문제를 해결할 수 있는 대안이 바로 NAPT이다.

NAPT (Network Address Port Translation)

NAPT(또는 PAT)에서는 NAT에 Port Forwarding이 추가된 형태이다.

즉, [내부 클라이언트 IP , 내부 클라이언트 Port , 받을 Port ] 를 저장한다.

아래 그림을 보자.

위와 같이 라우터는 “받을 Port”를 임의로 지정하여 각 내부망 클라이언트에 맵핑 해 줌으로써,

외부에서 하나의 공인 IP로 접근하는 여러 패킷들을 각 클라이언트에게 전달 해줄 수 있다.

이렇게 Port에 따라 다른 목적지로 패킷을 전송하는 것을 Port Forwarding 이라고 하며,

이 Port Forwarding이 NAT와 NAPT의 차이점이기도 하다.

현업에서는 대체적으로 NAPT와 NAT를 구분하지 않고 NAT라고 칭한다.

이상하거나 잘못된 내용에 대한 태클은 달게 받겠습니다!!

Leave a comment