L4/L7 스위치를 이용한 서버 로드밸런싱 구성에서 주로 사용하는 라우팅 방식은 NAT, FNAT, DSR 세 개를 주로 떠올립니다. 이중 DSR은 이전 포스팅에서 알아보았고, 이번에는 FNAT 구성을 소개합니다.
먼저 개념 정리부터 하죠. 라우팅(Routing)이란 네트워크 주소를 이용해 목적지로 가는 경로를 제어하는 것을 뜻합니다. 더 쉽게 풀이하자면 데이터를 목적지까지 전달하는 경로이자 방법이라고 설명할 수 있습니다.
라우팅은 네트워크 계층에 따라 받는 쪽에서 꼭 확인해야 하는 정보가 다릅니다. 가령 L2 계층에서는 MAC 주소를 알아야 합니다. L3에서는 IP 주소와 서브넷 정보가 필요합니다. L4의 경우 IP 주소와 서버의 포트 정보가 있어야 합니다.
패킷을 목적지까지 전달하는 일반적인 라우터와 L4/L7 스위치와 같습니다. 다만 목적지의 개념이 좀 다른데요. L4/L7 스위치에서 목적지는 IP를 가진 장치를 가리키는 게 아니라 애플리케이션과 컨텐츠입니다. L4/L7 스위치는 애플리케이션 데이터와 애플리케이션 컨텐츠를 효율적으로 전달하기 위해 쓴다는 것을 떠올리면 이해가 빠를 것입니다.
다시 본 포스팅의 주제인 FNAT으로 옮겨 보겠습니다. FNAT은 영어로 ‘Full Network Address Translation’입니다. L4/L7 스위치에서 FNAT이 동작하는 방식은 패킷의 출발지와 목적지 IP 주소가 모두 변경되어 전송되는 것입니다. 주로 어디에 쓰냐 하면? 로드밸런싱 환경이 자주 바뀌는 경우에 어울립니다. L4/L7 스위치와 서버가 네트워크 대역이 서로 달라도 로드밸런싱이 가능하므로 네트워크와 서버의 설정을 바꾸지 않아도 됩니다. NAT 방식과 달리 L4/L7 스위치과 연결된 서버들 간에도 L4 서비스를 요청할 수 있는 특징도 있습니다. 가령 웹 서버와 데이터베이스 서버가 프록시 IP를 이용해 서로 통신할 수 있습니다.
그렇다면 어떤 때 OneArm 방식의 FNAT 구성을 하는지 살펴보죠. 네, 앞서 힌트가 있었는데 백본을 기준으로 대역이 서로 다른 경우 FNAT이 적용됩니다. 다음 그림을 보시죠. 먼저 DSR 방식입니다. 소스 IP(SIP)가 30.10.10.50이고 목적지 IP(DIP)가 40.10.10.102라면 L4/L7 스위치를 거친 요청 패킷이 게이트웨이인 백본(40.10.10.254)로 갑니다. 백본에서 요청 패킷을 받으면 목적지 IP가 L4/L7 스위치의 VIP이므로 요청패킷이 서버가 아니라 L4/L7 스위치로 다시 전달되죠. 네, 서버로 요청 패킷이 안 갑니다. 물론 L4/L7 스위치와 서버의 대역이 같은 경우는 서버로 요청 패킷이 전달되지만, 대역(Subnet)이 다를 경우 가지 않습니다.
백본을 기준으로 대역이 다르면 NAT도 적용할 수 없습니다. 요청 패킷은 L4/L7 스위치를 거쳐 서버까지 가지만 응답 패킷은 백본에서 L4/L7 스위치를 거치지 않고 클라이언트로 갑니다. 이 경우 처음에 클라이언트에서 요청한 VIP에서 응답이 오는 게 아니다 보니 클라이언트는 패킷을 드롭 처리합니다.
FNAT의 경우는 출빌지 IP를 L4/L7 스위치의 IP로 변경합니다. 따라서 서버에서 응답 패킷을 L4/L7 스위치로 전달하는 게 가능하죠. 이때 서버에서 클라이언트 IP는 알 수 없죠. 참고로 다음 포스팅에서 알아볼 L3DSR 방식으로 구성하면 클라이언트 정보로 확인할 수 있습니다.