Mininetに物理インタフェースを接続してVXLAN over OpenFlowな環境を作ってみる

前回の検証環境を少し改善したく、Openflowと物理NW(別VMのOVS)を接続しましたので、そのメモです。Attach Physicalなどで検索しましたが、なかなか見つからず・・・。

環境は以下の図の通りです。ODL-Heliumの部分がMininet兼コントローラで構成されています。HUBはコントローラ用のネットワークです。

f:id:komeiy:20141110004948j:plain

ちなみにMininet内の構成は以下の通りです。

f:id:komeiy:20141110002638j:plain

MininetはPythonで書かれているので、読んでパラメータの受け渡し関数を見つけるのが手っ取り早いです。

■ポイント

  • 今回はコントローラにOpenDaylight(Helium)を使用しているので、RemoteControl関数も使用しています。

  • Intfが物理インタフェースをMininet内のスイッチに追加する関数です。

※その他、net.addSwitch、net.addHost、net.addController、linkToコマンドを私用しています。

#!/usr/bin/env python

from mininet.net import Mininet
from mininet.log import setLogLevel, info, error
from mininet.cli import CLI
from mininet.link import Link
from mininet.node import RemoteController
from mininet.link import Intf

if '__main__' == __name__:
    setLogLevel( 'info' )

    net = Mininet()

    c1 = net.addController('c1',controller=RemoteController,ip='127.0.0.1',port=
6633)
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')
    s3 = net.addSwitch('s3')
    s4 = net.addSwitch('s4')
    
    h1 = net.addHost('h1', mac='a4:aa:aa:aa:aa:01',ip='192.168.100.1/24')
    h2 = net.addHost('h2', mac='a5:aa:aa:aa:aa:02',ip='192.168.100.2/24')

    s1.linkTo(s2)
    s1.linkTo(s3)
    s3.linkTo(s4)
    s4.linkTo(s2)

    h1.linkTo(s1)
    h2.linkTo(s2)
    _intf = Intf( 'eth2', node=s1 )
    _intf = Intf( 'eth3', node=s2 )


    net.start()
    CLI(net)
    net.stop()

上記コマンドをpythonで起動するとs1にeth2、s2にeth3を追加してMininetを起動します。

mininet> net
h1
h2
s1 lo:  s1-eth1:s2-eth1 s1-eth2:s3-eth1 eth2: 
s2 lo:  s2-eth1:s1-eth1 s2-eth2:s4-eth2 eth3: 
s3 lo:  s3-eth1:s1-eth2 s3-eth2:s4-eth1
s4 lo:  s4-eth1:s3-eth2 s4-eth2:s2-eth2

eth2とeth3にはそれぞれOVSがインストールされたOpenvswitchが接続されており、前回と同様にOpenvswitch同士でVXLANで接続(今回はVXLAN over openflow)をしています。

PC1(192.168.0.1) -> PC2(192.168.0.2)の通信をVXLANでカプセル化しています。s2とs3でキャプチャした結果が以下の通りです。OpendaylightのSimpleForwardで最短ホップのS1とS2を通過しています。

mininet@mininet-vm:~\> sudo tcpdump -i s2-eth1
tcpdump: WARNING: s2-eth1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on s2-eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
04:36:29.901377 IP 172.16.100.2.59569 > 172.16.100.1.4789: UDP, length 114
04:36:29.914815 IP 172.16.100.1.54300 > 172.16.100.2.4789: UDP, length 114


mininet@mininet-vm:~\> sudo tcpdump -i s3-eth1
tcpdump: WARNING: s3-eth1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on s3-eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
04:37:11.047160 LLDP, name openflow:3, length 49
04:37:11.055685 LLDP, name openflow:1, length 49

今回、VXLAN over OpenFlowな環境を作成できました。時間を見つけてOpenDaylightを使って色々やってみたいと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

OpenFlow徹底入門 SDNを実現する技術と知識

OpenFlow徹底入門 SDNを実現する技術と知識

マスタリングTCP/IP OpenFlow編

マスタリングTCP/IP OpenFlow編