본문 바로가기
Network Infra 쉽게 이해하기/L4 & L7 Network 쉽게 이해하기

NAT 쉽게 이해하기

by 네트워크 엔지니어 환영 2021. 9. 18.
반응형

2011년 2월, 인터넷 주소 관리기구인 IANA는 더 이상의 IPv4 할당이 없을 것이라고 선언했습니다. IPv4는 약 43억 개의 한정된 주소를 사용할 수 있는데 반해 인터넷의 수요가 빠르게 증가하여 각 대륙에 할당한 IPv4가 동이 나버려 더 이상 할당할 수 없게 된 것이죠. 인터넷 프로토콜을 처음 설계했을 때는 이렇게 인터넷의 수요가 빨리 증가할 것임을 예상하지 못했을 테니까요. 그런데 좀 이상하지 않으신가요? 10년 전에 이미 동이 나버린 IPv4임에도 여태껏 IPv4를 잘 쓰고 있습니다. 뉴스에서 "큰일 났습니다! 이제 IPv4가 없어서 컴퓨터가 IP를 할당받지 못해 인터넷에 접속하지 못합니다."라는 소식을 들은 적은 없으실 겁니다. 물론 한정된 자원이기에 결국은 동이 날 것이고 이를 위해 IPv6가 오래전 개발되어 조금씩 상용화되고 있습니다. 하지만 아직까지는 잘 사용하고 있지요. 많지 않은 수의 IPv4로 현재까지 별 탈 없이 인터넷을 사용할 수 있게 된 것은 Private Network(이하 사설망) 덕분이라고 해도 과언이 아닙니다.

 

Private Network(사설망)의 탄생

사설망 또는 프라이빗 네트워크(private network)는 인터넷 어드레싱 아키텍처에서 사설 IP 주소 공간을 이용하는 네트워크이며 RFC 1918과 RFC 4193 표준을 준수한다. 이러한 주소는 가정, 사무실, 기업 랜에 쓰인다.

- 출처 : 위키백과 -

Private Network(사설망)는 IPv4 중 특정 대역을 공인 인터넷이 아닌 가정, 기업 등의 한정된 공간에 사용한 네트워크를 의미합니다. 사설망에 소속된 IP인 사설 IP 대역은 다음과 같으며 오로지 사설망(내부망)에서만 사용 가능하기 때문에 공인망(외부망, 인터넷)에선 사용할 수 없습니다.

IP 대역
사설 IP 대역(출처 : 위키백과)

이 사설 IP는 사설망에만 해당한다면 어디에서나 사용할 수 있습니다. 일반적으로 집에서 사용하는 컴퓨터, IPTV, 휴대폰, 플레이스테이션 등은 공유기가 할당해주는 사설 IP를 사용하지요. 기업도 마찬가지입니다. 스위치나 라우터, 방화벽과 같은 네트워크 장비 혹은 비슷한 장비에 사설 IP와 서브넷 마스크를 지정하고 게이트웨이(사설 IP 할당)로 사용하며 이에 연결된 컴퓨터에 사설 IP를 할당합니다. 

공유기 구성의 예

이렇게 사설망과 공인망이 사용하는 IP에 따라 분리되면서 공인망과 사설망의 경계에서 별도의 조치를 취해야 할 필요성이 생겼습니다. 사설망에서 공인 인터넷으로 나가고자 할 때 자신의 출발지 IP(Source IP)를 사설 IP 그대로 쓸 수 없기 때문입니다. 사설 IP는 사설망에서만 사용하도록 규정한 만큼 공인 인터넷에서 사설 IP를 쓸 수 없지요. 게다가 사설 IP는 사설망이라면 어디에서든 쓸 수 있기 때문에 자신의 IP(Source IP)를 사설 IP로 유지한 채 공인 인터넷로 나간다면 자신이 왔던 길을 찾지 못한 채 영영 돌아오지 못할 것입니다. 자신의 IP와 같은 사설 IP를 쓰는 곳은 수도 없이 많으니까요. 그렇기에 사설 IP를 공인 IP로 변환할 필요가 있습니다.

전용 회선을 이용한 사설망 연결(출처 : http://gotocloud.co.kr/)

IP를 변환하는 것은 사설망과 공인망의 통신에서만 필요한 것이 아닙니다. 자사의 사설망(내부망)과 전용 회선(Leased Line)을 통해 대외사의 사설망(내부망)을 연결할 경우, 이 경우의 통신에서도 IP를 변환해야 할 필요가 많습니다. 자신의 실제 IP를 노출시키지 않아야 하거나 반대편 기업의 실제 IP로 목적지 IP를 변환하여야 할 필요가 있을 때 사용합니다. 소위 '대외망'라 불리는 결제 대행사(금융 공동망)와 유통회사의 통신이 대표적입니다. 이에 IP를 변환하기 위한 방법을 고안한 것이 바로 Network Address Translation(NAT)입니다. 

결제 대행사와의 사설 통신(출처 : https://velog.io/@agugu95/about-the-financial-it-system)

반응형

Network Address Translation(NAT)의 정의

네트워크 주소 변환(영어: network address translation, 줄여서 NAT)은 컴퓨터 네트워킹에서 쓰이는 용어로써, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술을 말한다. 

- 출처 : 위키백과 -

위키백과의 설명처럼 Network Address Translation(이하 NAT)는 IP 주소 혹은 IP 패킷의 TCP/UDP Port 숫자를 변환 및 재기록하여 네트워크 트래픽을 주고받는 기술을 의미합니다. 지금까지 설명한 내용을 적용해보자면 사설망에서 공인망으로, 공인망에서 사설망으로 통신하고자 할 때 공인망/사설망에서 사용하는 IP로 변환하는 것을 의미한다고 볼 수 있죠. 여기서 IP 주소뿐만 아니라 IP 패킷의 TCP/UDP Port 숫자를 변환한다고 말한 이유는 실제로 NAT 의미가 IP 주소뿐만 아니라 Port(이하 포트)까지 변환시켜 사용하는 것을 포함하기 때문입니다. 이를 Port Address Translation(이하 PAT 또는 NAPT)라고 부릅니다. NAT와 PAT의 예시를 각각 보겠습니다.

NAT Device를 통한 NAT 통신

사용자 1(10.10.10.10/24)이 공유기를 통해 공인망에 존재하는 웹 서버(125.209.22.142:80)에 접속하려고 합니다. 사용자 1은 사설 IP를 보유하고 있기 때문에 공인망으로 나아가기 위해서는 자신의 사설 IP를 공인 IP로 반드시 변환(NAT)해야 합니다. 그리고 이를 NAT Device(이하 NAT 장비, 공유기 등)가 수행하지요.

NAT 장비에 의해 실시되는 NAT 과정

사용자가 웹 서버에 접속하기 위해 NAT 장비(Gateway)에 패킷을 보내는데 IP/Port 정보는 첫 번째 표와 같습니다.(①) 이를 받아든 NAT 장비가 자신에게 허용된 규칙을 확인하고 공인망의 웹서버에게 보내기 위해 사용자의 사설 IP를 자신의 공인 IP로 변환하여 웹서버에게 전달합니다. 정확히 말하면 공인망에 맞닿아 있는 자신의 인터페이스 IP로 변환하는 것이죠.(②) 웹서버가 사용자가 보낸 요청을 처리하고 응답을 사용자에게 보냅니다. 그렇기 위해서는 출발지와 목적지가 뒤바뀌어야겠죠?(③) 응답 패킷을 받아든 NAT 장비가 과거 사용자가 보낸 요청에 대한 응답임을 기억(Stateful, 향후 설명)합니다. 그리고 목적지 IP를 공인 IP에서 사용자의 실제 사설 IP로 변환하여 전달합니다.(④) 

여기서 문제가 하나 발생합니다. NAT 장비에 할당된 공인 IP는 하나이지만 사용자는 2명입니다. 사용자 1이 자신의 출발 포트를 9999로 지정하여 NAT 장비에 전송했음을 위 과정을 통해 알 수 있었죠. 그런데 동시에 사용자 2도 자신의 출발 포트를 9999로 설정하여 전송한다면 어떻게 될까요? 패킷이 공인망으로 나아갈 땐 문제가 없겠지만 되돌아올 때 문제가 발생하겠죠.(③) 왜냐하면 목적지가 공인 IP이고 포트는 9999인데 이게 사용자 1인지 사용자 2인지 구분할 길이 없습니다.

③ 패킷의 목적지는 사용자 1인가 사용자 2인가....?

이에 사용되는 것이 위에서 말씀드린 PAT(Port Address Translation)입니다. 애초에 사용자 1과 사용자 2로부터 패킷을 전달받아 사용자의 IP에 대해 NAT 장비가 NAT를 실시할 때 출발지 포트를 임의로 변경하는 것입니다. 가령 사용자 1의 출발지 포트를 10000으로 바꾸고, 사용자 2의 출발지 포트를 20000으로 바꾼다면? 공인 IP는 하나이지만 사용자마다 포트로 구분할 수 있으니 문제가 해결됩니다.

포트 10000이면 사용자 1이고 포트 20000이면 사용자 2구나!

위 그림을 보시면 사용자 1에게 받은 패킷은 출발지 포트를 10000로 변환하여 구분한 것을 알 수 있습니다.(②) 그리고 패킷이 되돌아 올 때 변경된 목적지 포트를 보고 포트 10000은 사용자 1임을 구별할 수 있게 되겠죠.(③) PAT는 출발지 포트 변경 시에는 오로지 이 용도로만 사용되기 때문에 기억해두시는 것이 좋습니다.

지금까지는 출발지의 IP 변경에 대해서만 이야기하였습니다만 NAT에는 목적지의 IP 변경도 존재합니다. 제 블로그의 글을 자세히 보신 분들이라면 잘 아는 L4 스위치의 목적지 IP NAT가 가장 대표적이죠.

NAT 장비에 의해 실시되는 NAT 과정 2

 

Session Table & Stateful

NAT를 수행하는 네트워크 장비의 종류는 매우 다양합니다. 주로 관문 역할(Gateway)을 하는 네트워크 장비가 주로 NAT를 수행합니다. 가정에서는 공유기가 내부망과 공인망의 경계에서 NAT를 실시하며, 기업에서는 과거 라우터가 이 역할을 자주 맡았으나 요즘에는 방화벽, VPN, L4 스위치 등이 이 역할을 좀 더 많이 수행하는 듯합니다. 공인망에 노출되는 관문에 해당하는 장비인만큼 보안 기능을 곁들인 장비는 맡는 것이죠. NAT를 수행하는 장비들은 자신에게 설정된 규칙(Rule)에 따라 허용/거부를 판단하고, NAT를 실시하고 이를 기록해둡니다. 이를 수행하는 장비들을 보통 Session 장비(이하 세션 장비)라고 부르며 NAT를 실시한 내역을 기록한 테이블을 Session Table(이하 세션 테이블)이라고 부릅니다. 위에서 언급한 예시 또한 세션 테이블을 생성합니다.

세션 테이블의 예시 1
세션 테이블의 예시 2

위에서 언급했던 NAT와 PAT 과정에서 생성된 세션 테이블을 표현한 그림입니다. 첫 번째 예시에서는 사용자 1의 세션 테이블에는 어떠한 IP와 어떠한 Port로 NAT/PAT되어있는지 기록되어있습니다. 공인 IP가 1개뿐인지라 사용자별로 출발지 포트를 구분하여 기록하였군요. 두 번째 예시에서는 L4 스위치를 거쳐 실제 서버로 Request가 유입되면서 목적지인 실제 서버의 사설 IP로 NAT된 것이 세션 테이블에 반영이 되어있습니다.

보통 세션 장비에 정해진 Rule(이하 규칙)에 의해 허용된 IP만이 NAT를 실시할 수 있고 세션 테이블에 이름(Session, 이하 세션)을 올릴 수 있게 됩니다. 주로 방화벽과 같은 장비가 이러한 작업을 수행하죠. 그리고 테이블에 기록된 IP는 규칙에 의해 나가거나/들어온 뒤 다시 들어오거나/나갈 수 있습니다. 즉 규칙에 의해 한 번 허용이 된 패킷(Request)은 반대 방향(Response)에 대한 정책을 별도로 수립할 필요 없이 테이블에 기록된 세션을 보고 네트워크 장비가 통과시킨다는 것을 의미하죠. 이러한 특성을 Stateful이라고 합니다.

 

NAT의 용어와 종류

이런 특징을 가진 NAT는 어느 관점에서 보느냐에 따라 부르는 용어가 달라집니다. IP와 IP를 일대일 방식으로 변환하면 Static NAT, IP Pool과 IP 1개 혹은 IP Pool을 다대다 방식으로 변환하면 Dynamic NAT, 포트까지 같이 변환하면 Network Address Port Translation(NAPT)라고 부르죠. 그뿐만이 아닙니다. Source IP를 변환하면 Source IP NAT(SNAT), Destination IP를 변환하면 Destination IP NAT(DNAT)라고 부릅니다. Juniper에서는 일대일 변환을 MIP, 다대다 변환을 DIP, 다대일 변환을 VIP라고 부르죠. Fortinet에서는 Source IP NAT를 수행하는 'IP Pool', Destination IP NAT를 수행하는 'Virtual IP'가 있죠. 이 용어를 다 보고 있자면 머리가 아플 지경입니다. 실무에서 직접 NAT를 접하기 전까지는, 익숙해지기 전까지는 단순히 용어로 접하게 되면 이해가 잘 되지 않고 그저 외울 것이 많은 기술에 불과하죠.

 

결국 출발지 혹은 목적지 IP 주소를 바꾸겠다는 것을 의미합니다.

NAT를 처음 접하는 사람들이 이해하기 어려워하는 것은 이론과 실무의 격차가 크기 때문이라고 생각합니다. 위에 있는 용어들을 모두 외운다한들 실무에서 접목시켜보면 큰 도움이 되진 않습니다. 오히려 실무에서 NAT를 사용해보고 나서 용어를 접하면 '그래. 이렇게 부르는 게 나을 수도 있겠네'라는 생각이 들죠. 게다가 주로 사용하는 솔루션이 무엇이냐에 따라 사용하는 용어도 다릅니다. L4 스위치를 주로 다루는 분들은 SNAT, DNAT이라는 용어를 자주 쓰고 Juniper 방화벽을 다루는 분들은 MIP, DIP, VIP를, Fortinet 방화벽을 다루는 분들은 IP Pool, Virutal IP라는 단어를 좀 더 쓰면서 SNAT, DNAT을 병행해서 사용합니다. 어느 입장에 서느냐에 따라 사용하는 단어는 다르지만 결국 의미하는 것은 동일합니다. 바로 Source IP NAT 혹은 Destination IP NAT인 것이죠.

그렇기에 제가 여태껏 공부한, NAT를 가장 빠르게 이해하는 방법은 Source IP NAT와 Destination IP NAT의 주요 변환 사례를 미리 숙지하는 것입니다. 위에 나열된 용어만큼이나 NAT 주요 변환 사례는 많지 않습니다.(지극히 개인적인 생각입니다.) 물론 과정 자체가 복잡하긴 합니다만 NAT 변환 사례를 여러 번 반복해서 보면 NAT에 대해 이야기를 나누거나 실무에서 사용해야 할 때 좀 더 익숙하게 사용할 수 있을 겁니다. 그리하여 다음 문서인 'Source IP NAT 쉽게 이해하기'와 'Destination IP NAT 쉽게 이해하기'에서 변환 사례에 대해 자세히 다룰 예정입니다. 제목이 제목인만큼 Source IP NAT(SNAT)와 Destination IP NAT(DNAT)라는 용어는 계속 쓰도록 하겠습니다.

반응형

댓글