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

L4 스위치 쉽게 이해하기 #3(NAT)

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

이번 문서에서는 L4 스위치에서 Network Address Translation(NAT), 네트워크 주소 변환이 어떻게 활용되는지 알아보고자 합니다. NAT는 L4 스위치에 있어서 떼려야 뗄 수 없는 존재입니다. 일부의 경우를 제외하고는 L4 스위치에서는 NAT를 끊임없이 사용합니다.  그렇기에 NAT를 제대로 이해하지 못하면 L4 스위치의 네트워크 구성, 설정, 트러블슈팅이 매우 어려울 수밖에 없습니다. 그렇다면 이 어려운 NAT를 왜 사용해야 하는 것일까요? 

<L4 스위치에서 사용하는 NAT(출처 : https://support.f5.com/)>

(위 그림을 굳이 이해하실 필요는 없습니다. 대략 이런 모습이라는 것을 말씀드리고 싶은 것뿐입니다. ^__^)

 

NAT(Network Address Translation)가 필요한 이유

네트워크 주소 변환(영어: network address translation, 줄여서 NAT)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP패킷의 TCP/UDP 포트 숫자와 출발지 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. NAT가 호스트 간의 통신에 있어서 복잡성을 증가시킬 수 있으므로 네트워크 성능에 영향을 줄 수 있는 것은 당연하다.

- 출처 : 위키백과 - 

위키백과의 NAT 설명입니다. '출발지 및 목적지의 IP 주소'와 'TCP/UDP Port 번호'를 재기록하며 상대방에게 전송한다고 설명하고 있습니다. 즉 네트워크 망을 이동하면서 Router와 같은 IP를 변형시킬 수 있는 네트워크 장비에 의해 출발지 혹은 목적지 IP가 변화하는 것을 의미합니다. IP와 Port를 변경하는 것 또한 부하일 뿐만 아니라, 변경된다는 것 자체가 구성, 설정, 트러블 슈팅을 어렵게 합니다. 하지만 이를 모두 커버할 수 있는 장점들이 있습니다. 이에 대한 설명을 위해 L4 스위치 쉽게 이해하기 #1에서 사용한 구성도를 다시 가지고 왔습니다. 본격적으로 L4 스위치에서 NAT를 사용해야 하는 이유에 대해 살펴보도록 하겠습니다.

1. 모든 요청은 L4 스위치가 받지만 실제 요청은 서버가 처리한다.

사용자가 서비스 접속을 위해서 L4 스위치의 VIP(Virtual Server IP)로 접속하지만 이는 서버들의 대표인 Virutal Server의 IP일뿐 실제 서버의 IP가 아닙니다. 그러므로 요청을 처리하기 위해서는 목적지 IP를 실제 서버의 IP로 변경할 필요가 있습니다. 실제 서버의 IP로 변경하지 않고 L4 스위치의 VIP를 유지한 상태로 Pool Member인 192.168.1.11 or 192.168.1.12에 부하분산한다면 이 서버들은 유입된 패킷의 목적지 IP가 자신이 아니므로 이 패킷을 무시하게 될 것입니다.

( 아래 구성도를 처음 보신다면 L4 스위치 쉽게 이해하기 #1를 꼭 읽어주세요!)

<L4 스위치의 구성>

위의 그림을 예로 들어 보겠습니다. 사용자가 웹 서비스 사용을 위해 L4 스위치의 Virtual Server IP로 접속을 시도하면 출발지 IP와 목적지 IP는 아래와 같습니다. 사용자 IP는 175.112.150.12로 정하겠습니다.

사용자(175.112.150.12) → L4 스위치 VIP(123.111.43.1)

L4 스위치의 Virtual Server에 이 패킷이 도달하고 L4 스위치는 이를 실제 서버로 Load Balancing하기 위해 IP 주소를 다음과 같이 변경합니다.

사용자(175.112.150.12) → 실제 서버(192.168.1.11 or 192.168.1.12)

이제 패킷은 실제 서버로 전달되고, 서버는 이 패킷을 받아든 후에 목적지 IP가 자신의 IP와 맞음을 확인하고 요청을 처리하기 시작합니다. 물론 위의 그림처럼 L4 스위치를 중심으로 위아래 IP 대역이 다른 경우뿐만 아니라  IP 대역이 같은 경우에도 NAT는 수행됩니다. 아래 그림을 통해 살펴볼까요?

<L4 스위치의 동일 네트워크 구성>

이번엔 사용자와 L4 스위치, 그리고 실제 서버의 IP 대역이 모두 192.168.1.x/24입니다. 이 때의 NAT 사용을 보도록 하겠습니다. 사용자가 웹 서비스 사용을 위해 L4 스위치의 Virtual Server IP로 접속을 시도하면 출발지 IP와 목적지 IP는 아래와 같습니다. 사용자 IP는 192.168.1.155입니다.

사용자(192.168.1.155) L4 스위치 VIP(192.168.1.100)

L4 스위치의 Virtual Server에 이 패킷이 도달하고 L4 스위치는 이를 실제 서버로 Load Balancing하기 위해 IP 주소를 다음과 같이 변경합니다.

사용자(192.168.1.155) 실제 서버(192.168.1.11 or 192.168.1.12)

L4 스위치를 기준으로 위/아래 IP 대역이 같건 다르건 VIP를 통해 요청을 처리하기 때문에 NAT가 발생하게 됩니다. 여담으로 여기서 서버의 Gateway가 어디인가가 매우 중요하게 작용하는데요. 이것도 나중에 다시 다루도록 하겠습니다. 

2. L4 스위치 내부의 서버 IP가 다르면 외부에서 서버의 IP에 의도적으로 접근할 방법이 없다.

뉴스를 보면 종종 DDoS 공격으로 서버가 다운되었다는 소식을 듣곤합니다. 물론 공격을 받은 사이트도 어느정도 대비가 되어있을테지만, 그 이상의 공격 때문에 다운된 것이겠지요? 이러한 공격들을 막기 위한 수많은 전문 장비들이 존재하지만, L4 스위치 또한 이러한 역할을 '어느정도' 수행할 수있습니다. 

그 이유는 바로 NAT 때문이랍니다. 위 그림을 다시 보겠습니다. 1번의 이유처럼 모든 요청을 L4 스위치가 받기 때문에  굳이 실제 서버들이 IP를 외부에 노출시킬 필요가 없습니다. 이 말은 다시 말하면 외부에서 실제 서버의 IP를 알지 못하며, 접근할 방법도 없음을 의미합니다. 그래서 L4 스위치를 사용하여 Client Side(사용자와 L4 구간의 대역)와 Server Side(L4 스위치와 서버 구간의 대역)의 IP 대역을 분리하면 서버를 보호하는 역할을 수행할 수 있지요. 서버의 존재를 가려 서버에 접근하기 못하게 막는 것입니다.

F5 Networks의 L4 스위치를 보면 'Hardware SYN Cookie Protection'과 'Software SYN Cookie Protection'이라는 기능이 있습니다. SYN Flooding Attack(다수의 SYN Packet을 날리고 그에 대한 응답을 하지 않아 서버의 리소스를 소모시키는 공격 기술)에 대응하기 위한 기능인데요. L4 스위치가 서버의 앞단에 있으면 서버를 공격할 수 없으니 L4 스위치를 대신 공격하게 되는데 이를 방어하기 위한 자체 방어 수단입니다.

<F5 Networks의 SYN Flooding 방어 기능>

공격이 진행되는 동안 F5 Networks의 L4 스위치는 SYN Queue가 쌓이는 것을 지켜보다가 임계값인 '16384'를 넘게 되면 Client에게 SYN-ACK Packet을 전송한 후, SYN Queue를 폐기 처분합니다. 이렇게 함으로써 L4 스위치의 시스템 리소스를 보호하는 것이지요.

이 기능은 L4 스위치 때문에 서버를 공격할 수 없으니 서버의 대표인 L4 스위치가 공격 타겟이 되어 탄생하였다고 생각합니다. 물론 L4 스위치는 서버 부하 분산 장비이지 보안 장비가 아니기 때문에 위 기능을 사용하는 것은 개인적으로 추천하고 싶지 않습니다. 실제 요청이 몰린 것인데 공격으로 오판하고 SYN Queue를 내다버릴 수도 있으니까요.

L4 스위치가 NAT를 필요로 하는 이유에 예시를 들어 확인해 보았고, 그 밖에 수많은 이유가 있지만 제가 개인적으로 중요하다고 생각하는 이유를 적어보았습니다. 다음 문서에서는 이 NAT가 구체적으로 어떻게 수행되는지 알아보도록 하겠습니다. 감사합니다!

반응형

댓글