NAT(Network Address Translator)와 SNAT & DNAT
최근에 방화벽 해제와 관련하여 유관부서와 협엽할 일이 생겼다. 하지만 네트워크 관련 지식이 부족해서 커뮤니케이션하는데에 어려움을 겪었고, 문제를 해결하는데 더 많은 공수가 들었다.
서버 개발자로서 취업한 이상 네트워크 지식은 뗄래야 뗄수없는 분야일 것 같다. 단순 웹 클라이언트 통신 뿐만아니라, 대다수의 서비스가 MSA로 구성(혹은 전환)됨에따라 다른 서비스 및 api를 호출하는 경우도 많고, 데이터를 조회하고 저장하기위한 DB서버와의 통신 등... 서버를 개발하면서 만나게되는 개념들과 밀접한 연관을 갖고있기 때문이다.
이후에는 네트워크 관련 문제를 만나더라도, 빠르고 정확하게 해결할 수 있도록 과거에 몰라서 헤맸던 경험을 기록해두려고 한다.
공인 IP (Public IP)
- ISP(인터넷 서비스 공급자)가 제공하는 IP주소
- 외부에 공개되어 있는 IP
특징
- 전세계에서 유일한 IP주소를 갖음
- 인터넷만 연결되어 있다면 다른 PC에서 접근 가능, 따라서 자원을 안전하게 보호하기 위해 방화벽 등 보안프로그램이 필요함
사설 IP (Private IP)
- 일반 가정, 회사 등에 할당된 네트워크의 IP주소
- 로컬 IP, 가상 IP라고도 불림
- IPv4의 주소부족으로 인해 subetting된 IP
- NAT(라우터 등..)에 의해서 로컬 네트워크상의 PC나 장치로 할당됨
사설 IP 주소 대역
- class A : 10.0.0.0 ~ 10.255.255.255
- class B : 172.16.0.0 ~ 172.31.255.255
- class C : 192.168.0.0 ~ 192.168.255.255
사설 IP와 공인 IP의 차이
공인 IP | 사설 IP | |
할당 주체 | ISP | 라우터(공유기) |
할당 대상 | 개인 또는 회사의 서버(라우터) | 개인 또는 회사의 기기 |
고유성 | 인터넷 상에서 유일한 주소 | 하나의 네트워크 내에서 유일(subnet)한 주소 |
공개 여부 | 외부 접근 가능 | 외부 접근 불가능 |
- 인터넷에서 오는 데이터 패킷의 목적지를 NAT가 해당하는 사설 IP로 변경하여 PC(혹은 장비)로 전송
- 사설 IP를 할당받은 PC(혹은 장비)가 데이터 패킷을 인터넷으로 전송하면, NAT가 해당 사설 IP를 공인 IP로 바꿔서 전송
NAT(Network Address Translator)
- 공인 IP를 사설 IP로, 사설 IP를 공인 IP로 변환해주는 주소 변환 서비스
- 라우터 등의 장비를 사용하여 공인 IP와 사설 IP간 변환
- 기업이나 기관에서 내부망을 사용하는 PC에 사설 IP를 제공, 외부 인터넷 연결시에 하나의 공인 IP를 같이 사용
- NAT Forwarding Table(IP와 Port번호로 구성)을 보관하여 이에 맞게 주소 변환 서비스를 제공
NAT table
- INSIDE PRIVATE IP :PORT - 내부 네트워크에 위치한 호스트별로 사설 IP와 포트번호에 대한 정보를 갖고 있음
- INSIDE PUBLIC IP :PORT - 외부로 나갈때 동일한 공인 IP와 각기 다른 포트 번호로 구성
- OUTSIDE PUBLIC IP :PORT - 목적지 주소의 공인 IP와 서비스에 사용된 동일한 서비스 포트 번호를 갖음
-> 공인 IP는 같으나, 포트번호를 다르게 할당하여 각각의 호스트를 구분짓는 구조(INSIDE PULBIC IP:PORT)
목적
- 사설망을 외부 침입자로부터 보호하기 위함(= 보안)
- 공인 IP만 인터넷에 공개되어 내부 사설 IP는 외부에서 알 수 없고 이를 통해 내부 사설망의 자원들을 보호
- 인터넷 공인IP를 절약하고자하는 목적
SNAT와 DNAT
SNAT(Source NAT)
- 출발지 주소를 변경하는 NAT
- SNAT, Source NAT, 출발지 NAT
DNAT(Destination NAT)
- 도착지 주소를 변경하는 NAT
- DNAT, Destination NAT, 목적지 NAT
이 때, SNAT와 DNAT의 기준은 NAT가 수행되기 전 트래픽이 출발하는 시작 지점을 기준으로 나뉨
즉, 요청시 SNAT를 하여 목적지로 전송하면 해당 트래픽에 대해서 응답을 받을때에는 DNAT가 수행됨
따라서 트래픽을 요청하는 시작 시점만 고려하여 SNAT 설정을 해야함
NAT 장비를 처음 통과할때 NAT 테이블이 생성되므로 응답 패킷은 NAT 장비로 들어올때 별도의 NAT 설정없이 NAT 테이블을 보고 반대로 출발지 ip로 변환해줄 수 있음(= 역 NAT)
NAT가 정상적으로 수행되려면 역 NAT까지 정상적으로 수행되어야함
Static source NAT와 Dynamic source NAT
Static Source NAT
- 주소를 1:1 매핑하여 변환하는 간단한 NAT 유형
- 처음 IP 패킷 헤더의 172.16.0.5를 공인 IP 주소인 10.16.0.5로 변환하여 인터넷을 통해 server web으로 나감
Dynamic Source NAT
- 사설 IP와 공인 IP간의 정보를 생성하여, IP 패킷이 네트워크에서 나가거나 들어올때 그 패킷 헤더의 IP주소를 변환
- 이때, 생성한 정보를 토대로 사설 IP와 공인 IP를 동적으로 매핑
- 사용 가능한 공인 IP 주소들의 pool을 만들어두어, 어떤 사설 ip 주소들이 어떤 공인 ip로 주소변환이 되어야 하는지 매핑기준을 정의
- 공인 IP 주소의 갯수가 사설 IP 주소의 갯수보다 적을때 사용
참고한 곳
- https://velog.io/@hidaehyunlee/%EA%B3%B5%EC%9D%B8Public-%EC%82%AC%EC%84%A4Private-IP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
- https://m.blog.naver.com/techtrip/221684093830
- https://ja-gamma.tistory.com/entry/%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4%EB%9E%80
- https://thebook.io/007046/ch07/01/04/
- https://kim-dragon.tistory.com/10