VMWare Serverを使ってOpenFlowの環境を作ってみる前回の記事の続き。
大まかな手順で示した、VMのコピーからです。
大まかな手順
- VM作成(前回済み)
- OpenFlowインストール(前回済み)
- VMコピー
- 設定&動作確認
目標とするネットワーク(再掲)
異なるネットワークに接続する3つのHostを一つのSwitchを経由して通信できるようにします。
普通のスイッチングハブならハードウェアでやってしまうので意識することはありませんが、ここではソフトウェアのSwitchをソフトウェアのControllerで制御して、スイッチングハブと同様の動作をさせます。
Host、Switch、Controllerはそれぞれ別のVMで起動し、ControllerとSwitchの間と、HostとSwitchの間は仮想ネットワークで接続します。
ControllerとSwitchのソフトウェアにはOpenFlow付属のものを使用します。
手順(続き)
- VMをコピー
- VMWare Serverが起動するホストOS上のVMのあるディレクトリ(“/var/lib/vmware/Virtual Machines/”)にて、手順2で作成したVMをディレクトリごとコピー
- VM名を変更
- VMWare ServerのWeb Access画面からVirtual Machine – Add Virtual Machine to Inventory を選び、”OpenFlow02″にある”OpenFlow01.vmx”を選択
- コピーしたVMのホスト名を変更
- Hostの作成、コピー
- 設定
- 動作確認
今回はSwitchのVMを作成しますが、SwitchのVMは前回(手順2で)作成したControllerのVMをコピーして作成します。
$ sudo cp -r OpenFlow01 OpenFlow02
コピーしたVMの設定ファイル(*.vmx)を編集し、VM名を変える。
$ sudo vi OpenFlow02/OpenFlow01.vmx
OpenFlow01.vmxの
displayName = "OpenFlow01"
を
displayName = "OpenFlow02"
に変更
VMを起動すると、VMをコピーしたかどうか聞かれるので、「コピーしました」を選んでください。
ホスト名を変更するには/etc/hostnameと/etc/hostsを編集して、”OpenFlow01″とある箇所を”OpenFlow02″として、再起動してください。
$ sudo vi /etc/hostname $ sudo vi /etc/hosts $ sudo shutdown -r now
Hostは手順1に従ってUbuntu11.04 desktopのVMを一つ作って、上記手順を参考に作成したVMをコピーして、合計3つのHostを作成してください。
ただし、VMのメモリは512MBでよいです。(VMWare Serverが起動するPCのスペックによりますが、VMのメモリが大きすぎると全部のHostが同時に起動できなくなります。)
なお、HostにOpenFlowをインストールする必要はありません。
すべてのVMをシャットダウンしてから以下の設定をおこなって下さい。
説明のため、仮想ネットワークの名前を仮に以下とします。
仮想ネットワーク名 | Network Adapter |
---|---|
仮想ネットワーク1 | HostOnly |
仮想ネットワーク2 | HostOnly (2) |
仮想ネットワーク3 | HostOnly (3) |
仮想ネットワーク4 | HostOnly (4) |
VMの設定を次のようにしてください。
Role | VM名 | Network Adapter |
---|---|---|
Controller | OpenFlow01 | HostOnly |
Switch | OpenFlow02 | HostOnly |
HostOnly (2) | ||
HostOnly (3) | ||
HostOnly (4) | ||
Host1 | OpenFlowHost1 | HostOnly (2) |
Host2 | OpenFlowHost2 | HostOnly (3) |
Host3 | OpenFlowHost3 | HostOnly (4) |
VMのNetwork Adapterは、VMWare ServerのWeb Access画面からVMを選択し、Summary – Network Adapter を選んで変更してください。
なお、Switchは複数のNetwork Adapterが必要なので、”Add Hardware”でNetwork Adapterを追加する必要があります。
VMWare Serverが動作するホストOS上で、仮想ネットワークに使用するHostOnly接続やNAT接続用のdhcpが起動しているので、killしてください。
$ sudo killall vmnet-dhcpd
dhcpを停止させた後、すべてのVMを起動し、各ネットワークアダプターに次のIPアドレスを設定してください。
Role | VM名 | Network Adapter | IPアドレス |
---|---|---|---|
Controller | OpenFlow01 | HostOnly | 192.168.1.1/24 |
Switch | OpenFlow02 | HostOnly | 192.168.1.2/24 |
HostOnly (2) | no ip address | ||
HostOnly (3) | no ip address | ||
HostOnly (4) | no ip address | ||
Host1 | OpenFlowHost1 | HostOnly (2) | 192.168.2.1/24 |
Host2 | OpenFlowHost2 | HostOnly (3) | 192.168.2.2/24 |
Host3 | OpenFlowHost3 | HostOnly (4) | 192.168.2.3/24 |
IPアドレスを設定した後、ControllerとSwitch間でpingが通ること、いずれのHostからも他のどこにもpingが通らないことを確認してください。
Controllerを起動:OpenFlow01にて以下を実行
$ sudo controller ptcp:6633 -v
Switchを起動:OpenFlow02にて2つの異なるターミナルで以下を実行
$ sudo ofdatapath punix:/var/run/dp0.sock -i eth1,eth2,eth3 -v --no-local-port
$ sudo ofprotocol unix:/var/run/dp0.sock tcp:192.168.1.1:6633 -v --out-of-band
Host間でpingが通ることを確認:OpenFlowHost1にて以下を実行し、Host間でpingが通ることを確認
$ ping 192.168.2.2 $ ping 192.168.2.3
おわりに
最後までお付き合いいただきありがとうございます。
今回は普通のスイッチングハブでできることしかやっていないので、「結局、OpenFlowで何ができるの?」と疑問に思っている方がいらっしゃると思います。
OpenFlowはControllerでパケットの制御が(プログラミングできれば)自由に行えるのが特徴で、Controllerを適切に作ることで、VLAN機能やNAT機能なんかも(たぶん)できます。
が、実際に動いているのを見ないとどんなことができるのかイメージできないと思いますので、次回はこの環境をベースに、なんちゃって負荷分散を行うControllerを作ってみます。