'Mininet'에 해당되는 글 2건

  1. 2014.08.17 SDN / NFV : Part 2 (1)
  2. 2014.08.08 SDN/OpenFlow - Part 1 [Mininet 환경 구성] (3)

 


SDN 관련 두 번째 포스팅입니다.

 조금 더 빨리하고 싶었으나, 이런 저런 일들과 무수한 삽질(?)을.. 하는 바람에 생각보다는 조금 늦어졌습니다.

 

 이번 포스팅은 지난 번에 설치한 Mininet 환경 구축을 실제로 아주 간단하게 테스트하는 내용입니다.

 별도의 OpenDayLight라는 OpenFlow Controller를 설치해서, Mininet으로 만든 구성을 OpenDayLight를 통해서 확인해봅니다.

 

아래 구성의 구성인

 

  OpenDayLight (Controller)/  mininet

 

은 각각 별도의 VM으로 구성하였으며, OpenDayLight의 경우에는 Ubuntu를 OS로 사용하였습니다.

  


 

먼저 OpenDayLight를 설치하겠습니다.

 

설치 파일은 http://www.opendaylight.org 에서 다운로드 받으실 수 있습니다.

 

 

 중앙에 보시면, DOWNLOAD NOW가 있습니다.  

 

 

 다운로드 페이지에서 보시면, Pre-Built Zip File이 있습니다.

 Pre-Built Zip File을 다운 받습니다. 이미 구성이 다 되어 있는 패키지 파일로, 다운 받아서 압축을 푸시고 실행만 하시면 됩니다.

 

 

약 45M정도의 파일을 모두 다운 받으시고, 압축을 풀어서, 해당 폴더로 이동하신 후에

 

 

run.sh 을 실행하면 됩니다.

그러면, 이런 저런 로그가 꽤 여러줄 올라오게 됩니다.

실제 로딩되는 데, 시간이 조금 걸립니다. 1~2분정도..

로딩이 완료되면, http://IP주소:8080 으로 접속하시면 아래와 같이 초기 화면이 뜨게 됩니다.

 

 

접속 계정은 ( admin / admin ) 입니다.

 

 

자, 이제 Controller의 준비가 끝났으니 Mininet으로 가상의 Lab을 구성해보겠습니다.

mn --controller==remote,ip=10.1.1.50,port=6633 --topo tree,2

라고 실행해봅니다.

 여기서, Controller 옵션은 Controller을 지정하고자 할 때 사용하는 옵션이며, 저는 Opendaylight를 10.1.1.50이라는 IP의 VM에서

구성하였기 때문에, IP는 10.1.1.50이 되며, Controller는 기본적으로 6633 포트를 사용합니다.

 그리고, Topo 옵션은 어떤 Topology를 구성할지에 대한 부분인데 우선 여기서는 간단하게 이미 정의된 Tree 형식의 Topology를

구성하였습니다. 뒤에 붙은 2는 Tree의 깊이를 나타내는 옵션입니다.

 어떤식으로 Topology가 만들어지는 말로 설명하는 것보다는 Controller에서 보여지는 그림을 보시는 것이 이해가 편하기 때문에

아래 그림을 보시면 됩니다.

 

자, 이제 mininet으로 구성한 첫 번째 Topology가 위와 같이 나타났습니다.

Tree 형식의 2단계가 어떤식으로 구성되었는지 아시겠죠?

하지만, 위에 보시면 분명 Host가 생성되었는 데, 보이지를 않습니다.

 

그럼 Mininet에서 pingall 이라는 명령을 하면, 모든 Host간의 Ping테스트를 하게 됩니다.

pingall의 결과를 보면, 전체 Host의 통신이 정상적으로 되고 있다는 것을 알 수 있습니다.

(첫 번째 pingall을 하면.. 일부 통신이 안되는 부분이 나올 수 있기는 하지만, 다시 해보면 정상적으로 통신 결과를 볼 수 있습니다.)

 

 

 

 Host의 통신 체크를 하면, 위와 같이 Host까지 모두 구성된 Topology를 볼 수 있습니다.

처음에 보여졌던, 스위치의 이름이 모두 OF1~3으로 바뀐 것은 자동으로 바뀌는 것은 아니고,

좌측의 Nodes Learned 화면에서 Node Name을 클릭해서 직접 바꾸시면 됩니다.

 

이제 간단한 테스트를 해보려고 합니다.

그 전에, node라는 명령과 dump라는 명령을 mininet에서 해보면 위와 같은 결과를 볼 수가 있습니다.

node라고 치게 되면, 각 Host와 Switch가 어떻게 연결이 되어 있는지 볼 수 있습니다.

Topology에서만 보면, 어떤 Interface로 각 Host와 Switch가 연결되어 있는지 확인이 안되기 때문에 이처럼 node라는 명령으로

확인할 수 있습니다.

 

dump 명령으로도 전체적인 구성 정보를 볼 수 있습니다. 여기서는 각 Host의 IP정보, Switch의 Interface 정보, Controller 정보를

한 번에 모두 볼 수 있습니다.

 

위의 내용에서 Interface 정보를 가지고, Controller에서 Flow를 생성해서 내려보는 테스트를 하려고 합니다.

먼저 위에서 H1와 H2간의 통신이 되는 것을 위와 같이 볼 수 있습니다.  (h1 ping h2)

 

OpenDayLight의 Flows 메뉴를 선택하시면,

Flow Entries를 볼 수 있습니다.

우선 여기서 Add Flow Entry를 클릭하면 아래와 같이 Flow 정책을 만들 수 있는 팝업창이 뜨게 됩니다.

 

 

 

Flow Entry 이름을 지정하고, 어떤 Node(Switch)에 내릴 것인지 지정합니다.

여기서는 Host 1, 2가 연결된 OF2 Switch를 선택했습니다.

그리고, 해당 Flow가 동작할 Input Port는 Host 1과 연결된 eth1을 선택합니다.

(이 Interface정보는 위의 Node나 Dump로 확인할 수 있습니다.)

 

스크롤바를 내리면 다양한 인자값을 선택해서 Flow를 만들 수 있는 것을 볼 수 있습니다.

위의 화면은 Layer 2에 대한 내용이네요. 저는 Layer 2에 대해서는 default 상태로 두겠습니다.

 

 

Layer 3 옵션에서는 Destination IP Address를 Host 2의 IP인 10.0.0.2로 지정합니다.

 

 

마지막으로 어떤 Action을 취할지에 대해서 선택하는 것이 있는 데, 다양한 Action이 있지만

저는 여기서 Drop으로 해보겠습니다.

모두 다 만들어지면, Install Flow로 바로 Switch 2에 Install 할 수도 있고 혹은 Save Flow로 우선 Flow를 저장만 할 수도 있습니다.

저는 Save Flow를 클릭하였습니다.

 

 

 Flow를 만들고 나면, 좌측에는 Flow의 이름과 어떤 Node에 적용되는 Flow인지 나오고 해당 Flow를 클릭하면,

 우측에는 해당 Flow의 세부 정보를 볼 수 있습니다.

 Flow Detail에서는 Flow를 Remove / Edit / Install 할 수 있습니다.

 이제 실제 적용하기 위해서 Install을 클릭합니다.

 Install을 하게 되면, Controller에서 생성된 Flow가 OF2 Node로 보내지게 됩니다.

 

해당 Flow를 적용하니, h1에서 h2로는 통신이 끊긴 것을 볼 수 있습니다.

그리고, h3로의 통신을 확인하면 h3과는 통신이 정상 상태입니다.

Flow가 h2로 가는 경우에만 막혀있기 때문입니다.

물론 OF2 Node에만 적용하였기 때문에 h3,h4 에서는 h2로 통신이 가능합니다. 

혹은 OF2의 또 다른 Interface가 존재하고 해당 Interface에 h5가 존재할 경우에도 통신이 가능합니다.

(h1과 연결된 interface에 대해서 flow를 적용하였기 때문에..)

 

위의 Troubleshoot를 보시면, 실제 각 Node의 Flow Table과 적용된 내용을 볼 수 있습니다.

실제 위에서 만든 h1과 h2간의 Drop하는 정책이 정상적으로 동작했는지 보려고 합니다.

Existing Nodes에서 OF2의 Flows 를 클릭하면

우측 하단에 Flow Table이 보이고, 스크롤을 제일 아래로 내리니 위에서 만든 Flow Table이 보입니다.

현재 81 이라고 써진 부분이 실제 적용된 count입니다.

 

 

 

 

 Test를 위해서 다시 한 번, h1과 h2간의 ping 체크를 합니다.

 제일 마지막에 체크한 부분만 보시면 됩니다. 제일 마지막에 18번의 전송이 이뤄졌고, 100% Loss입니다.

 

 

다시 OpenDayLight에서 보시면, 81이었던 count가 99로 바뀌었음을 볼 수 있습니다. ( 81 + 18 = 99)

정상적으로 만들어진 Flow가 동작했음을 확인할 수 있습니다.

 

 

 


이번에는 지난 포스팅에서 잠시 실행만 해보았던 miniedit를 이용해서

Topology를 만들고 이를 Controller에서 확인하겠습니다.

 

 

위와 이 miniedit.py를 실행합니다.

 

 

 

좌측의 아이콘을 이용하여 위와 같이 구성하였습니다.

 

제일 상단이 Controller이고, 아래에는 OpenFlow를 지원하는 Switch1~3이 있고, 각각의 Switch에는 h1 ~ h3까지 Host가 있습니다.

  

 

 

Controller에서 우측 버튼을 누르고, 속성을 지정하여

1. Controller IP를 지정하고,

2. Type을 Remote Controller로 설정합니다.

 

 

 

설정을 마치면, Run 버튼을 눌러서 해당 Topology를 실행합니다. 

 

 

 실행한 이후에, h1에서 마우스 우클릭을 하여 Console창을 열어서 h2와 h3과의 통신 상태를 확인해 볼 수 있습니다..

 

 

 

 

다시 OpenDayLight에서 보면, miniedit로 구성한 Topology가 정상적으로 보이는 것을 확인할 수 있습니다. 

 

마찬가지로 여기서 Flow 적용하는 Test를 해볼 수도 있습니다.

 

그리고 꼭 miniedit를 이용하지 않더라도 Node를 코드를 수정하여 원하는대로 만들 수도 있습니다.

이 부분은 나중에 다루게 될런지... 어떨런지.. 모르겠네요. ^^;

 

그럼 다음 포스팅에서 다시 뵙겠습니다.

 

Posted by 네떡지기

새로운 주제의 포스팅이 시작됩니다.

이번 주제는 SDN과 관련된 내용의 포스팅으로 진행될 예정입니다.

얼마나 많은 내용이 담길지 모르겠지만... ^^; 우선 시작해봅니다!

우선 첫 번째 포스팅으로는 SDN 환경을 시뮬레이션을 할 수 있는 Mininet 이라는 환경을 구축해보는 포스팅입니다.

 

Mininet에 관련된 사항은

 

    http://mininet.org/

 

로 가시면 볼 수 있습니다.

 

Mininet을 구성하는 방법에는 3가지가 있습니다.

 

1. Mininet VM Installation

2. Native Installation from Source

3. Installation from Packages

 

포스팅에서 다룰 내용은  mininet.org에서 추천하는 1번입니다.

추천하는 이유는 제일 쉽기 때문이지요

 (VM installation is the easiest and most foolproof way of installing Mininet, so it’s what we recommend to start with.)

 

설치를 위해서 우선 이미지 파일을 받으러 가야합니다.

 

https://github.com/mininet/mininet/wiki/Mininet-VM-Images

 

위의 링크로 가시면, 2014년 8월 8일 현재 기준 Ubuntu 14.04 / Mininet 2.1.0 으로 된, VM Image를 다운 받을 수 있습니다.

 

파일을 다운받은 이후부터 실행하는 방법까지 이번 포스팅에서 다뤄집니다.

 

전 과정을 모두 캡춰를 떴으니~ ^^ 한 장씩 따라오시면 금방 구축할 수 있습니다!

 

Virtual BOX를 추천하지만~ 저는 VMWare에서 해보도록 하겠습니다.

 

 

VMWare에서 시작해봅니다.
전 Advanced로 시작합니다!

 

Next!

 

우선 설치는 나중으로 미룹니다.

 

Ubuntu 이미지이므로, Linux Ubuntu로 설정합니다.

 

적절하게 VM이 구성될 이름과, 위치를 잡아줍니다.

 

여기도 Default로 Next!

 

전 메모리를 2048로 잡았습니다.

 

요것도 뭐 우선 사실 크게 중요하지 않습니다~ ^^

Host-only로 잡아주셔도 무방합니다.

 

이것도 Default로 Next.. 

 

 

이것도 Default로 Next.. 

 

 

Disk는 이미 받아놓은 이미지가 있으니, 이미 존재하는 Virtual Disk로 선택합니다. 

VM 9.0 버전에서는 이 부분이 초기에는 안보이는 듯 한데.. 그럴 때는 기본 설정으로 만들어진 다음에..

모든 설정이 끝난 이후에 edit해서.. 기존 하드를 삭제하고 새롭게 추가하면.. 지금 메뉴처럼 기존 Virtual Disk를 선택할 수 있습니다.


 

 

Mininet.org를 통해서 다운받은 이미지 파일을 선택합니다. 

 

걍 Convert Go!. 

 

드디어 완료되었습니다.

 

자 이제. VM을 실행해보도록 하겠습니다.. 

 

 

 

실행하고 나면, 위와 같이 나오게 됩니다.

계정은 ( mininet / mininet ) 입니다. 모두 소문자! 

 

 

Mininet을 실행하는 건... 위와 같이 

mn 명령으로 실행할 수 있습니다.

실행 시에

Host 2개, Switch 1개, Controller 1개로 구성됩니다.

위에 보시면, Available Node로 해당 내용을 볼 수 있습니다.

해당 구성은 변경이 가능하며, 그 부분은 다음 포스팅에서 다룰 예정입니다.

 

 

 

다음은 Topology를 구성하는 방법 중에 miniedit를 실행하는 방법입니다.

뭔지는 다음에 알아보도록 하고. 우선 실행만 해보는걸 알아봅니다.

 

mininet/examples에 가면, miniedit.py 를 실행해서 GUI환경으로 Topology를 구성할 수 있습니다.

본 포스팅에 의도에 맞춰서 우선 환경만 구축해봅니다.

 

자! 그럼 우선 해당 위치로 가서, 실행해보도록 하겠습니다.

 

 

음 그런데 실행을 하려고 보니... 실행이 되지 않네요...

어떻게 해야하나요?

 

아래와 같이 추가적으로 패키지를 설치해줍니다.

 

 

 

# apt-get update

 

 

 

# apg-get install xinit flwm

 

이 때, xinit의 경우에는 3가지 옵션이 있지만... 저는 flwm으로 합니다.

그냥 따라하는 포스팅이므로~ 똑같이 하시면 됩니다!  ^^;

 

 

 

패키지를 주루륵 설치하게 됩니다.
Y를 눌러서~ 설치를 하시면 됩니다.

 

 

 

자, 이제 설치가 끝나면 xwindow를 띄웁니다.

# startx

 

 

아까 설치할 때, 3가지 옵션 중에 2번째 옵션은... 보셨다시피 용량이 크지 않은 컴팩트한 버전으로 구성된 것입니다.

그래서 화려한 GUI를 구현해 주지는 않습니다. 그렇다고 Full로 설치하는 3번째 옵션을 쓰게 되면...

엄청난 용량의 파일을 다운 받아야하고... 한숨 자고 와야 할지도 모르는... 현상을 보실지도... (쪽잠.. )

 

자자 암튼.. 위와 같이 Bash Shell을 띄웁니다.

 

Bash Shell에서.. 아까 실행하지 못한 miniedit.py를 실행하면, 화면 하단의 그림판 처럼 생긴 GUI형식의 Edit 프로그램이 뜨게 됩니다.

왼쪽의 아이콘 중에 모니터처럼 생긴게 "HOST", 굵은 가로줄이 "SWITCH", 파란색 대각선이 "LINK"를 의미합니다.

각 구성요소로 다양한 Topology를 만들어 볼 수 있게 됩니다.

만든 이후에는 아래의 Run 버튼을 눌러서 해당 Topology를 활성화 할 수 있습니다.

 

 

자~ 여기까지 SDN/OpenFlow를 테스트 할 수 있는 Mininet 환경을 구성해 보았습니다.

 

다음에는 이 Mininet을 활용한 Topology를 원하는데로 구성해보기...

Controller와 연동하기 등을.... 진행하도록 하겠습니다.

 

이것 저것... 포스팅 시리즈를 벌여놓기만 하고.. 중간에 끊기고 있기는 하지만. ^^;

그래도 지속적으로 노력하겠습니다.

 

Posted by 네떡지기

티스토리 툴바