2014年3月26日水曜日

気になるSDN関連ニュース A10 Forum 2014開催

A10 Forum 2014が、東京は4月17日(木)13:00~、大阪は4月25日(金)13:00~に開催されます。
内容としては「最新のADC、大規模DDoS攻撃防御、SDN/NFV・IPv6移行」と言う事です。

参加は無料で、事前登録が必要です。
東京は定員が300名なので、興味がある場合は早く申込した方が良いかもです。


◆報道資料
http://www.a10networks.co.jp/eventinfo/2014/a10forum.html
◆関連トピック
http://news.mynavi.jp/news/2014/03/26/063/
http://headlines.yahoo.co.jp/hl?a=20140326-00000019-mycomj-sci

2014年3月22日土曜日

気になるSDN関連ニュース Brocade Vyatta vRouter国内で本格展開開始!?

3月19日にブロケード社とCTC社およびネットワールド社とのBrocade Vyatta vRouterのディストリビュータ契約の締結が発表されました。

Brocade Vyatta vRouterとはルーティング、ファイアウォール、VPNといった機能を備えた仮想ルータです。動作確認の為に評価版を60日無償で試すこともできるみたいです。

今後はCTC社とネットワールド社が国内販売代理店として機能することになり、国内販売を本格化する狙いのようです。
Brocade Vyatta vRouterは、今は主にNFVに注力しているようですが、SDNでの活用も期待されます。

◆報道資料
http://www.brocadejapan.com/news/20140319

◆関連トピック
http://itpro.nikkeibp.co.jp/article/NEWS/20140319/544643/
http://japan.zdnet.com/datacenter/analysis/35045499/
http://prtimes.jp/main/html/rd/p/000000026.000008113.html
http://cloud.watch.impress.co.jp/docs/news/20140320_640506.html
http://businessnetwork.jp/Detail/tabid/65/artid/3334/Default.aspx

2014年3月18日火曜日

OpenFlow Mininetでフローテーブルを確認する方法

Mininetでフローテーブルを確認する方法を調べてみました。

以下のコマンドで表示できます。

dpctl dump-flows
sh ovs-ofctl dump-flows s1

実行すると以下のように表示されます。

mininet@mininet-vm:~$ sudo mn
*** Creating network
(省略)
*** Starting CLI:
mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

まだフローテーブルには何もフロールールが追加されていません。
1回ホスト1(h1)からホスト2にpingを実行してから、フローテーブルを表示します。

mininet> h1 ping -c 1 h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=1.68 ms

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.682/1.682/1.682/0.000 ms
mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=9, priority=0,icmp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=9, priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:2
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=9, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:1
 cookie=0x0, duration=4.001s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=4, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:1
 cookie=0x0, duration=4s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=4, priority=0,arp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:2
mininet>
mininet>
mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=15, priority=0,icmp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=15, priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:2
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=15, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:1
 cookie=0x0, duration=10.203s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=10, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:1
 cookie=0x0, duration=10.202s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=10, priority=0,arp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:2


他にもIPとポート番号を指定して表示する方法があるようです。

s1 ovs-ofctl dump-flows tcp:127.0.0.1:6634

ただし、前に作ったトポロジー(test_topo.py)でこのコマンドを実行すると以下のようなエラーが出ます。

mininet> s1 ovs-ofctl dump-flows tcp:127.0.0.1:6634
ovs-ofctl: connecting to tcp:127.0.0.1:6634 (Connection refused)

このコマンドで表示するにはトポロジーを少し直して、listenPortの指定をします。

■変更前
net = Mininet()

■変更後
net = Mininet(listenPort=6634)

以上になります。

2014年3月16日日曜日

O3プロジェクトシンポジウムに行ってきました。

3月14日に開催されたO3プロジェクトシンポジウムに行ってきました。

会場は秋葉原から徒歩1~2分位、会場には結構な人数が集まっていました。
何人ぐらいかな?200~300人位?

今までSDNと言えばデータセンターや社内ネットワークなどで活用が主でしたが、このプロジェクトはもっと広域なネットワークにもSDNを活用するための研究のようです。
今回のシンポジウムでは講演、研究報告と展示が行われました。

講演では、ONFのエグゼクディブディレクターのDan Pitt氏の基調講演もあり、聞き慣れないOpenSDNって言葉が出てきました。
Googleで検索しても英語ばかりなので、まだ日本には浸透していないのかもしれません。

そのほか、NECの岩田氏の研究報告、CASLの三上氏の講演、パネルディスカッションがありました。

研究成果の展示もされていたので見てきました。
OpenvSwitchより高速なソフトウェアスイッチの展示や、OpenFlowを拡張して光コアネットワークの制御をする技術など、8個のブースで展示がされていました。

今後、広域ネットワークにもSDNが使われてSDNが身近なものになり、当たり前の技術になるかもしれません。
あとはSDNがガラパゴスにならないことを祈るばかり。

2014年3月13日木曜日

OpenFlow Mininetのトポロジーをカスタマイズしてみる4

前回の続きで、別のゲストOS上で動いているOpenFlowコントローラに接続してみます。

まずは環境の説明です。

OpenFlowコントローラを動かすゲストOSをサーバ1とします。
IPアドレスは「192.168.56.10」です。

Mininetを動かすゲストOSをサーバ2とします。
IPアドレスは「192.168.56.20」とします。

まずはサーバ1でOpenFlowコントローラを起動します。
起動するプログラムは、ここではTremaのサンプルプログラムから「repeater_hub」を使用します。

まずは以下のコマンドでコントローラを起動します。

trema run ./repeater-hub.rb

サンプルプログラムをログインディレクトリ等にコピーしてから実行したほうが良いかもしれません。

実行すると以下のように表示されます。

$ trema run repeater-hub.rb


次にサーバ2でMininetを実行します。

sudo python ./topo_test.py

実行したら確認してみます。

~$ sudo python ./topo_test.py
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0
c1
mininet> dump
<Host h1: h1-eth0:192.168.100.1 pid=1852>
<Host h2: h2-eth0:192.168.100.2 pid=1853>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=1845>
<RemoteController c1: 192.168.56.10:6653 pid=1838>
mininet> ping all
*** Unknown command: ping all
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
mininet>
mininet> h1 ping -c3 h2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_req=1 ttl=64 time=3.22 ms
64 bytes from 192.168.100.2: icmp_req=2 ttl=64 time=0.093 ms
64 bytes from 192.168.100.2: icmp_req=3 ttl=64 time=0.109 ms

--- 192.168.100.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.093/1.143/3.229/1.475 ms
mininet>
mininet> h2 ping -c3 h1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_req=1 ttl=64 time=0.672 ms
64 bytes from 192.168.100.1: icmp_req=2 ttl=64 time=0.106 ms
64 bytes from 192.168.100.1: icmp_req=3 ttl=64 time=0.089 ms

--- 192.168.100.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.089/0.289/0.672/0.270 ms
mininet> exit

コントローラと接続できて、仮想ホスト1(h1)と仮想ホスト2(h2)で通信ができました。

今回は以上になります。

2014年3月12日水曜日

OpenFlow Mininetのトポロジーをカスタマイズしてみる3

今回はMininetのトポロジーを変更して、Mininetを動かすゲストOSとは別のゲストOS上で動いているOpenFlowコントローラにつないでみます。

別のゲストOS上のコントローラに接続するためには、RemotoControllerクラスを使えるようにしなければいけません。
まずは以下の宣言をファイルの先頭部分に追加します。

from mininet.node import RemoteController

次にコントローラを追加する処理を変更します。
変更前は以下のようになっています。

    c1 = net.addController('c1')

コントローラを追加する時に、コントローラが起動しているサーバとポート番号を指定します。
ここではコントローラが起動しているサーバは192.168.56.10、コントローラの待ち受けポートは6653を指定しています。

    c1 = net.addController('c1',controller=RemoteController,ip='192.168.56.10',port=6653)


変更後のトポロジーは以下のようになります。

(topo_test.py)
#!/usr/bin/env python

from mininet.net import Mininet
from mininet.cli import CLI
from mininet.link import Link
from mininet.node import RemoteController

if '__main__' == __name__:

    net = Mininet()

    c1 = net.addController('c1',controller=RemoteController,ip='192.168.56.10',p
ort=6653)
    s1 = net.addSwitch('s1')
    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')

    #Link( h1, s1)
    #Link( h2, s1)
    h1.linkTo(s1)
    h2.linkTo(s1)

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


次回は実行してコントローラに接続してみます。

2014年3月11日火曜日

気になるSDN関連ニュース O3プロジェクトシンポジウム開催(2014年3月14日)

O3プロジェクトシンポジウムが、3月14日に東京 秋葉原で開催されます。

O3プロジェクトとは、SDNを広域ネットワークに適用する研究開発のようです。
このようなプロジェクトがあったことを初めて知りました。

展示やデモンストレーションの他、研究発表、基調講演があります。
ONF(Open Networking Foundation)の偉い人も基調講演に来るようです。

詳しくは以下のURLを参照してください。

◆O3プロジェクト Webサイト
http://www.itevent.jp/o3sympo/index.html

◆関連トピック
http://japan.internet.com/busnews/20140305/4.html
http://jpn.nec.com/press/201309/20130917_01.html

2014年3月8日土曜日

気になるSDN関連ニュース NECとHPがSDNで協業

3月4日にNECとHPがSDNでの協業を発表しました。
今後、企業ネットワークへのSDN利用拡大を見込んだものに思えます。

両者が協業した内容は主に以下があります。
・SDNに対応するアプリケーションの開発環境を広く市場に提供する
・仮想ネットワーク操作のためのAPIの標準化を推進する
・SDNコントローラとSDN対応スイッチの相互接続の強化
・NECの仮想技術「Virtual Tenant Network」とHPのSDNコントローラとの接続性検証

より詳しい内容は以下を参照してください。

◆報道資料
http://jpn.nec.com/press/201403/20140304_01.html
http://www8.hp.com/jp/ja/hp-news/press-release.html?id=1594971


◆関連トピック
http://japan.zdnet.com/datacenter/analysis/35044758/
http://cloud.watch.impress.co.jp/docs/news/20140305_638026.html
http://itpro.nikkeibp.co.jp/article/NEWS/20140304/541115/

2014年3月6日木曜日

OpenFlow Mininetのトポロジーをカスタマイズしてみる2

以前、Mininetのトポロジーのカスタマイズという事で、仮想ホストのIPアドレスの割り当てをしました。
今回は仮想ホストのmacアドレスを任意のmacアドレスにしてみたいと思います。

Mininetのトポロジーで仮想ホストのIPアドレスを指定する場合、ホストの追加を以下のように書きました。

h1 = net.addHost('h1', ip='192.168.2.10/24')

任意のmacアドレスを設定する場合は、この部分の記述を少し変えてあげます。

h1 = net.addHost('h1', mac='aa:aa:aa:aa:aa:01', ip='192.168.2.10/24')

この例は仮想ホスト「h1」は、macアドレスが「aa:aa:aa:aa:aa:01」でIPアドレスが「192.168.2.10」のインターフェイスが設定されることになります。

以前作ったトポロジーにmacアドレスの設定を追加してみます。
ホスト1のmacアドレスは「aa:aa:aa:aa:aa:01」を設定します。
ホスト2のmacアドレスは「aa:aa:aa:aa:aa:02」を設定します。

(topo_test.py)
#!/usr/bin/env python

from mininet.net import Mininet
from mininet.cli import CLI
from mininet.link import Link

if '__main__' == __name__:

    net = Mininet()

    c1 = net.addController('c1')
    s1 = net.addSwitch('s1')
    h1 = net.addHost('h1', mac='aa:aa:aa:aa:aa:01',ip='192.168.100.1/24')
    h2 = net.addHost('h2', mac='aa:aa:aa:aa:aa:02',ip='192.168.100.2/24')

    #Link( h1, s1)
    #Link( h2, s1)
    h1.linkTo(s1)
    h2.linkTo(s1)

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

このようになります。
気を付けるのは、macアドレスの先頭から8bit目は0にする事です。
I/Gビットにあたる部分のようです。

参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20070829/280708/

あと、ネットワーク接続の記述の部分で、別の記述方法があるみたいなのでを少し変えてみました。
こういう書き方もできるみたいです。

    #Link( h1, s1)
    #Link( h2, s1)
    h1.linkTo(s1)
    h2.linkTo(s1)


実行して確認してみます。

$ sudo python topo_test.py
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0
c1
mininet> dump
<Host h1: h1-eth0:192.168.100.1 pid=20973>
<Host h2: h2-eth0:192.168.100.2 pid=20974>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=20966>
<Controller c1: 127.0.0.1:6633 pid=20958>
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
mininet> h1 ifconfig
h1-eth0   Link encap:Ethernet  HWaddr aa:aa:aa:aa:aa:01
          inet addr:192.168.100.1  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a8aa:aaff:feaa:aa01/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:658 (658.0 B)  TX bytes:838 (838.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

mininet> h2 ifconfig
h2-eth0   Link encap:Ethernet  HWaddr aa:aa:aa:aa:aa:02
          inet addr:192.168.100.2  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a8aa:aaff:feaa:aa02/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:658 (658.0 B)  TX bytes:838 (838.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

mininet> exit


ホスト1のmacアドレスが「aa:aa:aa:aa:aa:01」、ホスト2は「aa:aa:aa:aa:aa:02」になりました。

以上です。

2014年3月4日火曜日

trema バージョンアップされています

以前、Ubuntu13.にtremaをインストールしたところ、tremaのバージョンが上がっていました。

インストールしたtremaのバージョンは0.4.6です。
以前インストールしたのは0.3.19でした。

tremaのバージョンアップでは、本体のみならずサンプルプログラムも変更されていたようです。
とりあえず変わっていることに気付いたのはsimple-routerのサンプルコードです。
他にも変わっているサンプルソースがあるかもしれません。

simple-routerのサンプルコードは以前掲載しましたが、個人的に特に変わったと感じたのがrouter-util.rbのソースが無くなってたことです。
router-util.rbはルータの機能を実装するために、ARPとICMPパケットを作るプログラムです。
今のサンプルコードではrouter-util.rbの代わりにpioというモジュールを使っているようです。

pioと言うのは、ARPやICMP、LLDPのパケット作成や、解析をするが簡単にできるライブラリです。

コードのサンプル等は以下のリンク先を参考にして下さい。

https://github.com/trema/pio

このサンプルを見ると、容易にARPやICMPパケットが送れるようです。