Ubuntu12.04でOpen vSwitchをインストール

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はブリッジで動作していることがわかる.

Screen Shot 2014-06-06 at 21.03.41

補足

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