본문 바로가기

Cloud Native/Research_OpenStack

OpenStack DVR – DNAT Traffic

OpenStack DVR DNAT Traffic Flow


이번 포스팅에서는 Neutron의 주요 서비스 중 DNAT 서비스에 대하여 알아보고자 한다.

DNAT 는 Destination NAT의 약자로서 우리나라 말로 억지로 번역하자면 ‘수신측 주소 변환’ 정도가 되겠다.

어려운 말은 둘째로 치고 쉽게 설명하자면…

OpenStack에서는 Floating IP를 생각하면 되겠다.

Floating IP는 이미 잘 알고 있는 것 처럼 VM에 Public Network을 사용할 수 있도록 IP를 부여하는 것이다.

VM이 외부와 네트워킹을 할때에 공용 IP를 각각 할당받아서 사용하는 방법이다.

즉, 여러 VM이 각각 하나씩 공용 IP를 할당받아 사용하는 것이 되겠다.

 

OpenStack Topology – DNAT (Floating IP)



OpenStack의 Horizon을 통하여 Public Network 및 Virtual Network을 생성하고 DVR을 만들어 통신한다.

OPENSTACK DVR – DNAT

또한 각 VM은 Floating IP를 할당 받는다.

OPENSTACK – DNAT FLOATING IP

 

DVR 생성



DVR은 Private Network(net01, net02)에 생성된 VM(vm01, vm02)들이 외부 네트워크에 대한 IP를 각각 부여받아 외부 네트워크를 사용하는 경우에 Traffic 처리를 담당하게 된다.

COMPUTE NODE – DNAT NAMESPACE
위 그림에서 Compute Node에 Router Namespace 및 FIP Namespce가 생성된 것을 확인할 수 있다.
  • Router Namespace: qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501
  • FIP Namesapce: fip-62e976f8-2dc2-48af-950f-925d52b4e43b
여기에서 fip로 시작되는 것이 DNAT에 대한 Namespace, 즉 FloatingIP(FIP) Namespace이다.
Router Namespace인 qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501의 인터페이스를 살펴보면 다음과 같다.

COMPUTE NODE – ROUTER NAMESPACE

상기 그림에서 확인할 수 있는것 처럼 rfp-2fa96ed7-7이라는 인터페이스가 생성된다.
  • rfp-2fa96ed7-7: 129.254.171.228 (Floating IP), 6e:57:de:10:ab:c1
해당 인터페이스는 Floating IP를 부여받은 인터페이스 이다.
FIP Namespace인 fip-62e976f8-2dc2-48af-950f-925d52b4e43b의 인터페이스를 살펴보면 다음과 같다.


COMPUTE NODE – FIP NAMESPACE
상기 그림처럼 FIP Namespace에는 fpr-2fa96ed7-7 및 fg-8ff046eb-25 인터페이스가 생성된다.
  • fpr-2fa96ed7-7
    • rfp-2fa96ed7-7과 veth pair
  • fg-8ff046eb-25
    • external device 인터페이스
Router Namespace에 적용된 Rule을 살펴보면 다음과 같다.
COMPUTE NODE – ROUTER NAMESPACE RULE
private IP에 대한 lookup 테이블이 설정되며 해당 테이블에는 rfp 인터페이스(Router Namespace)에 대한 Rule이 설정된다.
FIP Namespace에 적용된 Rule을 살펴보면 다음과 같다.
COMPUTE NODE – FIP NAMESPACE RULE
External Device로 부터 발생하는 패킷에 대한 Rule이 적용되어 있다.

 

DNAT (Floating IP) Traffic Flow



상기 토폴로지에서 DVR은 External Network(public) 과 Private Network(net01: 10.0.0.0/24, net02: 20.0.0.0/24)를 연결하고 있다.
Private Network에 연결된 각 VM(vm01, vm02)은 모두 Floating IP를 할당 받았다.
이렇게 Floating IP를 할당 받은 경우 각 VM에서 외부 네트워크와 통신을 하는데 DNAT를 사용한다.

DNAT TRAFFIC
위 그림에서 파란색으로 표기된 Flow가 바로 DNAT Flow 이다.
이미 East/West 및 SNAT Flow에서 확인한 것 처럼 Flow 는 대략 예상할 수 있을 것이다.
예를 들어 vm02가 외부 네트워크와 통신을 시도하는 경우 다음과 같은 순서를 따르게 된다.
vm02에서 Google.com 으로 통신을 시도하는 경우 vm02는 이미 Floating IP를 가지고 있기 때문에 Router Namespace에서 해당하는 Rule을 매칭한다.
  • qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501의 rfp-2fa96ed7-7 인터페이스
  • private IP에 대한 lookup 테이블: default via <IP> dev rfp-2fa96ed7-7
FIP Namespace는 Router Namespace의 rfp-xxx 인터페이스와 veth pair를 이루는 fpr-xxx 인터페이스가 있으므로 이에 대한 Rule을 확인한다.
  • 62e976f8-2dc2-48af-950f-925d52b4e43b의 fpr-2fa96ed7-7 인터페이스
이때 패킷의 src MAC은 rfp-2fa96ed7-7의 MAC으로 dest MAC은 fpr-2fa96ed7-7의 MAC으로 src IP는 vm02의 floating IP로 변환된다. (DNAT)
FIP Namespace는 External Device에 대한 인터페이스인  fg-8ff046eb-25를 통하여 외부 네트워크와 통신을 완성한다.
이때 src MAC은 fg-8ff046eb-25의 MAC으로 dest MAC은 default GW MAC으로 변환된다.


'Cloud Native > Research_OpenStack' 카테고리의 다른 글

OpenStack with networking-sfc (devstack)  (6) 2016.03.23
OpenStack REST 확인  (0) 2015.10.19
OpenStack DVR - SlideShare  (0) 2015.06.29
OpenStack DVR – SNAT Traffic  (0) 2015.06.29
OpenStack DVR - East/West Traffic Flow  (0) 2015.06.19