블로거 워누입니다!

프로젝트를 2017년 11월 안에 종료하려고 했는데 큰 변수가 생겨 11월 안에 종료하지 못했습니다... 그 변수는 바로 취업에 성공해서..ㅎㅎㅎ(죄송합니다. 사실 핑계에요..) 회사일에  너무 하는게 많아서 정신을 못차리다 보니.. 그동안 못 한 포스팅을 몰아서라도 잘 해보겠습니다!

.

바로 본론으로 넘어가자면 저번까지만 하더라도 자바 기반의 SDN 컨트롤러인 "Maestro"를 이용하여 네트워크 어플리케이션을 제작하려고 했습니다. 그러나 현재 Maestro는 연구 및 개발이 2013년 이후로 진행이 되지 않는다고 합니다. 그래서 빠른 대책을 세운 결과 가장 잘 알려진 OpenDayLight를 활용하여 네트워크 어플리케이션을 제작해보고자 합니다.

.

어쨌든 자바 기반의 프로젝트를 진행하려면 가장 필요한 것이 있습니다!

아실만한 분은 바로 눈치 채셨을 겁니다. 바로 JDK입니다! 오늘은 리눅스에서 JDK를 간단하게 까는 방법을 알려드리겠습니다.

.

일단 VirtualBox에서 리눅스 전원을 켜주세요. 그 후 터미널을 실행시키시고 아래 명령어를 입력해 봅시다.

.

$ sudo add-apt-repository ppa:webupd8team/java

.

.

뭔가 알수 없는 것들이 막 뜨고 정신이 없죠?

중간에 막 JAVA7, 8, 9 어쩌고 하는 것들도 보이네요!

방금 입력한 명령어는 jdk를 설치할 저장소를 만들어 준 명령어입니다.

.

만약 이 명령어가 실행이 되지 않는다면 아래 명령어를 통해 add-apt-repository 명령어를 설치(?)하여 실행할 수 있게끔 하시면 됩니다.

.

$ sudo apt-get install python-software-properties

$ sudo apt-get install software-properties-common

.

일단 저는 한번에 진행이 되었으니 다음 명령어를 입력해 볼까요?

갱신된 패키지가 있으니 바로 업데이트를 진행해줍시다.

.

$ sudo apt-get update

.

.

update를 성공적으로 완료했습니다. 그럼 바로 jdk를 설치해봅시다!!

저는 jdk8을 설치해 보겠어요!

.

$ sudo apt-get install oracle-java8-installer

.

.

"작업을 계속하겠습니까?"라고 묻는다면 y라고 답하는게 인지상정!

계속 진행해봅시당 ㅎㅎ

.

 

흠... 뭔가 많이 설치되는 중입니다... 조금 시간이 걸리는 듯? 하니 잠깐 기다려볼까요?

.

.

설치가 완료되었습니다! 자바가 제대로 설치되었는지 확인하기 위해

$ java -version

명령어를 입력하였더니 jdk8이 정상적으로 설치되었다고 나옵니다.

이제 현재 리눅스에서 java와 관련된 것들을 진행할 수 있는 기본적인 환경이 마련되었다고 보시면 됩니다!

.

오랜만에 포스팅이라 그런지 글이 조금 짧네요ㅜㅜ 조만간 더 많은 글로 찾아뵙도록 하겠습니다. 열심히 하는 공대생..이 아닌 직딩 블로거 워누가 되겠습니다!

그럼 안녕~

블로거 워누입니다!

벌써 11월 중순이 끝나가네요! 11월 안에 프로젝트를 마무리해야겠다고 말씀드렸는데 시간이 매우 촉박합니다..ㅜㅜ 그래도 최대한 노력해 프로젝트를 마무리해야 합니다.(단호) 그러므로 바로 본론으로 넘어가보도록 하죠!

.

오늘은 저번 포스팅에서 소개해드린 OpenFlow Controller 중 마에스트로(Maestro)에 대해서 더 자세히 알아보고 설치를 위한 환경구축을 같이 해볼까 합니다!

.

* 마에스트로란?

.

마에스트로는 네트워크 제어 어플리케이션을 조율하는 네트워크 운영체제입니다. 마에스트로는 모듈화된 네트워크 제어 어플리케이션을 구현하기 위한 인터페이스를 제공하고, OpenFlow를 포함한 여러 프로토콜을 통해 그들간의 상호 작용을 조율합니다. 단순한 OpenFlow Controller로 생각될 수 있지만, 마에스트로는 네트워크에 국한된 것이 아닙니다. 마에스트로의 프로그래밍 프레임워크는 아래 세가지 기능을 위한 인터페이스를 제공합니다.

.

- 모듈화된 제어 컴포넌트를 추가하여 새로운 맞춤형 제어 기능을 추가.

- 제어 컴포넌트를 대신하여 네트워크 상태를 관리

- 실행 순서와 컴포넌트 간에 공유되는 네트워크 상태를 지정하여 제어 컴포넌트를

  구성

.

마에스트로는 플랫폼과 컴포넌트 모두 자바로 개발되어 다양한 운영체제와 아키텍처에 이식성이 매우 뛰어납니다. 또한 Multi-Thread 기술을 이용해 멀티코어 프로세서의 장점을 최대한 활용합니다. 마에스트로는 GNU Lesser General Public Lisence 2.1 ver.을 사용합니다.

.

[출처(도서) : 오픈플로우를 활용한 SDN 입문 / 저자 : 시아마크 아조돌몰키

/ 출판사 : 에이콘]

.

기본적인 이론은 이렇습니다! 그럼 이제 환경 구축을 제대로 해 봅시다!

이번에는 VirtualBox에서 우분투를 설치할 겁니다! 그리고 그 우분투에다 마에스트로를 설치해서 작동시켜보도록 하겠습니다.

아래 그림들을 참고해 주세요!

.

아! 저는 참고로 VirtualBox를 다른 버전으로 다시 깔았습니다!

(다시 깔아도 기존에 있었던 VirtualBox 내 머신은 잘 있더군요.)

.

.

먼저, [새로 만들기]를 클릭하신 다음 이름을 그림에 보이시는 대로 작성하여 주세요!

자, [다음]을 눌러주세요!(이하 생략할게요!)

.

.

메모리 크기는 추천해준 대로 1024MB를 지정합니다. 자 [다음]

.

.

하드 디스크는 새로 만들겠습니다! 가운데 체크박스 체크하고 [다음]

.

.

우분투 홈페이지에서 다운받은 우분투 이미지를 넣을 겁니다. VDI 선택하고 [다음]

.

.

어차피 가상 머신이니까 동적할당 해 줍시다!(프로젝트끝나면 밀어버리게요..ㅎ)

[다음]

.

.

그냥 만만한게 20GB입니다.

리눅스가 8.6GB정도 되니까 여유 되는대로 할당하는 것이 좋습니다.

[만들기]를 눌러주세요!

.

.

이제 설정으로 갑시다! 방금 만든 가상 머신을 클릭해 [설정]을 눌러주세요!

.

.

[시스템]->[프로세서] 탭으로 가서 CPU를 2개로 설정해주세요!

.

.

비디오 메모리는 최대치 128MB로 설정합니다!

.

.

[저장소]에서 SATA를 클릭하신 다음 마우스 오른쪽 클릭 or 이름 옆에 CD모양 클릭

-> 광학드라이브 추가하기 -> 우분투 이미지 파일(.iso)를 넣어주세요!

.

.

이렇게 되시면 성공!

아! 우분투 이미지를 가져오는 방법은 아래 주소를 참조해서 LTS버젼을 다운받으시면 됩니다!

Ubuntu Download : https://www.ubuntu.com/download/desktop

.

.

설정 마지막! 네트워크를 어댑터의 브리지 형태로 연결합니다!

지금까지 한 모든 설정은, Controller를 위한 설정들입니다!

다 끝났으니 이제 설정을 닫고 시작버튼을 눌러주세요!

.

.

이제 우분투를 설치해야 하는군요! 왼쪽 언어 설정에서 한국어를 선택하고

Ubuntu 설치 버튼을 클릭해줍시다!

.

.

한국어니까 읽기 편하죠? 전 다 체크해 주었습니다!

혹시 기능이 필요없다면 체크 굳이 안하셔도 됩니당.

.

.

가상 머신 내에서는 설치한 운영체제가 없으니 이 경고창이 뜹니다!

맨 위에거를 체크하시고 설치해주세요.

.

.

보통 서울이라고 뜰겁니다! [계속] 눌러주세요!

.

.

언어 설정입니다! 한국어를 골라서 클릭해주세요!

.

.

이름과 비밀번호를 설정해주는 공간입니다.

비번은 특히 까먹으면 안되니 따로 적어두시거나 기억하기 쉬운걸로 해주세요!

Maestro1로 해볼까요?

.

우분투를 설치하게 되었습니다! 설치가 완료되면 종료 후 다시 시작 해주세요!

.

.

아까 설정한 이름이 나옵니다!

패스워드도 동일하게 입력해주세요!

.

.

우분투가 정상적으로 켜진 모습입니다!

---------------------------------------------------------------------------------------------

이제 마에스트로를 다운받기 위한 기본 환경 구축이 끝이 났습니다!

다음 포스팅에서는 이 우분투를 가지고 어떻게 환경을 구축하면 될 것인가를 실행해 봅시다! 그럼 20000~

블로거 워누입니다! 

저번 포스팅에서 mininet을 활용해서 가상 네트워크를 구성하고, flow entry를 추가도 해보고 삭제도 해 보았습니다. 그럼 이제 실제로 OpenFlow Controller를 설치해서 간단하게라도 테스트를 진행해 보아야겠죠? 

.

근데 그걸 하기전에..! 

오늘 포스팅에서는 OpenFlow Controller가 어떤 역할을 하는지, 그리고 어떤 종류가 있는지 알아봅시다! 

.

혹시 제가 맨 처음 포스팅에서 SDN에서 네트워크의 데이터 평면(data plane)과 제어 평면(control plane)을 분리하고 이 사이에 표준화된 인터페이스를 제공하며, 네트워크 운용자가 여러 상황에 맞추어 제어 평면을 프로그래밍하여 데이터 평면에서 이루어지는 통신 기능을 다양한 방식으로 제어할 수 있다고 한 거 기억하시나요? 컨트롤러가 하는 역할이 바로 이것입니다! 조금 간략하게 정리해드리자면, OpenFlow Controller는 OpenFlow Switch에게 프로그래밍 인터페이스를 제공합니다.이 프로그래밍 인터페이스를 이용해 제어와 관리 업무를 수행하고 새로운 기능을 제공하는 네트워크 어플리케이션을 작성할 수 있습니다. 그리고 SDN과 OpenFlow의 제어 평면은 논리적으로 집중되어 있고, 네트워크 어플리케이션은 네트워크가 마치 단일 시스템인 것처럼 작성됩니다!

.

아래 그림도 참고하시면 될 거 같아요. 역시 SDN 첫 포스팅에서 보여드린 그림인데요.

이 그림이 컨트롤러의 역할을 잘 설명할 수 있는 그림인거 같네요!

.

[원본 출처 : http://terms.naver.com/entry.nhn?docId=2851199&cid=56756&categoryId=56756]

.

위 그림이 영어로 되어있지만 쉽게 풀어보자면 ,

1계층은 네트워크(장비) 인프라 계층으로 네트워크 장비들이 있고,

2계층은 제어 계층으로 SDN 제어 소프트웨어가 있네요.

3계층은 응용 계층으로 어플리케이션들이 있습니다. 

.

1계층과 2계층 사이에서 데이터 평면 제어 인터페이스를 주고 받고 

2계층과 3계층 사이에 노스바운드 API를 주고 받는 것을 알 수 있습니다. 

.

반응형 제어 모델의 경우 OpenFlow Switch는 새로운 패킷 플로우가 OpenFlow Switch에 도착과 같은 결정이 필요한 상황이 발생하면 이걸 OpenFlow Controller에게 문의합니다.

.

플로우 기반 제어 모델의 경우에는 각 플로우의 첫번째 패킷이 포워드나 폐기 등의 결정을 하려면 컨트롤러에게 전달되야 하므로 해당 플로우에 속한 나머지 트래픽들은 스위칭 하드웨어 내에서 약간의 성능지연이 발생할 수밖에 없습니다. 대부분의 경우에는 첫 패킷의 지연을 무시할 수 있는 수준이지만 만약, 중앙의 OpenFlow Controller가 지리적으로 멀리 떨어져있거나 대부분의 플로우가 단일 패킷 플로우같이 일시적인 경우에는 문제가 됩니다. 대안으로 사전적 접근방법에서 OpenFlow는 정책 룰을 Controller가 Switch에게 밀어넣는 것이 가능합니다. 

.

.

위에 너무 구구절절하게 썻지만 '대충 이런느낌이구나...' 이렇게 넘어가셔도 될거에요! OpenFlow Controller가 어떻게 동작하는지 실제로 해봐야 '아! 그렇구나!!' 하는 느낌이 오겠죠? 

이제 어떤 OpenFlow Controller를 써야 할지 종류를 한번 보겠습니다.

.

 이름

언어 

플랫폼 

라이센스 

제작자/사 

비고 

 OpenFlow

Reference

Linux 

OpenFlow

License 

Stanford/

Nicira 

Not designed for extensibility 

 NOX

Python, C++ 

Linux 

GPL 

Nicira 

actively developed 

POX 

Python 

Any 

GPL

 

POX is NOX's younger sibling.

Beacon

Java 

Win, Mac,

Linux,

Android 

GPL(core), Foss Licenses for your code

David Erickson

(stanford)

Web UI framework,

regression test framework 

 Floodlight

Java 

Any 

 Apache 

BigSwitch,

based on Beacon 

Rest API

Open community 

Trema 

Ruby, C 

Linux 

GPL 

NEC 

regression test Framework supports OpenFlow 1.3 

 Maestro

Java 

Win, Mac, Linux 

LGPL 

Zheng Cai

(Rice) 

Multi-threading and targets researchers. 

Opendaylight 

Java 

Linux, and others 

EPL 

 

OpenDaylight is a Collaborative, open source project to advance SDN.

 FlowVisor

 

 

 

On.lab 

"slices" network resources 

 RouteFlow 

C++, Python 

Linux 

Apache 

CPqD(Brazil) 

virtual IP routing as a service. 


<OpenFlow Controller List>

.

종류가 많죠? 이 많은 걸 다 할 수는 없을거 같아요.. 그래서 다음 포스팅에 쓸 컨트롤러를 결정을 해야 하는데.. 익숙한 언어와 운영체제를 쓰는게 좋을거 같네요! 

저는 주로 Java를 활용하니 Beacon이나 Maestro, Opendaylight 셋중에 하나를 골라 프로젝트를 진행해 보도록 하겠습니다. 

.

오늘 포스팅은 여기까지 할 겁니다! 다음 포스팅에서는 저 3개 controller중 하나를 골라서 설치하는 것부터 간단한 운용까지 하는 방법을 담아보도록 노력하겠습니다~ 

그럼 20000!


블로거 워누입니다!

오늘도 어김없이 SDN 프로젝트를 진행해야 합니다! 11월이 약 20일 정도 남았으니 그 안에 끝내려면 서둘러야 되거든요ㅎㅎ 그럼 바로 본론으로 갑시다!

.

이번 포스팅에서는 Mininet으로 Virtual OpenFlow Network를 구성해보고자 합니다. Mininet은 Stanford Univ.에서 배포하였으며 개인 PC나 노트북에서 쉽고 빠르게 Virtual OpenFlow Network를 구성하여 테스트할 수 있는 OpenSource 프로젝트입니다. 

Mininet은 지난 포스팅에서 설치해보고 가볍게 사용해 보았으니 어느 정도 감은 잡으셨으리라 생각합니다! 그럼 바로 SSH 접속을 하신 후 터미널에서 'sudo mn'을 입력하여 미니넷을 실행해봅시다!

.

$ sudo mn

.

.

위 사진과 같이 되셨다면 mininet을 실행시키는 데 성공하신겁니다!

이번엔 mininet에서 제공하는 유용한 CLI들을 몇개 익혀볼까요? mininet CLI는 Mininet console에서 입력합니다.

.

1) 사용 가능한 명령어 리스트

Mininet> help

 

2) node 정보 출력

Mininet> nodes

 

3) link 정보 출력

Mininet> net

 

4) 모든 node 정보 출력

Mininet> dump

 

5) virtual host의 인터페이스 확인

Mininet> h2 ifconfig

 

6) xterm 띄우기

Mininet> xterm h2

 

7) mininet 종료 및 초기화

Mininet> exit

[또는 Ctrl + D]

 

.

저는 하나하나 입력해서 어떤 결과가 나오는지 보여드릴게요!

(1) help

 

(2-4) nodes, net, dump

 

(5) h1 ifconfig, h2 ifconfig

 

6) xterm h2(당연히 xming 실행시키시고 명령어를 입력하셔야 합니다!)

 

7) exit

.

mininet CLI를 가볍게 체험해보았습니다. 약간은 흥미가 생기셨나요? 저는 아직 잘 모르겠네요 ㅎㅎ 여기까지 되셨으면 이제 sudo mn -c 명령어로 초기화 해줍시다.

.

mininet이 종료되었습니다! 다시 처음의 상태로 되돌아온 것입니다.

CLI도 익혔겠다, 이제 Network Topology를 꾸며볼까요?

자유롭게 Topology를 변경하는 방법에는 두 가지가 있습니다.

.

1) Mininet의 코드를 직접 수정 및 구현하는 방법

2) Mininet에서 제공하는 tool 사용하여 구현하는 방법

.

책에서는 둘 다 쉽다고 하는데 과연 그럴지 한 번 해봐야 겠습니다!

mininet에서 제공하는 Sample코드가 있습니다. ~/mininet/custom 디렉토리 밑에

topo-2sw-2host.py를 살펴 보도록 하죠!

.

.

topo-2sw-2host.py는 2개의 host와 2개의 Switch를 구성하는 파이썬 코드입니다

"# Add hosts and switches" 부분을 잠깐 보시면 self.addHost()라는 함수와 self.addSwitch()라는 함수가 보이시죠? mininet 2.0부터 self.add_node() 함수를 self.addHost(), self.addSwitch() 두 개로 분리하여 Host와 Switch를 구성할 수 있도록 API가 변경되었다고 합니다. 덕분에 우리는 어렵지 않게 코드를 해석할 수 있게 되었네요ㅎㅎ 코드를 기반으로 구성도는 아래와 같습니다.

.

<topo-2sw-2host 구성도>

.

이 Topology를 실행해 볼까요? 아래 명령문을 실행해주세요!

$ sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo

.

[코드 설명]

--custom ~/mininet/custom/topo-2sw-2host.py : topology를 정의한 위치를 지정합니다.

--topo mytopo : 사용자의 topology를 인식합니다.

.

.

실행화면으로 넘어왔습니다. 일단 h2에 대하여 ifconfig를 준 후 아래 두개의 과정을 거쳐서 MAC 주소가 어떻게 바뀌는지 확인해 봅시다!

.

<첫 번째 h2 ifconfig>

 

<sudo mn 후 , h2 ifconfig>

<* 중간에 h2 if config는 실수입니다ㅜㅜ *>

<sudo mn --mac 후, h2 ifconfig>

" 이후에 IP와 MAC주소가 비슷해지지 않았나요?

뭔가 바뀐게 눈에 띄시나요? "sudo mn" 이후의 MAC주소가 바뀌었고

"sudo mn --mac" 이후에 IP와 MAC주소가 비슷해지지 않았나요?

설명을 해드리자면, Mininet에서 Host와 Switch의 MAC 주소는 랜덤으로 설정되고 Mininet이 생성될 때마다(sudo mn) MAC 주소가 변경되어 특정 트래픽을 제어하고자 할 때 불편합니다. 이때 --mac(즉, sudo mn --mac) 옵션을 사용하면 ID,IP,MAC 주소를 같게 설정할 수 있습니다.

예를 들면 방금 한 Host 2번은 IP 10.0.0.2 , MAC 주소는 00:00:00:00:00:02로 설정되는 것이죠!

.

첫번째 방법이 끝났습니다. 조금 길고 지루합니다. 문자만 보여서 그런지 졸리기까지 한 방법인거 같네요..ㅎ 그래도 익숙해지면 나빠보이진 않을 것입니다.

.

두번째 방법, Mininet에서 제공하는 Network Editor Tool, Miniedit를 사용해 봅시다.

Miniedit로 4host-3Switch Topology를 구성해보겠습니다.

.

일단, miniedit를 실행해야겠죠? 명령어는 아래와 같습니다.

(물론 Xming은 실행시켜주셔야 합니다!)

.

$ cd ~/mininet/examples

$ sudo ./miniedit.py

.

.

miniedit 창이 열렸네요! 책에서 소개된 mininet 1.0에서 지원해주는 애들보다 조금 더 많은 버튼을 지원해줍니다! 좋아보입니다!

.

왼쪽 목록을 소개시켜드려야 겠네요. 아래 사진으로 설명해 드리겠습니다!

.

.

이제 Switch 3개와 Host 4개를 이용해 네트워크를 꾸며줍시다. (전 LegacySwitch가 좋아보이니 LegacySwitch로 진행해볼게요!) 아래 사진처럼 네트워크가 구성되었다면, 왼쪽 하단의 run 버튼을 클릭하여 가상 네트워크를 동작시켜줍시다!

.

 

.

각 호스트(h1-h4)중 하나를 골라 마우스 오른쪽 버튼을 길게 클릭해봅시다!

그럼 옆으로 [host option], [Terminal] 두개의 목록이 나타나는데 [Terminal]을 클릭하면 호스트에 연결된 터미널로 접속이 가능합니다.

Host 1에서 Host 4로, 그리고 Host 4에서 Host 1로 Ping 테스트를 해보겠습니다.

.

* ip주소는 아시다시피 'ifconfig -a'로 확인 가능합니다.

  저 같은 경우는,

   host 1 : 10.0.0.1

   host 4 : 10.0.0.4

  였습니다! 여러분도 각 host의 터미널에서 'ifconfig -a'로 확인해보시기 바랍니다.

 

.

 

.

여기는 핑이 잘되네요! Ctrl+z로 빠져 나올수 있습니다! 이제 MiniEdit를 종료하겠습니다. 왼쪽 하단 붉은 색의 [Stop]버튼을 클릭하시거나 상단 메뉴의 [Run]->[Stop] 버튼을 클릭하시면 됩니다! 그 후 오른쪽 상단 창의 X버튼을 눌러서 종료해주세요!

.

이제 mininet으로 3개의 가상 호스트와 1개의 스위치로 구성된 topology를 구성하고, host 2와 host 3이 통신이 가능하도록 'dpctl' utility로  flow를 추가해보겠습니다.

.

 

<"3 Virtual hosts and 1 Switch" topology 구성도 [mininet 1.0 ver] >

 

 

<"3 Virtual hosts and 1 Switch" topology 구성도 [mininet 2.0 ver] >

.

1) 3host-1Swtich topology를 구성합니다. 명령어는 아래와 같습니다.

.

$ sudo mn --topo single,3 --mac --switch ovsk --controller remote

.

[코드 설명]

--topo single,3 : 1개의 Switch, 3개의 host를 구성합니다.

--mac : Datapath ID와 일치하는 MAC 주소를 설정합니다.

--switch  : 실행되어야 할 OpenFlow Switch를 선택합니다.

--controller : 네트워크를 제어 할 수 있는 Controller를 선택합니다.

.

.

2) h1에서 h3로 ping test를 합니다.

$ h1 ping -c5 h3

.

.

100% packet less가 발생했습니다. 그 이유는 Switch에 Flow테이블이 없기 때문입니다. Switch와 연결된 Controller가 없기 때문에, Switch는 유입된 Packet에 대한 정책이 없습니다.

.

dpctl을 이용해서 flow를 dump해서 확인해 봅시다. SSH terminal을 하나 더 띄워서 실행합니다!

.

$ dpctl dump-flows tcp:127.0.0.1:6634

(6633 실수에요! 무시하세요ㅜㅜ)

.

.

( * 주의 : 일부러 창 2개 보이게 했습니다! Putty 한번 더 실행하셔서 들어오시는 거에요! 창 하나가지고 진행하는 것이 아닙니다!!)

Flow Table entry가 없는게 확인이 되었습니다. dpctl의 다양한 옵션을 확인하시려면

"dpctl help" 명령어를 검색하시면 됩니다! (따로 보여드리지는 않을게요!)

.

3) Host의 인터페이스 정보를 확인합니다. h1과 h3 사이가 통신이 되게 하려면, flow entry를 추가해야 합니다. Host와 Switch의 연결 정보를 확인합니다.

.

Mininet> net

Mininet> nodes

Mininet> dump

.

"로 port 정보를 확인합니다.

(다른 창이란 것을 강조하기 위해 창 두개 띄워놨습니다! 혼동 없으시길 바랍니다!)

+ "dpctl show SWITCH"로 port 정보를 확인합니다.

.

 

4) Flow를 추가합니다. h1과 h3 사이에 통신이 가능할 수 있도록 아래의 2개의 flow를 추가하고 다시, dpctl dump-flows로 entry가 추가되었는지 확인합니다.

.

책에는

$ dpctl add-flow tcp:127.0.0.1:6634 in_port=1, nw_dst=10.0.0.3, actions=output:3

$ dpctl add-flow tcp:127.0.0.1:6634 in_port=3, nw_dst=10.0.0.1, actions=output:1

$ dpctl dumps-flows tcp:127.0.0.1:6634

로 되어있으나.. 아래 사진처럼 dpctl은 인자를 최대 두개 받는다고 하여 조사를 한 결과, "nw_dst=10.0.0.1"을 안적는다는 것을 찾아 냈습니다.

(책이랑 좀 다르네요..ㅜㅜ)

즉, 저는 이렇게 적어서 다시 해보았습니다!

.

$ dpctl add-flow tcp:127.0.0.1:6634 in_port=1, actions=output:3

$ dpctl add-flow tcp:127.0.0.1:6634 in_port=3, actions=output:1

$ dpctl dumps-flows tcp:127.0.0.1:6634

.

)

(보이시나요? 맨 위에 수차례 안 되는데 계속 명령어만 들이박은 흔적들입니다ㅜㅜ)

쨌든 조사 후 아래 명령어를 입력하니 오류는 없습니다!

이제 마지막입니다.

.

5) ping test를 합니다.(h1 -> h3)

.

.

잘 됩니다! 무사히 성공하였네요! 3차 위기를 이겨내고 ping test를 성공한 시간은 오전 2:20...허허... 금방 끝날줄 알았던 공부가 생각보다 오래걸렸습니다. 포스팅하면서 한다고 하더라도 이렇게 오래걸릴 줄이야..ㅜㅜ

.

혹시 flow를 삭제하고 싶으시다면

"dpctl del-flows"로 entry를 삭제할 수 있습니다.

ex) $ dpctl del-flows tcp:127.0.0.1:6634 in_port=1

.

오늘 포스팅을 통해서 mininet을 이용하여 가상 네트워크를 구성하고, OpenFlow API의 flow mod를 사용하여 flow entry를 추가 및 삭제하는 방법을 공부해봤습니다.

쉽게 따라 할 수 있다고 책에는 나오지만 책과는 다른 것들이 몇 개 있어서 저는 힘들었네요..ㅜ 어쨋든 실제 Openflow enable된 스위치를 제어하기 전에 Mininet으로 그 기능을 익혀둔다면 도움이 될 것이라고 생각합니다.

.

.

자야겠네요...  이 긴 글을 봐주신 여러분께 감사드리며 이만 포스팅을 마치겠습니다!

반나절만에 기력을 회복하고 돌아온 블로거 워누입니다!

11월 안에 이 프로젝트를 끝내려니 몸이 여러가지로 힘드네요..ㅜ

그래도 힘을 내서 해보려고 합니다! 바로 본론으로 들어가볼까요?

.

일단 Putty에 설정을 해야 할 것이 있습니다. Putty를 실행하면 아래처럼 화면이 나오죠?

.

.

그럼 이제 왼쪽 목록에서 [Connection] -> [SSH] -> [X11] 을 클릭한 후 

Enable X11 forwarding의 체크박스를 클릭하여 주시기 바랍니다.

.

 

.

이렇게 해 주셨으면 이 세션을 저장해야 합니다.

[Session]으로 돌아와 [Saved Sessions] 밑에 이름을 OpenFlow_tutorial이라 입력한 후 Session을 저장합니다.

.

 

이렇게 해주셨으면 이제 본격적으로 VirtualBox를 다룰 준비가 되었습니다.

Putty는 이제 종료해주세요. 그럼 이제 OpenFlow_Tutorial VM 파일을 VirtualBox에 mount 해보겠습니다.

.

VirtualBox를 실행해볼까요? 아래 아이콘을 클릭하여 VirtualBox를 실행해주세요!

.

 

자 그럼 아래와 같이 실행화면이 뜰텐데요! 저는 이미 한 번 만들었기 때문에 목록이 있지만 여러분은 목록이 없을 겁니다. 그럼 저와 같이 만드는 과정을 진행해 볼까요?

.

 

.

[새로 만들기] 버튼을 눌러주세요! 그 후 아래 그림과 같이 입력을 해주시면 됩니다.

.

 

이렇게 입력해 주셨으면 [다음]을 눌러주세요! 2번째 화면 역시 바로 다음을 눌러주시면 됩니다. 3번째 화면(아래 2번째 화면)을 참고해주세요!

.

.

저번 포스팅때 설치했던 mininet-vm-i386.vmdk를 밀어넣을 것입니다.

(32bit image 마운트 시에는 "OpenFlow Tutorial-disk1.vdi"이거나 "mininet-vm-xxx.vmdk" 파일 형태일 것입니다. 겁먹지 마시고 붙여넣어주세요 ㅎㅎ)

.

자, 이제 [만들기]를 눌러주세요! 그럼 아래 그림처럼 나올 겁니다!

.

 

제가 처음에 보여드린 화면과 같죠? ㅎㅎ 이렇게 나오신다면 성공하신겁니다!

앞으로 이것을 '관리자 화면'이라고 하겠습니다.

그럼 만들었으니 시작을 해봐야죠? [시작]을 눌러봅시다!

.

 

이런거는 그냥 확인 눌러주세요! 그냥 경고니까요! (저도 겪어보지 않아서..ㅎ)

확인을 눌러주시면 다음 화면이 나옵니다.

.

 

PW : mininet or OpenFlow

로그인을 하실텐데요. 64bit image를 마운트하신 경우에는 아이디 패스워드가 다음과 같습니다.

ID : mininet

PW : mininet

.

32bit image를 마운트하신 경우에는 둘 중 하나입니다!

ID : mininet or OpenFlow

PW : mininet or OpenFlow

.

전 64bit image를 마운트했으므로 아이디, 비번 둘다 mininet치고 로그인 해볼게요!

.

 

성공했네요!!!

그럼 이제부터는 리눅스 명령어를 이용해야 합니다. 왜냐하면 처음 설정할 때 운영체제를 리눅스로 잡았으니깐요! 익숙하지는 않지만 한번 해 봅시다!

ls 명령어를 입력해봅시다. ls 명령어를 통해 어떤 파일이 설치되어 있는지 확인해 볼 수 있습니다.

.

할 수 있겠습니다! (확신은 못하겠지만요ㅋㅋㅋ

보니까 mininet, openflow, pox 등의 디렉토리들이 있네요? 해당 디렉토리의 mininet VM image에는 Ubuntu 14.04 ver, pox, mininet 2.2.0 ver, Openflow plug in이 포함된 wireshark가 설치되어 있고, Openflow Controller인 pox도 있습니다! 이정도면 우리가 제대로 가상 환경을 잘 만들었다고 할 수 있겠습니다! (확신은 못하겠지만요ㅋㅋㅋ)

.

가상 환경을 잘 만들었으니 VirtualBox를 세팅을 해서 우리가 이 툴에 대해서 좀 더 익숙해지도록 합시당!

.

실행중인 tutorial은 잠시 종료하도록 하겠습니다.

[머신]->[닫기]->[시스템 전원끄기] 눌러주시면 되겠습니다.

다시 관리자 화면으로 오신 후 왼쪽의 Openflow_Tutorial을 클릭하신 다음 설정 버튼을 눌러주세요.

.

.

.

설정을 눌렀더니 경고가 뜨는군요. 무시합시다ㅋㅋㅋ(무시해도 되는지 모르겠어요..)

어쨋든 [확인]버튼 눌러주시면 아래와 같이 뜹니다.

.

.

가상 환경을 구축할 때 처음에 설정했던 것들이 뜹니다!

왼쪽 목록에서 [네트워크]를 클릭 후 아래 사진처럼 [어댑터 2]탭을 수정해주세요!

.

조금 더 힘내서 완성해 봅시다.

이렇게 하시면 설정하실 것은 다 설정하신 겁니다. 이제 [확인]을 눌러주세요!

.

벌써 많이 진행했네요! 거의 다 왔습니다. SSH 접속과 WireShark 실행하는 법만 익히면 OpenFlow를 구현하기 위한 첫 단추를 꿰었다고 볼 수 있습니다.(책에는 그렇게 나와있네욬ㅋㅋ) 조금 더 힘내서 완성해 봅시다.

.

다시 관리자 화면으로 돌아옵시다!

이제 SSH 접속을 시도해 볼텐데요. SSH가 뭔지 모르겠죠? (사실 저도 처음봐서 몰랐습어요..;;) 이럴 때는 네이버에서 찾아봅시다.

.

SSH

[secure shell ]

secure shell의 약어. PGP와 마찬가지로 공개 키 방식의 암호 방식을 사용하여 원격지 시스템에 접근하여 암호화 메시지를 전송할 수 있는 시스템. 따라서 LAN 상에서 다른 시스템에 로그인할 때 스니퍼에 의해서 도청당하는 것을 막을 수 있다.

[네이버 지식백과] SSH [secure shell] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)

출처 링크 : http://terms.naver.com/entry.nhn?docId=837917&cid=50376&categoryId=50376

 

오오오오.. 그렇다네요... 그럼 Putty를 이용하여 SSH로 접속할 수 있겠네요? 한 번 해봅시다. Host PC에서 Guest VM(Openflow_Tutorial)로 SSH 접속을 시도해 보자구요!

.

Openflow_Tutorial VM을 실행하여, 로그인합니다.

(로그인하는 방법은 위에 한 번 보여드렸으므로 생략할게요!ㅎㅎ)

.

로그인을 하신 후에 다음 명령어를 입력해주세요.

($는 입력하지 마세요! 화면상에 있는 거에요.)

.

$ ifconfig -a

.

ifconfig -a는 윈도우에서 ipconfig와 같은 역할을 합니다.

즉, 네트워크 인터페이스 정보를 확인할 수 있는데요, 아래 화면에서 보시다시피 3개의 인터페이스(lo, eth0, eth1)가 존재합니다.

.

 

eth0에는 ip가 있는데 번호가 조금 이상한듯 해요. eth1은.. 없네요?

그럼 이 두개의 인터페이스에 IP주소를 할당해 봅시다.

다음 명령어를 입력해주세요.

.

$ sudo dhclient eth0

$ sudo dhclient eth1

.

 

eth0에는 파일이 있으니 안받은 것이고 eth1은 할당이 되었네요!

eth1의 주소(저의 경우는 192.168.56.102입니다!)를 잘 기억해 둡시다. 일단 가상머신은 끄지 마시고!!

바로 Putty를 실행해주세요! 그 후, 아래 사진에 제가 순서대로 번호를 매겨놨어요!

순서대로 해주시면 됩니다!

1. openflow_tutorial 클릭

2. Load 클릭

3. IP주소 입력(아까 할당받은 eth1의 주소)

4. Save 클릭

5. Open 클릭

.

 

.

이제 open 클릭하시면 SSH 접속이 성공될 것입니..?

.

.

여기서도 로그인을 해야 하나봅니다... 귀찮지만 한번 해봅시다!

똑같이 mininet/mininet를 입력해볼게요!

.

.

성공했네요 ㅎㅎ 좋습니다! 이제 putty에서 한번 명령어를 실행해볼까요?

아까 제가 위에서 ls 명령어를 통해 wireshark가 pre-install되어 있는 것을 확인했습니다. 아, wireshark가 뭐하는 거냐구요? 일단 여기서는 OpenFlow Protocol Message들을 모니터링 할 수 있는 디버깅 툴입니다! 그럼 이제 실행해볼까요? 아래 명령어를 입력해주세요!

.

$ sudo wireshark &

.

 뚜둔....?

.

 

실패..? 왜지..?(그동안 경고창을 무시해서 그런 것인가..?)

이렇게 2차 위기가 봉착했습니다. 하지만 영어를 읽어보죠!....

...(영어해독중)...

.

아.. X server가 실행되지 않았네요?ㅎㅎㅎㅎㅎ 네? X server가 왜 뜬금없이 나오냐구요?.. 에이.. 뜬금없지는 않습니다! 지난 포스팅에서 Xming 다운받으셨죠? 실행시킨 후 다시 해봅시다!

엔터 눌러서 명령어 입력할 수 있는 상태로 만들어놓고 위에 명령어 다시 입력해주세요! 이번엔 성공할겁니다!ㅎㅎ

.

.

오오 성공했네요 ㅎㅎ 왜 성공했지? 의문을 가지실 수 있는데요! 바로 Xming은 가상의 서버를 만들어줍니다. 그리고 가상의 디스플레이를 통해 우리가 눈으로 볼 수 있는 것이구요! 일단 저 앞에 경고문 같은 것은 OK를 눌러줄께요! ㅎㅎ

이제 wireshark가 실행되었습니다.

.

위 목록에서 [capture]->[interface] 메뉴를 클릭합니다.

그 후 아래 화면처럼 [lo]를 찾아 클릭 후 [start]를 눌러주세요!

.

.

누르신 후 fillter 창에 아래와 같이 입력해주세요.

.

of && of.type!=2 && of.type!=3 && !lldp

.

누르신 후 옆에 ▼ 눌러볼께요!

.

.

결과값이 저는 아래와 같이 나오는데 확실히 맞는지는 모르겠습니다! 어쨌든 와이어샤크는 무리 없이 동작이 됩니다!

.

.

오늘 포스팅을 통해서 실습을 하기 위한 프로그램을 다운로드해서 설치해보고, 기본적인 기능을 점검해보기도 하였습니다! 확실히 어려운 감이 있지만 아예 못할 것은 아니라고 봅니다! 어느 정도 연구를 해보면 기간은 촉박하지만 IT 전공자 답게 밤을 몇번 새다 보면(ㅜ-ㅜ) 되겠죠...? 그래도 화이팅 해보겠습니다! 첫 단추를 꿰맨 만큼 잘 되었으면 좋겠네요! 오늘 포스팅은 여기까지 하겠습니다! 감사합니다ㅎㅎ

 

 

 블로거 워누입니다!

저번 포스팅을 통해 SDN에 대한 기본적인 개념을 알게 되었습니다.

("아.. 이런 개념이구나.." 하는 식입니다!)

.

이번 시간에는 직접 설치를 해보고 기본적인 환경을 setting해보는 시간을 가지려 합니다. 일단 제가 지난 포스팅에 올린 "SDN 입문"이라는 책을 참고하여 Openflow_Tutorial 이미지를 다운받고자 하였으나..

.

.

저렇게 빈 공백이 나옵니다.. 아마 사이트 주소가 변경되었거나 이제는 지원하지 않나봅니다! 이렇게 프로젝트를 시작하자마자 1차 위기가 닥쳤네요.. 하하..

그렇다고 포기할 수는 없습니다! 이럴때 필요한건 멘붕하지 않는 정신력과 IT전공자라면 필수인 구글링!! 자, 구글링을 해봅시다!

.

.

오 괜찮은게 몇개 뜨네요? 이 중에서 해답을 찾을 수 있었으면..

근데 예감이 좋습니다..! 네번째 목록에 installing Required Software라고 적혀있습니다!!! 저걸 클릭해봅시다!

.

 

YES!! 할렐루야!!! 와아아아아아아!

역시 구글링은 위대합니다! 여러분은 검색할 필요 없도록 링크 걸어드리겠습니다~

.

https://github.com/mininet/openflow-tutorial/wiki/Installing-Required-Software

.

이 링크를 타고 가시면 저 파일들이 보입니다.

제 컴퓨터는 64bit 운영체제이므로 아래와 같이 다운 받았습니다!

.

.

저 부분들을 클릭하셔서 다운을 받고 압축을 푸시면 됩니다.

그럼 4가지를 받았으니 아래 4가지가 그대로 나오겠죠?

.

.

mininet도 같이 압축을 풀어봅시다. 저는 바탕화면에 따로 설치를 받아보았습니다.

.

 

.

이 과정을 통하여 전체적으로 SDN 구현을 위한 파일들이 모두 설치된거 같네요 ㅎㅎ

아, 위에 걸어드린 링크를 자세히 보니 아래 그림과 같이 구현을 위해 진행되어야 할 단계들이 같이 있네요! 참고하시면 좋을 것 같습니다.

.

 

 

.

저도 이 사이트를 많이 참고 해야겠습니다ㅎㅎ 유용하네요!

그럼 오늘은 여기까지입니다! 안녕~♪

 

 

 

블로거 워누입니다!

현재 제가 다니는 학교에서 진행하는 프로젝트 중 SDN을 구현하는 프로젝트에 참여하게 되었습니다. 간단하게 SDN이 어떻게 동작하는지 실제로 구현하는 게 목적인데요. 한국에선 아직 선보일 만한 예시가 없습니다. 아마 SDN을 제대로 구현해 본다면 저에게 제대로 된 하나의 스펙이 될거 같네요 ㅎㅎ

.

거두절미하고 바로 본론으로 넘어가죠! 이곳엔 그저 프로젝트의 기록을 끄적일 겁니다. 작성한 날 까지의 기록만 남겨놓겠습니다.

.

일단 용어를 알아봅시다. 제가 이 프로젝트를 시작하면서 SDN이 뭘까 하며 용어에 대해서 조사하던 중 주요 키워드 3가지를 발견하였습니다. 바로 SDN과 NFV, 그리고 OpenFlow라는 말입니다. 그럼 일단 이 3가지에 대하여 알아봅시다.

.

SDN은 Software Define Network의 약자로, 소프트웨어 프로그래밍을 통해 네트워크 경로 설정과 제어 및 복잡한 운용 관리를 편리하게 처리할 수 있는 차세대 네트워킹 기술입니다. 이를 위해 SDN에서는 네트워크의 데이터 평면(data plane)과 제어 평면(control plane)을 분리하고 이 사이에 표준화된 인터페이스를 제공하며, 네트워크 운용자가 여러 상황에 맞추어 제어 평면을 프로그래밍하여 데이터 평면에서 이루어지는 통신 기능을 다양한 방식으로 제어할 수 있습니다.

 

[출처 : 네이버 지식백과 - 주요 네트워크 기술 (사물인터넷의 미래, 2014. 11. 28., 한국전자통신연구원(ETRI), 전자신문사)]

.

NFV는 Network Function Virtualization의 약자로 네트워크 기능 가상화라고도 합니다. 통신망 구성에 필요한 하드웨어를 소프트웨어화해서 서버 단에서 구현하는 기술입니다. 세계 주요 통신사들이 사업자 통신망 장비의 기능들을 가상화하여 네트워크의 유연성을 높이므로 하드웨어 장비를 줄일 수 있습니다. 설비투자(CAPEX)와 운용비(OPEX), 설치 면적, 에너지 소비량 등이 줄어드는 효과를 얻을 수 있습니다. 소프트웨어정의네트워킹(SDN) 제어 영역(control plane)의 중앙 집중화와 데이터 센터의 가상화가 융합되고 있습니다.

 

[출처 :네이버 지식백과 - 네트워크 기능 가상화 [Network Function Virtualization, -機能假想化] (IT용어사전, 한국정보통신기술협회)]

.

OpenFlow는 네트워크 장비의 패킷 포워딩(packet forwarding) 기능과 제어(control) 기능을 표준 인터페이스로 분리하여 네트워크 개방성을 제공하는 통신 프로토콜입니다.

사용자 데이터 트래픽에 영향을 주지 않고 네트워크를 통한 가장 알맞은 전송 경로를 정의하여 줍니다. 미국 스탠포드와 UC 버클리 대학에서 약 6년간 공동 연구 결과로 제안한 것으로, 인터넷의 네트워크 제어를 사용자가 소유할 수 있도록 각종 플로우를 정의하고 각각의 플로우가 최적의 전송 경로로 흐를 수 있도록 정의하는 라우팅 프로토콜입니다. OpenFlow는 인터넷 스위치, 라우터 등의 제어 평면(Control Plane)에 탑재될 수 있으며, 소프트웨어 정의 네트워킹(SDN: Software-Defined Networking) 기술에 사용됩니다.

 

[출처 :네이버 지식백과 - Openflow (IT용어사전, 한국정보통신기술협회)]

 

일단 한글로 알아 듣기에는 네이버 백과사전이 제일 적합한 거 같아서 출처를 남기고 가져왔습니다. 저희는 추가적으로 위키백과에 나온 사이트를 해석하고 공부하였습니다. (해당 사이트 주소는 맨 아래에 남겨놓았습니다. )

.

하지만 역시 사람은 글을 백번 읽어봐야 소용 없습니다. 어떻게 되는 것인지 그림이나 구현된 걸 체험해 봐야 합니다.... ㅎ 어쨌든 괜찮아 보이는 그림이 있어서 그걸 먼저 보겠습니다!

 

 

[소프트웨어 정의 네트워크 구조]

[소프트웨어 정의 무선 센서]

[그림 출처 : 네이버 지식백과 - 주요 네트워크 기술(사이트는 아래에 있습니다.)]

.

쉽게 말하면 네트워크 장비의 제어를 하드웨어가 아닌 네트워크로 한다는 이야기 입니다. 그리고 그 중간에서 OpenFlow가 인터페이스를 제공해주는 듯 합니다. 처음 접할 때는 "가능할까? 왜 필요하지 저렇게?" 라고 생각해서 그 부분도 조사를 진행해 보았는데요. 조사를 하면 할수록 "반드시 필요하구나.." 라는 생각으로 바뀌더라구요. 왜 SDN이 주목할 만한 기술이며 왜 탄생해야 했는가를 간단하게 중요한 것들만 요약하자면,

1. 모바일 기기 급증, 클라우드 기반 가상화 서비스 등장으로 인한 트래픽 패턴 변화.

2. 통신 환경의 급격한 변화

3. 3-4년 정도에 이르는 네트워크 장비 제품 수명 주기

이 세가지 입니다. 저 세가지가 과거에는 전~~혀 문제가 되지 않았으나, 현재 기술은 빠르게 발전하는데 반해, 처리할 수 있는 용량이나 속도에 한계가 있는 것이었습니다. 게다가 하드웨어 장비는 수명이 길어봐야 4년 정도라고 하니 한 번 샀다가 기술이 변하면 기존의 장비를 버릴 수밖에 없다는 경제적인 문제도 발생을 하다 보니 하드웨어 장비로만 네트워크를 다루기에는 너무 힘들었던 것입니다.

.

이런 환경 변화와 시장의 요구가 결국 SDN을 탄생시켰습니다. SDN은 소프트웨어 프로그래밍으로 네트워크 경로 설정이나 제어, 운용 관리 등을 처리할 수 있습니다. 소프트웨어로 네트워크를 제어하게 됨으로서 위의 3가지 문제점을 단박에 해결할 수 있게 되었습니다.

.

SDN을 구현하려면 OpenFlow를 잘 활용해야 합니다. 위에서 말했듯 SDN의 구성요소이자 각 네트워킹 명령어를 원활하게 주고 받을 수 있는 개방형 인터페이스를 만들 수 있는 하나의 표준 인터페이스이기 때문입니다! 즉 OpenFlow는, 외부에 있는 소프트웨어와 네트워크 장비에 직접 접속해 조작할 수 있게 도와주는 SDN의 핵심 기술이라고 보시면 됩니다.

.

이제 이걸 어떻게 구현할 까 하며 참고 서적을 둘러보던 중 'SDN 입문'이라는 책을 알게 되었습니다. 서영석, 이미주 님의 저서이며, 외국인 저자들의 책을 해석해 놓은 다른 책들보다 확실히 한국인의 글로 쓰여진 책이라 이해 자체는 조금 더 쉬운 듯 합니다. 아래에 자세한 정보 남기겠습니다. 

.

오늘은 일단 여기까지 하겠습니다. 글로 주구장창 쓰는 것보다야 어느 정도 진행해서 뭔가 설치하고 뚝딱 만들어 봐야 여러분도, 저도 이해가 쉬울 것 같습니다. 그럼 이만 글을 줄이겠습니다! 다음에 봅시다!

 

[참고 서적]

[참고 사이트]

네이버 지식백과 - 주요 네트워크 기술

http://terms.naver.com/entry.nhn?docId=2851199&cid=56756&categoryId=56756

위키피디아 - SDN

https://en.wikipedia.org/wiki/Software-defined_networking

+ Recent posts