Mininet 설치 및 사용 방법

소개



Mininet는 단말 상에 가상 SDN (Software Defined Network), 즉 호스트와 스위치로 구성된 논리 네트워크를 간이적으로 구축 할 수 있으며, SDN의 동작 검증에 사용할 수있다. 본고에서는, Mininet의 인스톨 방법과 사용 방법을 정리한다.

설치 방법



공식 페이지에는, 설치된 가상 머신을 이용하는 방법이나 패키지 인스톨을 하는 방법 등이 기재되어 있지만, 여기에서는 소스 코드로부터 인스톨 하는 방법을 기재한다. Ubuntu 16.04 데스크톱 버전에서 작동 확인되었습니다.

우선은 GitHub로부터 소스 코드를 입수한다.
# mininetのリポジトリをクローン
$ git clone git://github.com/mininet/mininet
Cloning into 'mininet'...
remote: Counting objects: 9295, done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 9295 (delta 130), reused 186 (delta 126), pack-reused 9093
Receiving objects: 100% (9295/9295), 2.93 MiB | 1.35 MiB/s, done.
Resolving deltas: 100% (6133/6133), done.
Checking connectivity... done.

사용 가능한 Mininet 버전을 확인합니다. 여기서는 2.2.2를 사용한다.
$ cd mininet

# タグ一覧の表示
$ git tag
1.0.0
2.0.0
2.1.0
2.1.0p1
2.1.0p2
2.2.0
2.2.1
2.2.2
2.2.2rc1
cs244-spring-2012-final

# 指定のタグからブランチを作成
$ git checkout -b 2.2.2 2.2.2
Switched to a new branch '2.2.2'

Mininet은 설치용 스크립트install.sh를 제공합니다.
# スクリプトの実行
$ util/install.sh
Detected Linux distribution: Ubuntu 16.04 xenial amd64
Ubuntu
Installing all packages except for -eix (doxypy, ivs, nox-classic)...
Install Mininet-compatible kernel if necessary
~~~ (省略) ~~~
Enjoy Mininet!

이것으로 인스톨이 완료되었으므로, 동작 확인을 한다.
# mininetのバージョンを確認
$ sudo mn --version
2.2.2

# 動作テスト(ping)を実施
$ sudo mn --test pingall
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 
*** Adding switches:
s1 
*** Adding links:
(h1, s1) (h2, s1) 
*** Configuring hosts
h1 h2 
*** Starting controller
c0 
*** Starting 1 switches
s1 ...
*** Waiting for switches to connect
s1 
*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 0% dropped (2/2 received)
*** Stopping 1 controllers
c0 
*** Stopping 2 links
..
*** Stopping 1 switches
s1 
*** Stopping 2 hosts
h1 h2 
*** Done
completed in 5.425 seconds

무사 설치와 동작 확인이 종료되었다.

Wireshark



OpenFlow의 동작을 확인하기 위해 패킷 캡처 도구인 Wireshark를 사용합니다.
Mininet 2.2.2에서는 install.sh에서 Wireshark도 설치할 수 있지만 몇 가지 설정이 오래되었으므로 다음과 같이 변경합니다.

루트 권한 실행시 Warning이 나올 때

여기 참조.
$ sudo dpkg-reconfigure wireshark-common
# 非rootユーザにwireshark実行権限を与えるか → yes

# ユーザをwiresharkグループに追加
$ sudo gpasswd -a [username] wireshark

Wireshark의 colorfilters 변경
install.sh에서 cp -n $MININET_DIR/mininet/util/colorfilters $HOME/.wireshark를 실행하고 있지만 colorfilters 설정이 오래되었고 Wireshark에서 Warning이 나옵니다.
13:25:05          Warn Could not compile "of" in colorfilters file "/home/user/.wireshark/colorfilters".
"of" is neither a field nor a protocol name.
13:25:05          Warn Could not compile "Checksum Errors" in colorfilters file "/home/user/.wireshark/colorfilters".
Neither "cdp.checksum_bad" nor "1" are field or protocol names.

그래서 잠정적으로 다음과 같은 변경을 한다.

~/.wireshark/colorfilters
- @of@of@[0,5,65535][65535,65535,65535]
+ @openflow@openflow@[0,5,65535][65535,65535,65535]

Checksum Errors가 출현하지만 동작 자체에는 영향이 없다.

OS 재부팅 후 Wireshark 시작
$ wireshark &
# filterにopenflow_v1、監視インターフェースをloopbackとする。

사용방법



Mininet의 네트워크 구축 방법을 설명한다.
커맨드 라인으로부터 네트워크를 구축하는 방법과 API를 통해 구축하는 방법의 2 종류가 있다.

명령줄


$ sudo mn [オプション]에서 실행합니다.
옵션에 아무것도 지정하지 않으면 최소 구성 네트워크 (하나의 OpenFlow 스위치 및 컨트롤러, 두 호스트)


명령
기능


nodes
노드 목록 표시

net
링크 목록 표시

덤프
노드 세부 정보 보기

[호스트] ifconfig -a
[호스트] 인터페이스 정보 표시

[호스트1] ping [옵션] [호스트2]
[호스트1]에서 [호스트2]로 핑

pingall
모든 호스트에 ping



구성



h1 → h2로 핑
mininet> h1 ping -c 1 h2



h1 → h2에 대한 HTTP 액세스
mininet> h1 python -m SimpleHTTPServer 80 &
mininet> h2 wget -O - h1
mininet> h1 kill %python

노드 간 소통 테스트
# pingテスト
$ sudo mn --test pingpair

# TCP帯域テスト
$ sudo mn --test iperf

토폴로지 변경
--topo 선택적으로 토폴로지 지정
# 1つのスイッチに3台のホストが接続
$ sudo mn --test pingall --topo single,3

# 1つのスイッチに1台のホストが接続、スイッチがリニアに接続
$ sudo mn --test pingall --topo linear,4

대역 제한
$ sudo mn --link tc,bw=10,delay=10ms

토폴로지 사용자 정의

Python 스크립트를 활용하여 모든 토폴로지를 만들 수 있습니다.
샘플 스크립트가 ~/mininet/custom/에 있습니다.
$ sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall

호스트 및 스위치 터미널 사용
$ sudo mn -x
mininet> xterm [ホスト]

스위치 종류
--switch 선택적으로 스위치 유형을 지정할 수 있습니다.
$ sudo mn --switch ovsk --test iperf


스위치
설명


사용자
user-space switch

ovsk
Open vSwitch (OVS)



링 제어
# リンクダウン
mininet> link s1 h1 down

# リンクアップ
mininet> link s1 h1 up

파이썬 API

좋은 웹페이지 즐겨찾기