[Network] NAT : 공인 IP와 사설 IP (+ 포트 포워딩 설정)
IP 주소 체계의 단점
IPv4 주소 체계는 32비트 주소 공간을 제공하며, 약 43억 개의 주소를 나타낸다. 그러나 인터넷의 확산에 따라서 공용 IPv4 주소의 고갈이 발생했다. 실제로 2015년, ARIN에서 아이피 주소가 고갈되었다고 밝혔다.
또한 IP가 조직별 블록으로 할당되며, 이러한 할당 방식은 종종 각 조직이 필요한 주소보다 더 큰 블록을 할당받게 됨으로써 주소 공간의 낭비를 초래하였다.
이를 극복하기 위해서 IPv6와 NAT이 등장하였다.
IPv6 주소 체계는 128비트의 값을 가져 2^128개의 기하급수적인 주소를 할당할 수 있다.
공인 IP와 사설 IP
공인 IP (Public IP)
외부에 공개되어 있는 IP
공인 IP는 전 세계적으로 고유하며 인터넷 상에서 라우터, 서버, 네트워크 장비 등에 할당된다.
이 주소는 전 세계에서 고유한 주소값을 가지며, 외부에서 직접 접근 가능하고 인터넷에서 다른 장치들과 통신할 때 사용된다.
인터넷 서비스 제공자(ISP)에 의해 할당된다.
사설 IP (Private IP)
조직 내부에서 사용되는 IP
사설 IP는 개인적인 네트워크나 조직 내부에서 사용되는 IP 주소이다.
주로 가정이나 회사 내부 네트워크에서 사용되며, 흔히 내부망이라고 불리는 조직 내 네트워크는 해당 IP를 사용한다.
내부 네트워크의 장치들은 라우터나 DHCP 서버에 의해서 사설 IP 주소를 할당받아 통신한다.
각자의 내부 네트워크에서 사용되기 때문에 고유하지 않고, 다른 네트워크의 IP 주소와 중복될 수 있다.
-> A회사의 1번 컴퓨터의 사설 IP와, B회사의 3번 컴퓨터의 사설 IP가 같을 수 있다. 또한 A회사의 1번 컴퓨터와 B회사의 3번 컴퓨터가 사설 IP를 이용하여 직접 통신할 수는 없다.
사설 IP는 직접적으로 외부 네트워크에 직접 통신할 수 없으나 NAT을 통해 공인 IP 주소와 매핑되어 외부와 통신할 수 있다.
주소는 아래의 특정 범위 내에서 선택된다.
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
위의 사진을 보면 왼쪽에 192...로 시작되는 3대의 컴퓨터는 사설 IP를 할당받았고, 이는 가운데에 있는 라우터에 의해 부여된 주소이다.
그리고 라우터는 공인 IP 주소가 있어서 외부 네트워크와 통신이 가능한 상태이다. 즉 하나의 공인 IP가 여러개의 사설 IP를 운영하고 있는 그림이 그려지고 있으며, 내부망의 컴퓨터들은 라우터에 의존하게 된다.
NAT
앞에서 사설 IP 주소를 이용해서는 외부와 직접 통신할 수 없다고 하였다. 이 때, NAT은 내부 네트워크에서 사용되는 사설 IP 주소를 공인 IP 주소로 변환하여 외부 네트워크와 통신할 수 있도록 하는 기술이다.
주요 개념은 포트 번호의 사용과, NAT 변환 테이블(NAT translation table)의 사용이다.
여러 개의 사설 IP를 하나의 공인 IP로 표현하기에 유용한 수단으로서 포트번호가 사용되었다.
10.0.0.1, 10.0.0.2, 10.0.0.3라는 사설 IP가 있고, 138.76.29.7이라는 공인 IP가 있다면,
- 10.0.0.1 -> 138.76.29.7:5001
- 10.0.0.2 -> 138.76.29.7:5002
- 10.0.0.3 -> 138.76.29.7:5003
이런 식으로 변환하여 사용하자는 개념이다. 이를 통해서 하나의 공인 IP로 이론 상 최대 65535개의 사설 IP를 운영 가능하다. (포트번호는 0~65535)
이를 수행해주기 위한 매핑 테이블이 NAT 변환 테이블이다.
아래의 그림을 한번 보면서 NAT의 원리에 대해서 살펴보자.
1. 호스트가 자신의 사설 IP 주소와 포트 번호를 사용하여 외부로 통신 요청을 보낸다. 이 때 내부 네트워크에서 나가는 통신 패킷이 NAT 장비(일반적으로는 라우터이다)에 도착하면 NAT 장비는 출발지의 사설 IP 주소와 포트 번호를 기록한다.
2. 그 다음 NAT 장비는 내부 장치의 사설 IP 주소를 공인 IP 주소로 변환하여 외부 네트워크로 통신할 수 있도록 한다.
2. 10.0.0.01.3345는 밖으로 나갈 때는 138.76.29…으로 매핑되어 바뀌는 것을 기억, 사설 ip<->공인 ip주소로 라우터가 번역. 변환시 port number도 바뀌는데 들어올 때 어느 기기로 들어와야 하는지를 기억하지 위해서이다.
Wireshark로 관측하기
다음은 Wireshark에서 NAT_home_side와 NAT_ISP_side를 동시에 관찰하면서 “http&&ip.addr==64.233.169.104”로 display filter를 실행한 것이다. 즉 HTTP 트래픽 중 목적지 IP 주소가 64.233.169.104인 트래픽을 관찰하는 것이다.
- NAT_home_side : 내부 네트워크에서 외부로 나가는 트래픽
- NAT_ISP_side : 인터넷 서비스 제공자(ISP) 측면, 외부에서 내부 네트워크로 들어오는 트래픽
라우터를 거치면서 Source Address가 사설 IP였던 192.168.1.100에서 공인 IP인 71.192.34.104로 매핑되어 바뀌었다.
라우터를 거쳤음을 패킷 내부를 보면서 확인할 수 있다.
위의 사진을 확인해보면 Home side에서 라우터를 거쳐 ISP side로 넘어갈 때 IP header의 변화가 있었다. Header checksum의 값이 변화가 있었으며 Time to live가 시간의 흐름에 따라서 라우터를 거쳤을 때 줄어들었다는 것을 확인할 수 있다.
그림으로 나타내면 위와 같다. 64.233.169.104로 요청된 패킷의 Source Address가 192.168.1.100 사설 IP -> 71.192.34.104 공인 IP로 NAT에 의해 변환되었다. 또한 응답의 Destination Address인 71.192.34.104 공인 IP -> 192.168.1.100 사설 IP로 변환되었다.
포트 포워딩
포트 포워딩은 외부 네트워크에서 특정한 포트로 들어오는 트래픽을 내부 네트워크에 있는 다른 포트나 IP 주소로 전달하도록 규칙을 만드는 것이다. 공유기에서 설정할 수 있다.
일반적으로, 외부에서 내부 네트워크의 컴퓨터에 접근하려면 포트 포워딩을 설정해야 한다.
이를 통해서 해당 공유기의 공인 IP의 특정 포트로 들어오는 요청을 내부망의 특정 사설 IP의 포트로 트래픽을 포워딩시킬 수 있다.
다음과 같이 공유기 설정 페이지로 들어가면(필자는 ipTIME) 포트 포워딩을 할 수 있는 인터페이스가 있을 것이다.
위의 사진은 외부 IP:1055로 들어온 요청을 내부망의 192.168.0.1:7721로 전달하도록 규칙을 설정한 것이다.
이렇게 하면 외부에서 내부 네트워크의 서비스에 접근할 수 있게 된다.
References
Data Communications and Networks, 4th Edition, Forouzan, McGraw-Hill
'CS > 운영체제 & 네트워크' 카테고리의 다른 글
[Network] TCP (1) : Connection과 Handshake, 그리고 TCP Error Control (0) | 2024.03.04 |
---|---|
[Network] Transport Layer : UDP (0) | 2024.03.03 |
[Network] Network Layer : IP & DHCP & ICMP (0) | 2024.02.23 |
[Network] 네트워크 주소 체계(Port, MAC, IP Address)와 DNS (0) | 2024.02.23 |
[Network] 데이터 전송 : 프로토콜과 OSI 7계층 및 Wireshark 패킷 분석 (0) | 2024.02.23 |