Public IP와 Private IP
Private IP의 등장 배경
IPv4 주소 체계는 1980년도에 디자인 되었으며, 약 46억 개의 IP가 존재하지만, 1990년도에 이미 43억 개의 주소가 바닥나기 시작했다.. 인구 수는 점차 증가하며 각 인구가 사용하는 디바이스도 1개 이상이다보니 46억이라는 숫자는 한참 모자라다. 이를 극복하기 위해 IPv6 주소 체계가 등장하였지만, 아직까지도 IPv4가 널리 사용되는 중이다.
이를 해결하기 위해 등장한 것이 Private IP
이다.
Public IP vs. Private IP
- Public IP(Global IP)
- 인터넷에 등록되어 있다
- 인터넷 서비스 공급자(ISP)가 제공한다
- 전세계에서 유일한 IP 주소를 갖는다
- 위치 정보를 가지고 있다 -> ISP를 특정 가능하고, (ISP와의 협력을 통해) 위치 정보 역시 특정 가능하다.
- 라우팅이 가능하다
- Private IP
- 인터넷에 등록되어 있지 않다
- 누구나 사용 가능하다
- Private IP가 동일한 컴퓨터들은 무수히 많다
- 각 클래스마다 사용 가능한 범위가 정해져있으며, 한 Public IP 내에서 여러 Private IP를 부여하는 구조이다.
- 위치 정보를 가지지 않는다
- 라우팅이 불가능하다 (물론 세팅하면 가능하긴 하다고 한다..)
Public IP를 통한 IP 추적 방법?
네이버나 구글 등에 내 아이피 주소를 검색하여 내 컴퓨터의 Public IP 주소를 확인할 수 있다.
그리고 이를 통해 IP 추적 같은 것도 가능한데, 이를 findip 등의 사이트에 접속하여 Public IP를 입력하면 해당 IP를 사용하는 컴퓨터의 위치 정보를 확인할 수 있다.
하지만, 아마 대부분의 경우 통신사 위치가 나올 것이다. 이러한 결과가 나오는 이유는 본인의 PC가 Private IP를 사용하고 있기 때문이다. 이 Private IP는 통신사의 Router를 통해 부여된 Private IP이기 때문에 통신사의 Router의 위치가 나온다.
물론 사설 IP라고 하더라도 수사권이 있는 경찰은 ISP 업체를 통해 실제 물리적 위치를 추적할 수 있다!
Private IP
Private IP는 각 클래스의 IP Address Range가 정해져있어서, IP 주소만 봐도 Public인지 Private인지 알 수 있다.
위에서 설명한 것처럼 한 Public IP 내에서 여러 Private IP를 부여하는 것이 일반적이다. 보통 라우터를 중심으로, 인터넷에 접근하기 위해서는 Public IP를 사용하고, LAN 내부에서는 각 디바이스마다 Private IP를 할당하는 구조로 설계가 되어 있다.
하지만, 라우팅이 가능한 것은 Public IP 뿐이기에 Private IP를 사용하는 각 디바이스에서 외부와의 통신은 불가능하다. 이를 위해서는 반드시 라우터(or 공유기(NAT 장비))를 껴서 Public IP로 변환 후, 라우팅을 거쳐야 한다.
예를 들어, 내가 192.168.10.4
컴퓨터를 이용하고 있다면, 인터넷에 접근하기 위해서는 라우터의 IP인 192.168.10.1
로 IP 패킷을 전달해야 한다. 그러면 라우터에서 Private IP를 Public IP인 150.100.100.100
으로 변경하여 인터넷에 접근한다.
NAT(Network Address Translation)
이러한 Private IP는 보통 공유기를 통해 소규모 인터넷을 구축할 때 흔히 사용된다. 공유기로 우리집 내부 네트워크를 구축했다고 하자. 인터넷 서비스를 돈 내고 구독한다면, ISP로부터 고유한 Public IP가 할당될 것이다. 하지만, 이 주소를 통해 연결할 수 있는 호스트는 1개 뿐이다.. 그렇다면 내 집에 있는 모든 디바이스에 Public IP를 구매하여 할당해야 하는 것일까?
아니다! 여기서 공유기와 같은 NAT 장비가 하나의 Public IP를 여러 디바이스가 동시에 '공유'하며 나눠쓸 수 있도록 해준다. 여러 디바이스가 번갈아가면서 Public IP를 사용하다보니 모두 인터넷과 통신이 가능해지는 것처럼 보이게 된다.
NAT(Network Address Translation)
란, 부족한 Public IP를 내부 Private IP로 나누어 각 호스트에 할당해주는 기술을 말한다. 공유기는 대표적인 NAT 장비로, 단일 IP에서 하위 호스트 디바이스가 인터넷 연결을 가능하게 해준다. 이러한 NAT 장비는 라우터에 비해 가격이 많이 저렴하며, 주로 가정에서 사용된다.
공유기
앞서 설명한 것처럼, 공유기를 사용하면 ISP에서 할당받은 하나의 Public IP 주소를 내부 네트워크에서 여러 개의 Private IP 주소로 변환하여 사용 가능하기 때문에, 한 대의 컴퓨터에서만 인터넷 접속이나 외부 네트워크와 연결되던 것을 내부 Private IP 값으로 최대 253대까지 동시에 인터넷 접속이 가능하다.
공유기에는 보통 1개의 WAN 포트와 4개의 LAN 포트가 있는데, 외부에서 들어오는 Public IP의 LAN 선을 WAN 포트에 연결하고 나머지 LAN 포트들은 Private IP (ex 192.168.0.~)로 사용할 장치들에 LAN 선을 연결하는 것이 일반적인 사용법이다. 4대 이상의 PC가 하나의 인터넷 IP를 공유하기 위해서는 인터넷 공유기와 스위칭 허브를 이용하면 된다.
공유기 동작 원리
공유기의 동작 원리에 대해 더 깊게 알아보자!
IP 주소는 L3 계층에서의 식별자이기에 공유기 역시 L3 계층에서 작동하는 것이 일반적이다. 하지만, 공유기는 내부에 L2 스위치를 내장하고 있고, 라우터와 유사하게 Gateway의 역할도 한다. 공유기는 기본적으로 2개의 IP 주소를 사용하는데, ISP로부터 발급받아 외부와의 통신을 하기 위한 Public IP와 내부 네트워크 망에서 사용할 Private IP를 가지고 있다.
공유기 내부에는 중요한 자료구조인 NAT-Table
가 존재한다. 이 테이블에는 HTTP 통신을 할 때, 'Local Host의 Private IP와 Port 번호', 그리고 'Remote Host의 Public IP와 Port 번호'를 저장한다. 여기서 중요한 정보가 하나 더 저장되는데, '가상의 포트 번호' 값도 저장된다.
192.168.0.10
주소를 사용하는 내 PC에서 외부의 5.5.5.5
주소를 사용하는 PC와 통신을 한다고 가정하자. 이때, 내 PC에서 소켓에 의해 열린 Port는 3000번이고, 외부 PC는 TCP 통신이라면 80번 포트가 열려있을 것이다. 이들 주소와 포트번호들은 NAT-Table에 저장될 것인데.. 여기에 가상의 포트번호, 예를 들면 20000번이 함께 저장된다.
NAT 장비는 Network Address를 Translation 해준다. 즉, 주소를 변환시킨다. 내 PC의 192.168.0.10
이라는 Private IP를 공유기에 할당된 Public IP로 변환을 해주는데, 이때 Port 번호 역시 가상의 포트 번호, 위 예시에서의 20000번으로 변환된다. 때문에 통신을 위해 전달할 패킷에서도 IP 헤더의 출발지 IP 주소가 192.168.0.10
이 아닌 Public IP 값이 적혀있다. 그리고 이 패킷을 받는 외부 호스트도 해당 Public IP와 연결되어 있다고 '착각'을 하게 된다. 즉, 외부 호스트는 내 PC가 아닌 공유기와 연결되어 있다고 착각하게 된다. (실제로 공유기와 통신을 하는 것도 아니고, 20000번이라는 포트는 열려있지도 않다)
이제 외부 호스트는 수신된 패킷에 대한 응답 패킷을 보내게되는데, 그 목적지는 공유기의 IP 주소:20000
일 것이다. 공유기에 패킷이 도달하면 해당 패킷을 분석하여 '출발지 IP 주소'(5.5.5.5
), '출발지 포트 번호'(80
), '목적지 포트 번호'(20000
)를 확인한다. 그리고 이 정보들을 각각 NAT-Table의 '목적지 IP 주소', '목적지 포트 번호', '가상 포트 번호'에 매칭시켜 정보를 찾는다. 이를 통해 공유기가 수신한 패킷이 내 PC(192.168.0.10
)로 향하는 패킷이라는 것을 알 수 있다! 그러면 공유기는 이 패킷의 목적지 정보를 내 PC의 정보에 맞게 다시 변환한다.
추가적으로, NAT 장비들은 자연스럽게 '방화벽'의 기능도 수행하게 된다. 해커가 내 Public IP 주소의 80번 포트로 접속을 시도하려고 해도, 이에 대한 정보가 NAT-Table에는 존재하지 않다면, 이를 '변환'해줄 수 없기에 해당 패킷을 내부에 전달할 수 없으므로 해당 패킷을 버린다.
공유기 vs. 라우터
라우터는 내부/외부를 가리지 않고 각 연결된 서버와 클라이언트들 간의 네트워크를 최대한 효율적으로 분배하고 여러 종류의 패킷(송수신되는 데이타의 조각)들을 연결된 여러 네트워크에 분산해서 보내고 다시 합쳐셔 받을 수도 있는 고성능 고가의 장비이다. 때문에, 공유기에 비해 가격이 비싸고 공유기보다 큰 범위에서 사용된다.
- 공유기
- 가격이 비교적 저렴하다
- 가정에서 주로 사용된다
- Public IP를 Private IP로 분배한다
- 라우터
- 대부분의 고가의 장비이다
- 범위가 큰 곳에서 사용된다
- Public IP를 보내고 받는 일을 한다
포트 포워딩(Port Forwarding)
돈이 없는 나는 클라우드 비용을 지불하기가 부담스럽다.. 내 컴퓨터에서 웹 서비스를 운영하고 싶다.. 하지만 내 컴퓨터는 공유기에 연결되어 Private IP를 사용 중이다. Private IP는 외부와 통신이 불가능하기에 웹 서비스를 운영하는 것은 불가능한 것일까?
방법이 없지는 않다! 이럴 때 사용되는 기술이 포트 포워딩이다. 포트 포워딩이란, 외부 네트워크에서 특정 기기의 서비스(예: 웹 서버, 게임 서버 등)에 접근할 수 있도록 네트워크 라우터나 방화벽이 데이터를 전달(포워딩)하는 기술을 말한다. 주로 NAT(Network Address Translation) 환경에서 사용된다.
그렇다면 포트포워딩을 통해 어떻게 외부 네트워크의 데이터를 특정 기기로 전달할 수 있는 것일까? 포트 포워딩은 Public IP 주소와 내부 Private IP 주소를 매핑하여 '특정 포트'를 통해 전달되는 데이터를 내부 네트워크의 지정된 장치로 전달 한다. 다음의 순서를 따른다.
- 외부 요청: 인터넷 사용자가 Public IP 주소와 특정 포트로 요청을 보냄
- 라우터의 역할: 라우터는 해당 포트에 설정된 규칙에 따라 데이터를 내부 장치의 IP 주소(Private IP)로 전달
- 내부 장치: 요청을 처리하고 응답을 라우터를 통해 다시 외부로 보냄
Public IP에 포트들을 개방해서 내부의 Private IP 당 하나씩 연결할 수 있다. 포트를 다르게 분배한다면, 한 개의 Public IP에서 여러 개의 웹 서버를 운용할 수도 있다!
포트 포워딩 말고도 DMZ라는 방법을 사용할 수도 있다. 자세한 내용은 따로 검색해서 알아보자..!
포트 포워딩이 필요한 이유
- NAT 환경에서 내부 네트워크 보호
- 대부분의 네트워크는 NAT를 통해 Public IP 주소를 공유하여 내부 장치들이 인터넷에 접속한다. 그러나 NAT는 외부에서 내부 네트워크에 직접 접근하지 못하도록 차단한다.
- 포트 포워딩은 필요한 서비스(예: HTTP 서버, FTP 서버 등)만 외부에서 접근 가능하게 열어준다.
- 원격 서비스 제공
- 집에 있는 NAS나 웹 서버, CCTV 등 내부 네트워크 장치를 외부에서 사용하고자 할 때 필요하다.
- 온라인 게임 및 P2P 연결
- 게임 서버나 파일 공유 네트워크와 같은 P2P 서비스를 위해 포트 포워딩이 요구되는 경우가 많다.
포트 포워딩 설정
대부분의 라우터 혹은 공유기 등에서 포트 포워딩을 설정하려면 다음 단계를 따른다.
- 라우터 관리자 페이지 접속: 라우터의 IP 주소(예: 192.168.0.1)를 웹 브라우저에서 입력.
- 포트 포워딩 메뉴: 라우터 설정 메뉴에서 "포트 포워딩" 또는 "Virtual Server" 메뉴를 찾음.
- 설정 추가:
- 서비스 이름: 설정의 이름(예: "WebServer").
- 내부 IP 주소: 데이터를 전달할 네트워크 장치의 내부 IP 주소.
- 외부 포트: 외부에서 접근할 포트 번호(예: 80).
- 내부 포트: 내부 장치가 사용하는 포트 번호(예: 80).
- 프로토콜: TCP, UDP 또는 둘 다.
- 저장 및 재부팅: 설정을 저장하고 라우터를 재부팅.
포트 포워딩의 유형
- 정적 포트 포워딩 (Static Port Forwarding)
- 특정 포트를 항상 같은 내부 장치로 포워딩.
- 서버와 같은 고정된 서비스에 적합.
- 동적 포트 포워딩 (Dynamic Port Forwarding)
- 사용자가 요청 시에만 포트를 열고 닫음.
- SSH 터널링에 자주 사용됨.
- 원격 포트 포워딩 (Remote Port Forwarding)
- 원격 서버의 포트를 로컬로 연결.
- 원격 네트워크에서 리소스 접근을 허용.
포트 포워딩의 장단점
- 장점
- 특정 서비스만 노출하므로 보안 강화
- 내부 네트워크의 장치에 직접 접근 가능
- 온라인 게임, 서버 운영 등 다양한 네트워크 서비스 활용 가능
- 단점 및 주의사항
- 보안 위험: 포트를 개방하면 해커가 이를 악용할 가능성이 있음.
- 복잡성: 네트워크 설정과 IP 주소 관리가 어렵게 느껴질 수 있음.
- ISP 제한: 일부 인터넷 제공업체는 포트 포워딩을 제한하거나 차단할 수 있음.
Static IP와 Dynamic IP
Static IP(정적 IP)
Static IP는 네트워크 장치에 수동으로 설정되어 변하지 않는 고정된 IP 주소이다.
- 특징
- 고정성
- 항상 동일한 IP 주소를 유지
- 네트워크 재부팅이나 시간이 지나도 변하지 않음
- 설정
- 네트워크 관리자가 수동으로 설정
- ISP(인터넷 서비스 제공업체)가 Static IP를 할당하는 경우 추가 비용이 발생할 수 있음
- 고정성
- 장점
- 서버 운영에 적합: 웹 서버, 이메일 서버, FTP 서버 등은 고정된 주소를 통해 접근하기 쉽기 때문에 유리.
- 원격 접근 안정성: 원격 관리와 VPN 설정에 적합.
- 단점
- 유연성 부족: 환경 변화에 따라 IP를 변경하려면 수동으로 수정해야 함.
- 관리 비용 증가
- 네트워크가 커질수록 관리 복잡성 증가.
- ISP로부터 고정 IP를 받으려면 비용이 들 수 있음.
Dynamic IP(동적 IP)
Dynamic IP는 네트워크에 연결할 때마다 DHCP(Dynamic Host Configuration Protocol) 서버가 자동으로 할당하는 IP 주소이다
- 특징
- 변동성: 장치가 재부팅되거나 네트워크에서 새로 연결될 때 IP가 변경될 수 있음
- 설정
- DHCP 서버에 의해 자동으로 관리
- ISP는 대부분 동적 IP를 기본으로 제공
- 장점
- 관리 편의성: 자동으로 IP 주소를 할당하므로 수동 관리가 필요 없음
- 효율적 자원 사용: 네트워크에서 사용하지 않는 IP 주소를 다른 장치에 할당 가능
- 저렴함: 일반적으로 Static IP에 비해 추가 비용이 들지 않음
- 해킹으로부터의 안전: IP가 수시로 변경되니 해킹으로부터도 상대적으로 안전하다
- 단점
- 서버 운영 부적합: IP가 변경되므로 외부에서 안정적으로 접근하기 어려움
- 원격 관리의 불편: IP 주소가 바뀌면 매번 새 주소를 확인해야 함
보통의 경우 IP는 Dynamic IP라서 수시로 변한다. 이렇게 IP를 고정해두지 않고 변하도록 두는 이유는, Private IP의 사용 이유와 유사하게 IP의 수가 제한적이기 때문이다.
ISP에서 인터넷 사용 주체들에게 IP를 나눠주게 되는데 서버의 경우 IP가 계속 변경되면 곤란하기 때문에 바뀌지 않는 Static IP를 사용할 수 있지만 이는 가격이 비싸다. 때문에, 일반 가정이나 기기들에는 주기적으로 IP들을 회수해서 ‘인터넷을 사용 중인 곳에만 나눠주는’ Dynamic IP 방식을 사용한다. 즉, 놀고있는 컴퓨터에게서 IP를 회수하여 낭비를 줄이고 효율을 높이기 위함이다.
Dynamic IP의 변경 방식
공유기를 연결했을 때 발급받은 IP와 공유기에 PC를 바로 연결했을 때 발급받은 IP가 서로 다르다.
Dynamic IP라서 다르긴 하겠지만, 너무 빨리 바뀌는 것이 아닌가..?
이는 Dynamic IP의 변경 방식에 의한 것인데, Dynamic IP는 MAC 주소를 토대로 IP를 할당해준다. 즉, 기기가 변경되면 NIC의 식별자인 MAC 주소 역시 다르므로 다른 IP가 즉각적으로 할당될 것이다.
Static IP vs. Dynamic IP
DDNS(Dynamic DNS)
그럼 포트포워딩으로 서버를 구축해뒀는데, Dynamic IP를 사용 중이라서 IP가 변경되면 의미 없는거 아닐까? 그래서 가정집에서 웹사이트나 NAS 등을 운영하려면 추가적인 조치가 필요한데, 이것이 바로 DDNS(Dynamic Domain Name System)
이다.
DDNS
는 동적 IP 주소를 도메인 이름에 매핑하여, IP 주소가 변경되더라도 도메인을 통해 항상 동일하게 접근할 수 있도록 지원하는 서비스이다. Dynamic IP 환경에서 Static IP와 유사한 효과를 제공하여 비용 효율적인 대안이 된다.
- 작동 원리
- 네트워크 장치의 IP 주소가 변경되면 DDNS 클라이언트가 변경된 IP를 DDNS 서버에 자동으로 업데이트
- 사용자는 도메인 이름을 통해 네트워크 장치에 접근 가능
- DNS 조회 시 변경된 IP 주소가 반영되어 항상 최신 IP에 연결
- 장점
- 동적 IP 환경에서도 안정적 접근: 동적 IP를 사용하는 네트워크 환경에서 도메인을 통해 서버나 장치에 안정적으로 접근 가능
- 저렴한 대안: IP를 구입하지 않아도 유사한 기능을 구현
- 사용 편의성: IP 주소 대신 도메인 이름으로 접근하므로 기억하기 쉽고 관리가 간편
- 단점
- 서비스 의존성: DDNS 서비스를 제공하는 업체에 따라 의존도가 높음
- 속도와 안정성: IP 주소가 변경되고 도메인에 반영되는 과정에서 약간의 지연이 발생할 수 있음
DDNS 사용 방법
DDNS는 업체마다 유료 혹은 무료로 제공되는데, 공유기 페이지에 들어가서 이 옵션을 DDNS 설정을 세팅해두면 ‘~.iptime.org’, ‘~ddns.net’ 등과 같은 주소에 내 컴퓨터의 Dynamic IP를 연결할 수 있다.
- DDNS 서비스 등록
- No-IP, DuckDNS, DynDNS 같은 서비스에 가입
- 라우터 설정
- 라우터에서 DDNS 기능을 활성화하고 계정 정보를 입력
- 클라이언트 설치 (선택 사항)
- 일부 서비스는 클라이언트 프로그램을 설치하여 IP 주소를 자동 업데이트
'Network' 카테고리의 다른 글
[Network] 규모에 따른 네트워크 종류와 구성 (3) | 2024.11.18 |
---|---|
[Network] Application Layer Protocol (1) | 2024.11.18 |
[Network] 서브넷팅 (0) | 2024.11.16 |
[Network] DNS, URI, URL (0) | 2024.11.14 |
[Network] L4 핵심 (TCP & UDP) (10) | 2024.11.13 |