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을 만들어 통신한다.
또한 각 VM은 Floating IP를 할당 받는다.
DVR 생성
DVR은 Private Network(net01, net02)에 생성된 VM(vm01, vm02)들이 외부 네트워크에 대한 IP를 각각 부여받아 외부 네트워크를 사용하는 경우에 Traffic 처리를 담당하게 된다.
위 그림에서 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의 인터페이스를 살펴보면 다음과 같다.
상기 그림에서 확인할 수 있는것 처럼 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의 인터페이스를 살펴보면 다음과 같다.
상기 그림처럼 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을 살펴보면 다음과 같다.
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를 사용한다.
위 그림에서 파란색으로 표기된 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 |