Ubuntu12.04.4 LTSでOpen vSwitchをインストールし,設定した.
インストール
1. Ubuntu12.04を普通にインストール
2. apt-get updateでアップデート
3. 以下のコマンドで必要なパッケージをインストール
# apt-get install -y git linux-source kernel-package \
devscripts debhelper libtool autoconf automake \
libssl-dev python-all python-qt4 python-twisted-conch
4. http://openvswitch.org/releases/から,openvswitch-2.1.2.tar.gzをダウンロード
5. tar -xzvf openvswitch-2.1.2で展開
6. linuxカーネルモジュールを作成するため,以下のオプションを付けてconfigure
>./configure –with-linux=/lib/modules/uname -r
/build
>make
>make install
7. コンパイルしたディレクトリから,以下のモジュールができていることを確認
>ls -la ./datapath/linux/openvswitch.ko
8. モジュールをインストール
# make module_install
“Can’t read private key”とか言われるが気にしない.
9. lsmodでopenvswitchがインストールされているかどうか確認
#lsmod | grep open
設定
動かすためには,データベースを作成し,serverを起動する必要があるので,まずはそれをやる.
1. データベースの作成
# mkdir -p /usr/local/etc/openvswitch
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
この実行は,コンパイルしたディレクトリで行うこと.vswitch.ovsschemaというのがDBのスキーマなので,それを指定しないといけない
2. DBにアクセスするためのサーバの起動.やたら長いオプションをつけて起動しなければいけない(INSTALLに書いてあるのをそのままやればいい).
# ovsdb-server –remote=punix:/usr/local/var/run/openvswitch/db.sock \
–remote=db:Open_vSwitch,manager_options \
–private-key=db:SSL,private_key \
–certificate=db:SSL,certificate \
–bootstrap-ca-cert=db:SSL,ca_cert \
–pidfile –detach
3. データベースの初期化.これは1度やればいいらしい
# ovs-vsctl –no-wait init
4. メインサーバを起動
# ovs-vswitchd –pidfile –detach
これで起動したはず.
ネットワークの設定
いまいちOpen vSwitchの概念がわからなかったが,やっと分かった.FreeBSDでVlanを作るときの概念に似ている.
まず,仮想インタフェースを作り,その仮想インタフェースに物理的なインタフェースをアサインする.そして,その仮想インタフェースがbridgeだったり,vlanだったり色々設定できるようになっているらしい.とりあえず,SDNのHelloWorld的なブリッジインタフェースを作ってみる.
今回は,3つの物理的なインタフェースを全て1つのブリッジインタフェースにアサインする.これは以下のコマンドで行う.
1. ブリッジインタフェースの作成
# ovs-vsctl add-br br0
これでbr0という仮想インタフェースができる.ifconfigで確認できる
# ifconfig br0
br0 Link encap:Ethernet HWaddr fe:b2:9d:a2:84:45
BROADCAST MULTICAST MTU:1500 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)
2. 物理インタフェースを仮想インタフェースにアサインする.
# ovs-vsctl add-port br0 eth0
# ovs-vsctl add-port br0 eth1
# ovs-vsctl add-port br0 eth2
3. 確認する
# ovs-vsctl show
a54365a7-c6a5-43b0-b920-bf56e53f37f5
Bridge “br0″
Port “eth1″
Interface “eth1″
Port “eth2″
Interface “eth2″
Port “br0″
Interface “br0″
type: internal
Port “eth0″
Interface “eth0″
なお,この設定でこのホスト自身にIPを振る場合,仮想インタフェースに対して振らないといけない.
#dhclient br0
要注意
接続実験
以下のような環境で接続実験をしたところ,Mac1からMac2にpingが送信できた.かつ,Mac1もMac2もルータを通じて外部ネットワークに接続できた.つまり,Open vSwitchはブリッジで動作していることがわかる.

補足
上の構成だと,br0とeth1にも192.168.1.xが振られるため,スイッチ自身は外部ネットワークにつながらなかった.よって,物理的なインタフェース(eth0~eth2)にDHCPを使うのをやめたらつながった.インタフェースの設定でinternalのような設定にしたけれど,どうやったか忘れた.