NAT.
#1 Summary.
필수적으로 알아야겠다는 개념들에 대해 하나하나 살펴보도록 하겠다. 같이 공부하는 입장으로써 더욱이 나는 초짜이기에 아는 내용이 분명 있으실 것이고 참고정도만 해주시면 감사하겠다. 순차적으로 알아야 한다는 개념들에 대해 언급해보겠다.
#2 Meaning.
NAT(Network Address Translation)은 네트워크 주소 변환이라고 한다. 간단히 말해 외부 네트워크에 알려진 것과 다른 IP 주소를 사용하는 내부 네트워크에서 IP 주소를 변환하는 것이다. 기본적으로 192.168.x.x 같은 사설 IP 주소로는 외부와 통신(Ex...인터넷 연결) 할 수 없다. 외부와 통신할 수있는 IP 주소는 오로지 인터넷 IP 주소 관리 기관(한국인터넷진흥원)에서 공식적으로 발급한 공인 IP 주소 뿐이다.
이러한 상황을 개선시키고자 개발된 기술이 바로 NAT다. 다시 한 번 말하지만 사설 IP 주소와 공인 IP 주소를 변환해 주는 일종의 변환기다. 사설 IP 주소를 통해 외부로 네트워크 패킷을 보내게 되면 NAT는 이를 공인 IP 주소로(Ex... 현재 연결된 공인 IP 주소) 변환하여 패킷을 내보냄으로써 외부에선 마치 공인 IP에서 패킷을 보낸 것처럼 보이게 해주는 것이다. 반대로 외부에서 내부로 네트워크 패킷이 들어게 되면 NAT에선 이를 어떤 사설 IP 에게 들어온 패킷인지 판단하여 해당 사설 IP로 패킷을 보내주게 된다.
즉, 사설 IP 주소로는 원칙적으로 외부와 통신할 수 없기 때문에 이를 공인 IP 주소로 중간에 변환해줘서 외부와 통신(Ex...인터넷 연결) 할 수 있게 해주는 것이다. 한 개의 NAT는 장비가 아니라 기능 즉, 프로그램을 의미한다. 그래서 라우터 등에 NAT 기능이 포함되어 있다. 즉 NAT 기능이 포함된 라우터를 NAT 라우터라고 부른다.
흔히 볼 수 있는 NAT 라우터에는 인터넷 공유기가 있다. 공유기는 허브,스위치의 역할도 하면서 동시에 NAT 기능을 탑재하여 하나의 인터넷 회선으로(공인 IP) 다수의 컴퓨터에서(내부 사설 IP) 동시에 인터넷을 사용할 수 있게 해주는 것이다. 간단히 NAT = 인터넷 공유기라고 생각하면 된다.
Cf)여러 관련 된 개념에 대해서는 다른 글에서 자세히 다루어 보겠다.
#3 Advantages and Disadvantages of NAT.
#3-1 공인 IP 주소 공유로 인한 IP 부족을 해결할 수 있다.
#3-2 로컬 네트워크에 새로운 장비를 추가하기가 쉽다.
#3-3 사설 네트워크이기 때문에 관리자가 통제하기 쉽다.
#3-4 기관에서 ISP를 변경하는 것이 용이한데 왜냐하면 공인 주소만 바꾸면 되기 때문이다.
#3-5 외부의 공격자가 클라이언트 장비에 직접 접근하는 것이 어려워 일종의 방화벽처럼 동작한다.
#3-6 NAT는 추가적인 시스템이기 때문에 복잡성을 증가시킨다. 주소 변환 때문에 네트워크 해결하는 것을 좀 더 복잡하게 만든다.
#3-7 클라이언트 호스트엔 공인 IP주소가 없기 때문에 일부 애플리케이션 기능을 수행하지 못할 수도 있다.
#3-8 NAT는 IP 헤더 필드만을 수정하고, 데이터 영역은 수정하지 않기 때문에 특정 애플리케이션에 호환성 문제를 불러올 수 있다.
#3-9 IPSEC과 같은 프로토콜은 헤더의 변조를 탐지하도록 설계했기 때문에 NAT에 의한 변경과 악성 데이터그램 해킹을 잘못 할 수 있다.
#3-10 클라이언트 호스트는 공인 IP가 없다고 말했다. 그래서 공격자로부터 보호는 가능하지만 네트워크 클라이언트로 정당하게 접근하는 것도 어렵다. P2P(peer-to-peer) 애플리케이션을 설정하는 것은 어려운 일이며, 기관의 웹사이트는 보통 NAT 없이 구성되는 경우가 많다.
#3-11 데이터그램이 사설 네트워크와 인터넷을 오갈 때마다 주소 변환이 필요하다. 또한 헤더 체크섬을 다시 계산하는 것과 같은 추가 작업도 이뤄져야 한다. 각 주소 변환은 작은 일이지만, 모든 데이터그램에 적용하면 네트워크 지연에 영향을 주게 된다.
#4 Types of NAT.
NAT를 직정 쓰려면 여러 종류의 NAT 중에 원하는 기능을 가진 NAT를 선택하면 된다. 작은 망이나 하나의 PC만 사용할 경우 Static NAT(정적 NAT)를 사용해도 된다. 반대로 어느 정도 규모가 있는 망을 사용하기 위해서는 Dynamic NAT or PAT를 사용하는데 보안성 측면에서 뛰어난 PAT을 사용한다.
#4-1 Static NAT.
Static NAT(정적 NAT)는 하나의 사설 IP와 하나의 공인 IP 주소를 1:1로 맵핑하는 것을 의미한다. 외부에서 내부망으로 접속할 경우 공인 IP를 통해서 접속이 가능하다. 즉 한 개의 내부 IP 주소에 한 개의 공인 IP 주소가 필요하므로 주소의 절약적인 부분에서는 별로 도움이 되지 못한다.
#4-2 Dynamic NAT.
Dynamic NAT(동적 NAT)는 공인 IP 주소보다 내부 네트워크의 실제 Host 수가 적을 경우 or 모든 내부 IP 주소를 일일히 외부용 IP 주소로 고정적으로 할당할 필요가 없을 경우에 사용한다. 입력된 외부 네트워크 사용을 위한 IP 주소들은 Pool 방식으로 설정된다. 그리고 하나의 존재하는 내부 IP 주소에 Pool에 있는 하나의 외부 IP 주소가 한 번 할당되면 해당 IP 주소로부터 발생하는 모든 세션들은 이미 할당된 외부용 IP 주소를 통해 통신한다. 예를 들어 이러한 방식으로 Pool에 할당된 외부 IP 주소가 모두 사용되고 있을 때 다른 내부 IP 주소가 추가 할당을 요청하지만 이미 외부용 IP Pool에는 더 이상 할당해줄 수 있는 외부용 IP가 없기 때문에 외부로의 접근이 불가능하다. 즉 이런 경우에도 외부로의 접근이 가능하게 하려면 PAT 기능을 설정해야 된다.
CF) IP Pool ==> IP들이 들어있는 그룹이라고 생각하면 된다. IP 주소를 임의로 정해놓고 정한 부분을 Pool1으로 하던지 지정할 수 있다.
Ex) 127.0.0.1 ~ 127.0.0.5 ==> Pool1
Cf) 좀 더 깊이 들어가야 되는 부분들이 많기에 기회가 된다면 다른 글에서 자세히 살펴보도록 하겠다.
#5 Communication principles of NAT.
사설망에서 외부망으로 통신을 시도하면 해당 패킷은 무조건 공유기를 거치게 되어 있다. 처음 발신자가 게이트웨이에게 패킷을 전달했을 때 보내는 사람의 IP를 나타내는 뜻인 SRC_IP는 사설망 내부의 발신자 주소로 채워져 있다. 그러나 만약에 이것이 그대로 전달될 경우 수신자가 응답하는 상대의 주소는 사설망 내부의 IP가 되므로 전 세계의 수많은 사설망 중에 어디로 보내야 될 지 알 수가 없게 된다. 이러한 이유 때문에 외부에서 사설망으로의 접근이 불가능하여 NAT이 보안성이 뛰어나다는 말이 나오는 이유이기도 하다.
[사설망 통신 과정. 게이트웨이 => PC1은 어떻게 할까?]
그래서 통신을 위해 게이트웨이는 패킷을 받아서 패킷 안의 IP 주소를 자신의 공인 IP로 임의로 수정하여 목적지로 발신한다. 패킷을 받은 수신자는 목적지 IP 주소에 게이트웨이가 넣은 공인 IP를 넣어서 패킷을 발신할 것이고, 해당 패킷은 게이트웨이에게 도달하게 될 것이다.
[NAT가 패킷을 전달하는 과정]
게이트웨이가 발신자의 IP를 수정하여 발신할 때 게이트웨이는 내부에 갖고 있는 테이블에 이를 기록해둔다. 임의의 A 주소에서 임의의 B 주소로 무슨 프로토콜을 사용하여 발신했는지를 기록한 다음 응답 패킷이 되돌아오면 그 값을 찾아서 해당하는 사설망 기기에게 발신하는 것이다. 즉 테이블을 만들어서 저장해놓고 찾아가는 방법으로 해결할 수 있다.
#6 What is NAPT?
[NAT의 통신 문제.만약에 두 기기가 동시에 접속을 요청하면?]
NAT의 통신 방식은 여러 문제가 있지만 가장 크다고 할 수 있는 문제가 있다. 바로 여러 개의 사설망 내의 기기가 동시에 같은 외부망 주소로 접속을 요청하는 경우이다. 원래라면 요청한 곳의 주소와 포트를 보고 해당하는 사설망 주소를 찾아서 보내줘야 하는데 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다. 이러한 문제점을 해결하기 위해 탄생한 것이 NAPT.
[NAPT의 통신 과정 => 발신자 포트 번호까지 사용하므로 문제없이 통신이 가능]
NAPT(Network Address Port Translation)의 약자로 NAT에서는 발신자의 사설망 - 외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다. 이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다. 만약 발신자의 포트 번호까지 같게 패킷이 보내지면 어떻게 되느냐고도 할 수 있는데, 그럴 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.
S는 Source이고 D는 Destination이고 그 뒤에 붙은 건 IP 주소와 Port다. 위 그림은 10.0.0.11이라는 PC에서 128.119.30.38이라는 웹 서버에 접속할 때의 상황을 의미하고 있다. NAT Router는 ISP로부터 138.76.29.54라는 IP 주소를 할당 받았는데 위에서도 언급했듯이 이 주소가 실제 IP 주소이다. 일단 10.0.0.11이라는 PC의 Port 3345부터 128.119.30.38이라는 서버의 Port 80에 패킷을 보낸다. 보낸 패킷은 NAT Router에 전달되고 NAT Router는 10.0.0.11로부터 온 패킷을 받아서 목적지(Destination)을 확인하고 자신의 WAN 연결의 (138.76.29.54) Port 5001로부터 목적지인 128.119.30.38의 Port 80에 패킷을 보낸다. 이 때 NAT Router는 WAN 쪽의 128.119.30.38로부터 들어오는 Port 5001로의 접속을 10.0.0.11의 Port 3345와 연결해주도록 NAT Translation Table에 올려둔다. 그리고 서버 128.119.30.38의 Port 80으로부터 138.76.29.54(공유기)의 Port 5001 패킷이 들어온다. 이 때 서버 측에서는 NAT Router는 하나의 PC로만 인식하게 된다. NAT Router는 NAT Translation Table에 기록되어 있던 내용을 바탕으로 128.119.30.38에서 Port 5001로 들어온 패킷의 목적지를 10.0.0.11의 Port 3345로 바꿔준다. 10.0.0.11은 받은 패킷을 열어서 사용자에게 웹 페이지를 띄워준다.
좀 두서없이 설명했지만 위 그림에서도 알 수 있듯이 서버가 보기엔 공유기가 존재하지 않고, 접속하는 클라이언트가 보기에도 공유기는 존재하지 않는다. 최종 클라이언트, 즉 PC에선 서버에 직접 패킷을 보낸 것이고, 서버 측에서는 요청한 클라이언트(공유기)에게 직접 패킷을 보낸 것으로 나타난다. 즉 최종 클라이언트(PC)에서 받은 패킷도 소스는 서버의 주소이기 때문에 서버에서 직접 받은 것처럼 나타나게 된다.
'#NetWork' 카테고리의 다른 글
IPv6 Header. (0) | 2018.08.09 |
---|---|
IPv4 Header. (0) | 2018.08.07 |
TCP. (0) | 2018.08.06 |
IP. (0) | 2018.07.31 |
UDP. (0) | 2018.07.30 |