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를 코드를 수정하여 원하는대로 만들 수도 있습니다.
이 부분은 나중에 다루게 될런지... 어떨런지.. 모르겠네요. ^^;
그럼 다음 포스팅에서 다시 뵙겠습니다.