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

Source IP NAT 쉽게 이해하기

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

이전 문서인 NAT 쉽게 이해하기를 시작으로 Source IP NAT와 Destination IP NAT 주요 변환 사례에 대해 이야기한다고 말씀드렸죠. 이번 문서는 Source IP NAT의 주요 변환 사례에 대한 이야기입니다. Source IP NAT를 사용하는 이유는 자신의 Source IP(이하 출발지 IP)를 다른 IP로 변경하여 통신을 가능케 하기 위함입니다. 거꾸로 말하면 출발지 IP를 변경하지 않으면 통신이 불가능하거나 혹은 불편함을 초래한다는 것을 의미하죠.

출발지 IP를 어느 IP로 바꿀 것인가 역시 중요한 사안이 됩니다. 무턱대고 아무 IP로 바꾼다 한들 통신이 되지 않기 때문이죠. 그렇기에 주요 변환 사례를 보기에 앞서 출발지 IP의 변환 대상이 되는 IP가 무엇인지 알아야 합니다. 이 IP를 알아야 Source IP NAT를 제대로 활용할 수 있죠.

 

Source IP NAT에 사용되는 IP(변환 대상 IP)

변환 대상 IP #1 - NAT Device(이하 NAT 장비)의 Interface IP

Source IP NAT를 실시할 때 사용되는 첫 번째 IP는 바로 NAT 장비의 Interface IP(이하 인터페이스 IP)입니다. 정확히는 Outgoing Interface, 나가는 방향의 인터페이스 IP이죠. 나가는 방향(외부)의 인터페이스의 IP를 사용함으로써 외부 네트워크와 통신이 가능케 하는 것입니다. 

Outgoing Interface를 이용한 Source IP NAT

위 그림에서는 Source IP NAT에 Outgoing Interface IP를 활용하는 NAT 장비의 모습을 보실 수 있습니다. 내부 사용자들(10.10.10.10/24, 10.10.10.20/24)은 외부 인터넷으로 나아갈 때 52.15.77.39 IP를 Source IP로 장착하고 나갑니다. 다시 말해 Outgoing Interface IP가 공인 IP이기 때문에 NAT 이후엔 사용자들의 사설 IP 또한 자동으로 공인 IP로 변경되는 것이죠. 번거로운 설정을 할 필요 없이 Source IP NAT를 인터페이스 IP로 지정하면 되기 때문에 가독성이 좋고 편리합니다. 

여기서는 나가는 방향, 외부를 공인 IP로 설정했기 때문에 Source IP NAT가 공인 IP로 실시됩니다만 내부/외부 모두가 사설 IP라 하더라도 달라지는 것은 없습니다. 외부를 향하는 Outgoing Interface IP가 사설 IP면 해당 사설 IP로 Source IP NAT를 실시하게 됩니다.

변환 대상 IP #2 - IP Pool

Source IP NAT를 실시할 때 사용되는 두 번째 IP는 바로 IP Pool입니다. IP Pool은 NAT 장비가 가지고 있는 IP 중 인터페이스 IP가 아닌 별도의 IP 모음(IP Pool)으로 그중 하나를 이용하여 Source IP NAT를 실시합니다. 

IP Pool을 이용한 Source IP NAT

위 그림에서는 NAT 장비의 인터페이스 IP가 소속된 네트워크의 IP를 추가로 사용하여 Source IP NAT를 하는 것을 볼 수 있습니다. 내부 사용자들(10.10.10.10/24, 10.10.10.20/24)은 외부 인터넷으로 나아갈 때 위 IP Pool 중 한 개의 IP를 Source IP로 장착하고 나갑니다. 인터페이스 IP가 소속된 네트워크의 IP를 IP Pool로 사용하려면 당연한 이야기지만 다른 장비가 IP Pool의 IP를 사용하고 있어서는 안 됩니다. 또한 NAT 장비는 IP Pool의 IP에 대한 ARP Request에 대해 ARP Response를 실시하여 자신이 소유하고 있음을 알립니다.

NAT 장비의 인터페이스 IP가 속한 네트워크의 IP 이외에 다른 네트워크의 IP도 사용 가능합니다. NAT 장비의 인터페이스 IP가 속한 네트워크의 IP도 Source IP NAT에 적용 가능하다는 뜻이지요.

NAT 장비의 인터페이스 IP가 속한 네트워크가 아닌 IP Pool

위 그림에서는 외부 네트워크를 사설 IP로 표현해보았습니다. 10.10.10.x/24 대역은 내부 네트워크이고 10.10.20.x/24 대역은 비록 사설 IP이지만 자신이 전혀 속하지 않은 외부 네트워크입니다. 사용자들은 위 IP Pool의 IP 중 한 개를 사용하여 Source IP NAT를 실시합니다.  위 그림의 경우에서는 사용자들이 서버에 접속하고자 한다면 5개 IP 중 하나로 Source IP NAT가 되어 나아가게 됩니다. IP Pool은 인터페이스 IP가 속한 네트워크의 IP를 사용하지 않아도 되기 때문에 IP를 소모할 필요가 없어 편리한 방법입니다. 다만 NAT 장비의 인터페이스 IP가 속한 네트워크가 아니기 때문에 IP Pool에 대한 ARP Request에 대해 전혀 응답하지 않습니다. 그저 IP Pool에서만 사용할 뿐이죠. 그렇기에 NAT 장비가 사용한다는 사실조차 모르는 경우가 있습니다.  

#1, #2에서 사용되는 IP의 공통점은 모두 나가는 방향의 IP라는 점입니다. 즉 내부 네트워크의 IP가 아닌 외부 네트워크에 속한 IP를 사용한다는 것이죠. 이 점을 꼭 기억해야 합니다. 변환 대상 IP를 살펴보았으니 이제 본격적으로 Source IP NAT 변환 사례를 살펴보겠습니다.

 

Source IP NAT 변환 사례 #1, 외부 인터넷 접속

변환 사례 #1은 Source IP NAT의 대부분을 차지하는 경우로 외부 인터넷 접속을 위한 Source IP NAT입니다. 주로 방화벽과 공유기가 이러한 역할을 많이 맡습니다. 방화벽은 주로 기업의 내부 네트워크와 외부 인터넷의 경계에 존재하며 외부 인터넷으로 향하는 내부 단말의 사설 IP를 공인 IP로 변환하는 역할을 맡죠. 그리고 Session(이하 세션)을 생성하여 어느 사설 IP가 어느 공인 IP로 변환되었는가를 기억합니다. 여담으로 꼭 방화벽만이 이 역할을 맡는 것은 아니며 라우터 혹은 VPN도 이 역할을 맡곤 합니다. 

기업의 사례, 내부 사설 IP를 공인 IP로 변환하는 방화벽

공유기는 여러분들 모두 잘 아시다시피 가정에서 WiFi 용도로 주로 사용하며 외부 인터넷으로 향하는 내부 단말(컴퓨터, 휴대폰 등)의 사설 IP를 공인 IP로 변환하는 역할을 맡습니다. 그리고 세션을 생성하여 어느 사설 IP가 어느 공인 IP로 변환되었는가를 기억합니다.

가정의 사례, 내부 사설 IP를 공인 IP로 변환하는 공유기

 

Source IP NAT 변환 사례 #2, L4 스위치

변환 사례 #2는 L4 스위치의 Source IP NAT입니다. L4 스위치의 Source IP NAT는 3-way handshake의 정합성을 유지하기 위한 목적으로 실시됩니다. SYN/ACK Packet의 목적지를 L4 스위치 자신으로 설정하게끔 강제하기 위함입니다. 과거 L4 스위치 쉽게 이해하기 #6(Source IP NAT 문제 해결)에서 L4 스위치의 Source IP NAT에 대해 이야기한 적이 있습니다.

3-way handshake는 클라이언트와 서버가 세션을 형성하기 위한 과정으로 클라이언트와 서버가 각각 SYN Packet, SYN/ACK Packet, ACK Packet을 보내 서로 통신이 가능함을 확인하는 과정이죠. 이 3개 패킷의 교환 과정에서 한 개라도 빠지면 협상 실패로 간주하고 세션을 형성하지 않습니다. 

클라이언트와 서버의 3-way handshake

L4 스위치가 클라이언트와 서버 사이에 존재하게 될 경우, 서버의 Gateway(이하 게이트웨이)가 L4 스위치가 아닌 다른 곳을 바라보게 된다면 3-way handshake의 정합성이 깨질 수 있습니다. 아래 그림에서 서버의 게이트웨이가 Backbone Switch(이하 백본 스위치)임을 알 수 있는데 이렇게 된다면 서버의 SYN/ACK Packet은 L4 스위치가 아닌 백본 스위치로 향합니다. 클라이언트의 IP인 '15.15.15.15'는 서버가 모르는 네트워크 대역이므로 Default Routing에 해당하는 게이트웨이로 전송하는 것입니다. 그리고 L4 스위치는 SYN/ACK Packet을 받지 못하니 정합성이 깨지며 세션이 생성되지 않죠.

SYN Packet 이후 느닷없이 나타난 'ACK Packet'을 드랍(Drop)하는 L4 스위치

이에 3-way handshake의 정합성 유지를 위해 서버가 클라이언트에게 보내는 SYN/ACK을 게이트웨이가 아닌 L4 스위치로 보내게 하고자 L4 스위치의 IP로 Source IP NAT를 하는 것이죠.

L4 스위치가 서버에게 SYN Packet 전달시 Source IP NAT 실시

위 그림에서 L4 스위치가 서버에게 SYN Packet을 전송할 때 출발지 IP를 자신의 인터페이스 IP인 192.168.1.1로 변환합니다. 그리고 서버가 받은 패킷의 출발지 IP는 L4 스위치의 IP이므로 SYN/ACK Packet의 목적지 IP를 L4 스위치의 IP로 지정할 것입니다. 그렇다면 3-way handshake의 정합성이 깨지지 않겠죠. SYN/ACK Packet이 게이트웨이인 백본 스위치로 전송될 일이 없기 때문입니다. 기타 자세한 내용에 대해서는 L4 스위치 쉽게 이해하기 #6(Source IP NAT 문제 해결)를 참조하세요! 

 

Source IP NAT 변환 사례 #3, 대외망 접속

변환 사례 #3은 대외망 접속을 위한 Source IP NAT입니다. 여기서 대외망이란 회사 내부의 네트워크와 맞닿아있는 또 다른 네트워크로 주로 타사 네트워크가 해당됩니다. 현업에서는 자사와 타사 혹은 자사와 공동망을 전용회선을 이용해 연결하는 경우가 많은데 타사와 공동망(결제를 위한 금융공동망 등)을 주로 대외망이라고 부릅니다. 예를 들어 고객 카드의 신용 결제를 필요로 하는 유통 회사가 있다면 회사 네트워크와 금융 공동망을 연결하여 전용회선을 이용해 결제를 처리하죠. 아무리 전용회선으로 연결되어있다 한들 결국 신뢰할 수 없는 외부 네트워크이므로 중간에 방화벽을 두고 필요한 트래픽만 나가도록 제어합니다.

자사 네트워크와 연동된 대외망

여기서 Source IP NAT가 왜 필요한 것일까요? 자세히 보시면 자사 네트워크와 대외망 네트워크가 사용하는 IP 대역이 '10.10.10.x/24'으로 동일합니다. 그럼 자사 네트워크에서 대외망으로 통신하고자 할 때 출발지 IP 대역과 목적지 IP 대역이 '10.10.10.x/24'으로 동일하니 제대로 통신이 불가능합니다. 이 때 사용하는 것이 Source IP NAT입니다. 

자사 네트워크 스위치의 출발지 IP를 변환하여 정상적인 통신을 실현하는 방화벽

방화벽에서 Source IP NAT를 실시하여 출발지 IP를 방화벽의 IP로 변환한다면 대외망과의 통신에서 문제가 없게 됩니다. 방화벽에서 Source IP NAT를 실시하였으므로 대외망 입장에서는 전달 받은 패킷의 출발지 IP가 10.10.10.1이 아닌 172.16.1.1로 보기 때문에 대외망 측 네트워크에서 이에 대한 응답 또한 172.16.1.1를 목적지로 삼아 전달합니다. 아래 그림처럼 말이죠.

방화벽의 인터페이스 IP로 응답을 전달하는 대외망 스위치

이외에도 대외망과의 연동에서 Source IP NAT를 사용하는 이유는 IP를 감추기 위한 용도입니다. 대외망으로 패킷을 전송할 때 자사 네트워크에서 사용하는 IP가 무엇인지 감추고자 할 경우, Source IP NAT를 실시한다면 손쉬운 방법으로 자사 네트워크의 IP 정보를 감출 수 있습니다. 출발지 IP가 방화벽의 IP로 변환되기 때문이죠.

위 3가지 사례 이외에도 Virtual Machine(VM)의 네트워크 설정 중 'NAT Mode'가 Source IP NAT를 사용합니다. Host 내 VM에 설치된 Guest들이 Host 내 별도의 네트워크 대역을 사용하면서 Host 밖의 네트워크와 통신할 때 Host의 IP로 Source IP NAT를 실시하는 것입니다. 그러면 내부에선 별도의 네트워크를 사용하면서 외부 네트워크와 통신할 수 있게 되지요.

여기까지가 Source IP NAT의 사례입니다. 가장 많이 사용하는 사례는 변환 사례 #1이며 대부분을 차지합니다. 우리 모두가 인터넷을 사용할 수 있는 것과 연관이 있죠. 그리고 변환 사례 #2, #3은 일반적으로 쉽게 접할 수 없는 사례이나 네트워크를 다루시는 분이라면 알고 있는 것이 좋습니다. 다음 이야기는 Destination IP NAT입니다!

반응형

댓글