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

L4 스위치 쉽게 이해하기 #6(Source IP NAT 문제 해결)

by 네트워크 엔지니어 환영 2020. 10. 28.
반응형
이번 문서 'L4 스위치 쉽기 이해하기'와 '서버 부하 분산 쉽게 이해하기', 다음에 이어질 문서인 'L4/L7 로드밸런싱 쉽게 이해하기'는 L4/L7 Network Swtich인 'F5 Networks' 장비를 기준으로 설명합니다. Alteon(Radware), Brocade, Cisco, Piolink, Pumkin, Citrix의 관점에서는 다소 다를 수 있습니다.

앞선 문서에서 L4 스위치에서 Source IP NAT가 필요한 이유에 대해, 그리고 Case 두 가지를 말씀드렸습니다. 그 두 가지는 다음과 같습니다.

  1. L4 스위치를 통한 3-way handshake는 모든 과정(SYN, SYN/ACK, ACK)을 모두 L4 스위치를 통해 실시해야 한다.
  2. Local Address Network(LAN)에서의 통신은 IP 뿐만 아니라 MAC Address를 이용해 이루어진다.

이제부터 L4 스위치에 Source IP NAT를 적용하면 어떻게 해결이 되는지 하나씩 살펴보도록 하겠습니다.

 

L4 스위치에 Source IP NAT를 적용하면 어떻게 되는가

1. L4 스위치를 통한 3-way handshake는 모든 과정(SYN, SYN/ACK, ACK)을 L4 스위치를 통해 실시해야 한다.

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

위 그림에서 문제가 되는 부분은 'SYN/ACK'입니다. 서버의 게이트웨이가 백본 스위치이기에 SYN/ACK Packet이 L4 스위치가 아닌 백본 스위치로 향하게 되지요. 이 문제를 해결하려면 SYN/ACK Packet이 L4 스위치로 돌아오게 하면 됩니다. 그리고 Source IP NAT를 적용하면 그렇게 할 수 있지요. 이제부터 Source IP NAT가 적용된 후의 상황을 확인해보겠습니다.

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

사용자로부터 전달받은 SYN Packet을 L4 스위치가 서버에게 전달하고자 합니다. L4 스위치 도달 직전의 출발지와 목적지는 다음과 같습니다.

출발지 : 사용자(IP 15.15.15.15) - > 목적지 : L4 스위치(IP 123.111.43.1)

그리고 L4 스위치가 이 SYN Packet을 받아 서버로 전달할 때 다음과 같이 Source IP NAT(192.168.1.1)와 Destination IP NAT(192.168.1.100)가 이루어집니다.

출발지 : L4 스위치(IP 192.168.1.1) - > 목적지 : 서버(IP 192.168.1.100)

자! 이제 SYN Packet을 처리한 서버가 SYN/ACK Packet을 사용자에게 보낼 것입니다. 그럼 목적지와 출발지를 거꾸로 하여 다시 전송하려고 하겠군요.

출발지 : 서버(IP 192.168.1.100) - > 목적지 : L4 스위치(IP 192.168.1.1)

그런데 이번엔 경우가 다릅니다! 서버도 알고 있는 IP인 192.168.1.1가 목적지로 설정되어 있기 때문에 굳이 백본 스위치(서버의 게이트웨이)로 보낼 이유가 없습니다. Source IP NAT 이전에는 목적지 IP가 사용자 IP(15.15.15.15)로 설정되어 있었기에 공인 IP 대역에 대해 알 리가 없는 서버가 게이트웨이로 보냈지만, 이번엔 서버 또한 알고 있는 주소인 IP 192.168.1.1이 목적지이기에 그곳으로 보내는 것입니다. 목적지를 192.168.1.1로 강제하는 것이지요.

<목적지가 192.168.1.1인 L4 스위치로 SYN/ACK Packet을 보내는 서버>

그리고 이 SYN/ACK Packet을 받은 L4 스위치는 출발지 IP와 목적지 IP를 원래대로 돌려놓고 사용자에게 전달합니다. 다음과 같이 말이지요.

출발지 : L4 스위치(IP 123.111.43.1) - > 사용자(IP 15.15.15.15)

그리고 SYN/ACK Packet을 받은 사용자는 ACK Packet을 L4 스위치에게 전달합니다. 그리고 L4 스위치는 이를 전달할 것이고 3-way handshake가 온전히 이루어집니다.

 

2. Local Address Network(LAN)에서의 통신은 IP 뿐만 아니라 MAC Address를 이용해 이루어진다.

2번의 경우 역시, 1번과는 대동소이합니다. 2번에서는 SYN/ACK Packet이 사용자에게 전달될 때, 비록 L4 스위치를 지나치더라도 목적지 IP와 목적지 MAC이 모두 백본 스위치이므로 L4 스위치가 처리하지 않고 Forwarding하기 때문에 그 패킷이 SYN/ACK Packet임을 모른다는 것이 문제가 됩니다.

이를 해결하기 위해 서버가 사용자에게 SYN/ACK Packet을 전달하려는 시점에 목적지를 백본스위치가 아닌  L4 스위치(IP 192.168.1.50)로 강제함으로써 L4 스위치를 목적지로 삼아 나아가게 하는 것입니다. 그러면 목적지 IP가 L4 스위치를 가리키기 때문에 L4 스위치가 SYN/ACK Packet을 처리할 수 있게 되지요. 그림과 함께 보도록 하겠습니다.

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

위와 같이 사용자가 전달한 SYN Packet을 L4 스위치가 서버에게 전달하게 됩니다.  L4 스위치로의 도달 직전의 출발지와 목적지는 다음과 같습니다.

출발지 : 사용자(IP 15.15.15.15) - > 목적지 : L4 스위치(IP 192.168.1.50)

그리고 L4 스위치가 이 SYN Packet을 받아 서버로 전달할 때 다음과 같이 Source IP NAT(192.168.1.50)와 Destination IP NAT(192.168.1.100)가 이루어집니다.

출발지 : L4 스위치(IP 192.168.1.50, MAC bbbb.bbbb.bbbb)
목적지 : 서버(IP 192.168.1.100, MAC cccc.cccc.cccc)

그리고 SYN Packet을 전달받은 서버가 SYN/ACK Packet을 사용자에게 전달하려고 합니다. 하지만 목적지가 백본 스위치가 아닌 L4 스위치로 설정되어있습니다. Source IP NAT로 출발지 IP를 L4 스위치로 바꾸었기 때문이지요. 출발지와 목적지는 다음과 같습니다.

출발지 : 서버(IP 192.168.1.100, MAC cccc.cccc.cccc)
목적지 : L4 스위치(IP 192.168.1.50, MAC bbbb.bbbb.bbbb)

<목적지가 192.168.1.50인 L4 스위치로 SYN/ACK Packet을 보내는 서버>

목적지가 L4 스위치이기 때문에 L4 스위치는 자신에게 도달한 SYN/ACK Packet을 인식하게 되고, 출발지 IP와 목적지 IP를 원래대로 돌려놓고 사용자에게 전달합니다. 다음과 같이 말이지요.

출발지 : L4 스위치(IP 192.168.1.100) - > 사용자(IP 15.15.15.15)

그리고 사용자는 ACK Packet을 다시 L4 스위치에게 전달하고, L4 스위치는 이를 서버에게 전달할 것입니다. 이제 3-way handshake가 끝났으니 사용자와 서버가 통신할 일만 남았군요. 이처럼 Source IP NAT는 L4 스위치에게 도달하지 못하는 패킷들의 목적지를 L4 스위치로 강제로 바꾸는 역할을 합니다. 그리고 L4 스위치로 하여금 처리하도록 하지요. 매우 중요한 Skill입니다. 하지만 단점이 없는 것은 아닙니다. L4 스위치를 지나면서 IP가 사용자의 IP가 아닌 L4 스위치의 IP로 변경되기 때문에 서버의 입장에서 사용자의 IP를 알 길이 없습니다. 그러기에 HTTP의 'X-Forwarded-For' 같은 Header를 이용해 서버에게 사용자의 IP를 알려주곤 합니다. 

여기까지가 Source IP NAT에 대한 이야기입니다. 다음 문서에서는 Port의 NAT인 PAT(Port Address Translation)에 대해 알아보도록 하겠습니다.

반응형

댓글