오픈스택 Mitaka 환경에서 1대의 Instance(=VM)에서 외부와 통신 과정(vlan mode) 대한 상세한 분석 해보았습니다.

정리한 내용 입니다.


 

(1) OVS 이름이나 bridge 이름 과거와 일부 변경이 있었습니다. : br-prv

 

(2) OVS쪽은 패킷 켭처가 되지 않으니 장애 처리 까다로울듯 합니다. (ovs-ofctl dump-flow 등으로 확인)

 

(3) tag vlan 가장 혼동되었으나, 결론은 tag 1대의 노드(=서버)내부에서 구분으로만 사용하며,

 실제 외부 통신과 중요한 부분은 br-prv(OVS) 빠져 나갈때 할당되는 vlan id 입니다

 해당 vlan id 실제 물리 SW 연결되면 통신하기 때문입니다.

 

(4) qrX qgY 사이에 IPtables 동작하며, NAT 동작합니다, 패킷 캡쳐 비교로 확인함

 qrX qgY 구분을 위해서 내부에서 tag 다르게 할당합니다

 

(5) linex veth pair 연결 상태 확인하는 명령어나 방법을 찾지 못하였습니다; 혹시 찾으신분 답변을 ~


(6) Floating IP 부여 IPtables 1:1 NAT 정책 추가됨



* 참고

http://docs.openstack.org/mitaka/networking-guide/scenario-classic-ovs.html

http://docs.openstack.org/ops-guide/ops-network-troubleshooting.html

http://www.opencloudblog.com/?p=66

http://sola99.tistory.com/214

http://docs.openstack.org/mitaka/






저작자 표시
신고
Posted by 쏠라구구

* 오픈스택의 VPNaaS 에 대해서 알아보자

   

1. VPNaaS 소개

> openswan 오픈소스를 사용

> VPN을 Neutron Router 와 연계하여 특정 트래픽에 대하여 VPN 터널 생성하여 보안 통신(암호화, 인증, 무결성 제공)

> Use Cases : 오픈스택 사이트간 내부 사설 네트워크간 통신 시, NAT로 변환된 IP가 아닌 사설 네트워크간 통신 필요 시

   

   

2. Openstack VPNaaS 설정

> 현재 환경 : 2개의 오픈스택 환경(Site1, Site2), 각각 vRouter(Neutron, Router) 내부에 사설 네트워크 사용(Overlapping 안됨)

   

>> Site1 내부 네트워크 : 192.168.111.0/24, GW(192.168.111.1), SNAT IP(172.16.0.101)

>> Site2 내부 네트워크 : 192.168.112.0/24, GW(192.168.112.1), SNAT IP(172.16.0.121)

>> physical Device : L2/L3 환경 가능, 즉 Site1/2 vRouter간 SNAT IP들간 통신 가능환경이면됨(VPN 패킷 허용)

>> 현재는 Site1의 VM과 Site2의 VM간 통신 불가능 : Floating IP 부여하지 않음

   

>> Site1 horizon 의 네트워크 토폴로지

   

>> Site2 horizon 의 네트워크 토폴로지

   

   

2.1 설치

> (테스트) Mirantis Fuel (Kilo) 에 Plugin 으로 VPNaaS 를 설치하였음

> 오픈스택 Neutron Router에 plguin 으로 VPN 동작하도록 설치

   

nano /etc/neutron/vpn_agent.ini

[DEFAULT]

interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver

   

[vpnagent] ## 여러 VPN driver 중 OpenSwan 사용

vpn_device_driver=neutron_vpnaas.services.vpn.device_drivers.ipsec.OpenSwanDriver

   

[ipsec] # IPSec 상태 체크 주기(60초)

ipsec_status_check_interval=60

   

nano /etc/neutron/neutron.conf

[DEFAULT] ## 아래 VPN 추가

service_plugins = neutron.services.vpn.plugin.VPNDriverPlugin

   

nano /usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py

'enable_vpn': True,

   

> 설치 후 Horizon 에서 확인 : VPN 메뉴 확인

   

>> Site1_VM1 확인

$ ifconfig eth0

eth0 Link encap:Ethernet HWaddr FA:16:3E:D6:D2:D8

inet addr:192.168.111.3 Bcast:192.168.111.255 Mask:255.255.255.0

inet6 addr: fe80::f816:3eff:fed6:d2d8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:4660 errors:0 dropped:0 overruns:0 frame:0

TX packets:8082 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:408473 (398.8 KiB) TX bytes:760954 (743.1 KiB)

   

$ route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.111.1 0.0.0.0 UG 0 0 0 eth0

169.254.169.254 192.168.111.1 255.255.255.255 UGH 0 0 0 eth0

192.168.111.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

   

>> Site1의 vRouter 확인

root@node-1:~# ip netns exec qrouter-aa97c2de-c43a-4b3e-9ed9-52728197aafa ifconfig

qg-b82b8330-7f Link encap:Ethernet HWaddr fa:16:3e:98:af:6e

inet addr:172.16.0.101 Bcast:172.16.0.255 Mask:255.255.255.0

inet6 addr: fe80::f816:3eff:fe98:af6e/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:132750 errors:0 dropped:0 overruns:0 frame:0

TX packets:3029 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:7423835 (7.4 MB) TX bytes:221904 (221.9 KB)

   

qr-d60f3079-32 Link encap:Ethernet HWaddr fa:16:3e:d0:5c:a1

inet addr:192.168.111.1 Bcast:192.168.111.255 Mask:255.255.255.0

inet6 addr: fe80::f816:3eff:fed0:5ca1/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:581 errors:0 dropped:0 overruns:0 frame:0

TX packets:322 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:54120 (54.1 KB) TX bytes:29680 (29.6 KB)

   

root@node-1:~# ip netns exec qrouter-aa97c2de-c43a-4b3e-9ed9-52728197aafa route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 172.16.0.1 0.0.0.0 UG 0 0 0 qg-b82b8330-7f

172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 qg-b82b8330-7f

192.168.111.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-d60f3079-32

   

>> Site2 는 Skip~

   

   

2.2 설정 : Horizon GUI

> IKE 정책(공통) : SHA1, AES-128, Group5 ## IPSec 협상 트래픽에 대한 보안 정책

> IPSec 정책(공통) : SHA1, AES-128, Group5 ## VPN 터널에 실제 데이터 트래픽에 대한 보안 정책

> VPN서비스(Site1) : 라우터(Site1-vRouter) , 서브넷(192.168.111.0/24), 상태(UP) ## VPN통신을 시도할 로컬(내부) 네트워크

> VPN서비스(Site2) : 라우터(Site2-vRouter) , 서브넷(192.168.112.0/24), 상태(UP) ## VPN통신을 시도할 로컬(내부) 네트워크

> IPSec사이트연결(Site1) : Peer(172.16.0.121), PSK(공통암호키), RemotePeerSubnet(192.168.112.0/24) ## VPN 통한 리모트(내부) 네트워크

> IPSec사이트연결(Site2) : Peer(172.16.0.101), PSK(공통암호키), RemotePeerSubnet(192.168.111.0/24) ## VPN 통한 리모트(내부) 네트워크

   

>> 설정 완료 후 Horizon 확인 : 상태(Active)

   

>> CLI로 확인 : neutron ipsec-site-connection-list

(Site1)

   

(Site2)

   

>> vRouter에 라우팅 테이블 확인 : VPN에 리모트(내부) 네트워크가 라우팅 테이블에 추가됨

(Site1)

   

(Site2)

   

>> VM 에서 라우팅 테이블 확인 : 변화 없음

   

Mirantis Fuel VPNaaS 참고링크 http://plugins.mirantis.com/docs/v/p/vpnaas-plugin/vpnaas-plugin-1.2-1.2.0-1.pdf

오픈스택 VPNaaS 설정링크 https://www.packtpub.com/books/content/setting-vpnaas-openstack

   

   

3. VPN을 통한 사설 네트워크간 통신 및 VPN 패킷 확인

> VPN연결 후 논리적인 구성도 : 마치 vRouter간 직접 연결 된 것 처럼 좌/우 내부망간 라우팅 가능함

>> 패킷 캡쳐는 br-ex 인터페이스에서 실행, 즉 VPN적용된 패킷임, ESP대신 AH 설정으로 암호화되지는 않음(테스트를 위함)

   

> Site1_VM1(192.168.111.3) Site2_VM1(192.168.112.3) 통신 : ping 통신 성공

   

>> Site1의 br-ex NIC에서 tshark 로 VPN(AH) 패킷 캡쳐 : tshark -i br-ex -f ah -w vpn_s1.pcap

>> IP헤더 : S_IP(172.16.0.101) D_IP(172.16.0.121) - AH헤더(무결성, 인증제공) - 내부IP헤더(192.168.111.3 192.168.112.3)

   

   

> Site1_VM2(192.168.111.4) Site2_VM1(192.168.112.3) 통신 : ping 성공

   

>> Site1의 br-ex NIC에서 tshark 로 VPN(AH) 패킷 캡쳐 : tshark -i br-ex -f ah -w vpn_s1_1.pcap

>> IP헤더 : S_IP(172.16.0.101) D_IP(172.16.0.121) - AH헤더(무결성, 인증제공) - 내부IP헤더(192.168.111.4 192.168.112.3)

   

   

> Site1_VM1(192.168.111.3) 외부(172.16.0.1) 통신 : 즉 VPN 지정된 트래픽 이외에는 SNAT으로 외부 통신됨

   

>> Site1의 br-ex NIC에서 tshark 로 icmp 패킷 캡쳐 : tshark -i br-ex -f icmp -w icmp_s1.pcap

>> IP헤더 : S_IP(172.16.0.101) D_IP(172.16.0.1) - SNAT이 적용됨

   

* VPN encapsulation 을 AH가 아닌 ESP로 적용 시 : VPN 패킷 캡쳐 해보면 내부 IP헤더(+상위헤더+데이터)가 암호화됨

>> Site1의 br-ex NIC에서 tshark 로 페킷 캡쳐 : tshark -i br-ex -w vpn_esp.pcap

   

   

4. 더 확인 해 볼것

> Multiple Local Subnets : 리모트 사이트에 네트워크가 여러개 있을 경우, Liberty 부터 가능 : neutron vpn-endpoint-group-create

> VPN 적용 성능 저하 테스트

> Multi Site 간 VPN 설정 : 기본적으로 1:1 VPN 터널 설정이 필요, 즉 3개 사이트간 통신은 총 6개 VPN 터널 필요(2개씩*3사이트)1

   

   

Midonet VPNaaS in a 3 Tenant topology 동영상 https://youtu.be/XbsbFITAycU

첨부파일 패킷 캡처


icmp_s1.pcap vpn_esp.pcap vpn_s1.pcap vpn_s1_1.pcap


신고
Posted by 쏠라구구

* Openstack + Midonet 설치해보자~

   

   

0. MidoNet 간략 소개

> Architecture : SDN Controller 역활의 NSDB(Network State Database), 외부 네트워크와 연동되는 Gateway(BGP, Static),

Midonet Agent가 설치되는 Compute(Hypervisor) 로 구성됨

> NSDB에 전체 구성도 및 host 정보를 기반으로 물리서버들간 직접 경로(GRE, VXLAN) 연결로 바로 통신 가능

> NSDB는 경로에 대한 최적 정보를 알려주고, 실제 데이터 통신은 각 Compute/Gateway Node간 직접 전달됨

   

> Midonet 동작 시 논리적인 구성도

   

> 논리적인 구성도와 물리적인 구성도간 상관관계

   

>> Midonet의 Gateway Nodes 와 실제 물리 BGP 라우터간 구성도

   

>> Midonet의 Gateway Nodes 와 내부의 가상라우터(vRouter)와 Subnet, VM간 구성도

   

MidoNet 소개 http://sola99.tistory.com/213

MidoNet 아키텍처 https://docs.midonet.org/docs/latest-en/reference-architecture/content/preface.html

MidoNet 운영가이드 https://docs.midonet.org/docs/latest-en/operations-guide/content/preface.html

SDN by Midonet 동영상 https://youtu.be/sydwqPWuF84

(추천) MidoNet + Openstack Demo 동영상 https://youtu.be/2JKiUF5V93M

   

   

1. Mirantis Fuel 8.0 설치

> Midonet Plugin 이 MOS 9.0은 현재 지원검증이 아직 되지 않아서 MOS 8.0으로 설치

   

1.1 Fuel 8.0 다운로드 : ISO, VirtualBox Script

<그림1. Fuel 8.0 다운로드 정보>

Fuel 8.0 다운로드 링크 https://www.mirantis.com/software/mirantis-openstack/releases/

Fuel 8.0 문서 https://docs.mirantis.com/openstack/fuel/fuel-8.0/

   

1.2 Fuel 8.0 VirtualBox 에 설치 확인 : Openstack Undercloud 환경 설치

<그림2. 5대의 Slave Nodes 발견 확인>

   

> 이름변경(Label)

   

> Fuel-Slave-1 은 Controller Node 역활로 RAM을 2G RAM 8G RAM 올려줌

(CLI 에서 sudo poweroff 후 VirtualBox 에 fuel-slave-1 설정에서 RAM 변경 후 시작, Slave Node 재발견됨)

> Fuel-Slave-2 은 Midonet 의 NSDB 역활로 RAM을 2G RAM 8G RAM 올려줌

(CLI 에서 sudo poweroff 후 VirtualBox 에 fuel-slave-2 설정에서 RAM 변경 후 시작, Slave Node 재발견됨)

   

   

2. Midonet Plugin 설치

> Fuel Master Node 에서 Midonet Plugin(RPM) 다운로드 후 설치하여 확인

   

<그림3. Flue Plugin 링크>

   

wget http://plugins.mirantis.com/repository/m/i/midonet-fuel-plugin/midonet-fuel-plugin-4.0-4.0.0-1.noarch.rpm

fuel plugins --install midonet-fuel-plugin-4.0-4.0.0-1.noarch.rpm

fuel plugins

   

> Fuel Master Node 에서 설치된 plugins 확인

   

> Fuel UI 에서 설치된 Plugins 확인

   

Fuel Plugin https://www.mirantis.com/validated-solution-integrations/fuel-plugins/

   

   

3. OpenStack Enviroments 설정 및 Deplay

> Neutron with MidoNet 선택 하자~

   

> Node 설정

Controller : 오픈스택 Controller 역활

NSDB : MidoNet의 SDN Controller 역활 및 Virtual Topology로 최적 경로 알려줌, 3중화 권장(ZooKeeper, Cassandra)

Gateway : 실제 외부 네트워크와 연동(BGP, Static)되며, 오픈스택 네트워크와 외부간 연동, Gateway 이중화 권장

Compute1,2 : 컴퓨트 노드역활이며 MidoNet Agent(=Midolman) 설치됨

   

>> 아래는 NSDB 노드 역활이며, 기본 OS 설치 선택

   

>> 아래는 Gateway 노드 역활이며, 기본 OS 설치 선택

   

> NIC 5개를 구성해서 vlan tag 없이 그냥 NIC 별 각기 네트워크 용도로 사용함

   

> Openstack Settings - Other : Neutron Midonet plugin 설정

>> MEM(Midokura Enterprise Midonet) 활성화

>> Tunnel Type : GRE or VXLAN 중 선택

>> Floating Network ~ : BGP로 광고할 오픈스택 네트워크 정보

>> BGP ~ : 실제 상대방 BGP 라우터와의 연동 정보

   

   

> Deploy 실행

>> 각 Node 에 Ubuntu 부터 설치 중~

   

>> Ubuntu 설치 완료

   

>> 오픈스택 설치 중~

   

**(2016.08.07) Fuel 8.0 + MidoNet Plugin 설치 실패; 원인 log 보았지만 정확한 이유 파악 어려움;;

**(2016.08.07) Fuel 7.0 + MidoNet Plugin 설치 실패; 원인 log 보았지만 정확한 이유 파악 어려움;;

   

신고
Posted by 쏠라구구


티스토리 툴바