VMWare Serverで、OpenFlowの環境を作ってみた[1/2]

OpenFlowというのに興味があったので、手元のVMWare Serverを使って動作環境を構築してみました。

OpenFlowというのは、簡単にいうと、たくさんのスイッチングハブを一つのコントローラアプリケーション(ソフトウェア)で制御するための仕様です。
普通のユーザにはあまり関係のないものだと思いますが、ネットワークの研究をする方には、いろんなネットワークを構築しやすくなるので、便利なしくみだと思います。
私もかじり始めたばかりで、あまり偉そうに説明できないので詳しくはOpenFlowのサイトを見たり、検索してみてください。

今回は以下のサイトに記載されている手順で環境を作りましたが、OpenFlowが動作するUbuntuは現時点で最新の11.04を使用しました。

動作環境

  • 仮想化テクノロジ
  • Ubuntu10.04上で動作するVMWare Server 2.0.2

  • 仮想マシンのOS
  • Ubuntu11.04 Desktop i386

  • OpenFlow
  • OpenFlow1.1OpenFlow1.0.0

    ※2011/7/13訂正 controllerコマンドやofprotocolコマンドのバージョン表記、openflow.hでOFP_VERSION 0x01と定義されているので、おそらくバージョンは1.0.0です。

目標とするネットワーク

異なるネットワークに接続する3つのHostを一つのSwitchを経由して通信できるようにします。
普通のスイッチングハブならハードウェアでやってしまうので意識することはありませんが、ここではソフトウェアのSwitchをソフトウェアのControllerで制御して、スイッチングハブと同様の動作をさせます。
Host、Switch、Controllerはそれぞれ別のVMで起動し、ControllerとSwitchの間と、HostとSwitchの間は仮想ネットワークで接続します。
ControllerとSwitchのソフトウェアにはOpenFlow付属のものを使用します。

VMで作るOpenFlowネットワーク

VMで作るOpenFlowネットワーク

事前準備

  1. VMWare Serverは事前にセットアップしておいてください。(いや、これが結構苦労したんですけど。)
  2. ※VMに関する操作はすべてVMWare Serverに付属のWeb Accessインタフェースを使用して行います。

  3. VMWare Serverで、外部からパッケージ等をダウンロードするためのブリッジ接続(またはNAT接続)の他に、仮想ネットワークを最低4つ用意する必要があります。
  4. VMWare Serverが動作するホストでvmware-config.plを使って、仮想ネットワークとして”host-only接続”か”NAT接続”をあわせて4つ作ってください。
    作り方は以下のサイトが参考になると思います。

    http://tipspc.blogspot.com/2009/07/vmware-server-x-linux.html

    ※仮想ネットワークのアドレスは使用しないので、とりあえず適当に設定してください。
    なお、今回作るVMのみで使えるネットワークがすでに必要な数ある場合は、新しく作る必要はありません。

  5. Ubuntu11.04 Desktopのisoイメージはダウンロードしておいてください。

大まかな手順

  1. VM作成
  2. OpenFlowインストール
  3. VMコピー
  4. 設定&動作確認

※長くなりますが、お付き合い下さい。

手順

  1. 仮想マシン(Controller用)を作成&OSのインストール
  2. VMWare Server2.0.2のWeb Accessインタフェースより、[Virtual Machine] – [Create Virtual Machine]を実行
    Nameはとりあえず”OpenFlow01″とします。

    VMWareServerによるVMの作成

    VMWareServerによるVMの作成


    OSはUbuntu11.04 desktopを入れます。
    このVMはControllerとして使用しますので、メモリーは上記のサイトに記載されている通り、”1024″MB(1GB)にしてください。
    その他のポイントは以下のとおり。

    • ハードディスクは8GBもあれば十分です。なお、今後同じサイズのVMを他に4つ作りますので、ホストマシンには5*8=40GBの空き容量が必要です。
    • ネットワークアダプターは、外部と接続できるブリッジ接続を選んでください。
    • CD/DVD Driveには、事前準備3で用意したisoイメージを指定してください。
    • “/var/lib/vmware/Virtual Machines/”等のVMイメージを置くディレクトリにisoファイルを置かないと参照できないので、注意。

    設定が終わったら、VMを起動し、Ubuntuのインストールをおこなって下さい。

  3. OpenFlowをインストール
  4. Ubuntuのインストールが終わったら、以下のサイトを参考にして、作成したVMにOpenFlowをインストールします。

    このサイトに記載されている手順(ほぼそのまま)を以下で詳しく書きます。
    なお、OpenFlowをインストールするVMで、ブリッジ接続を使っても外部と通信できない環境の場合、プロキシ等を使用して外部と通信できるようにしてください。
    Ubuntu 11.04はデスクトップから、System – Preference – Network Proxyでプロキシの設定が可能です。

    • ビルド環境等をインストール
    • $ sudo apt-get update
      $ sudo apt-get -y install ssh
      $ sudo apt-get -y install git-core automake m4 pkg-config libtool
      

      ターミナルから上記コマンドを実行してください。(以下”$”や”#”で始まる行はターミナルへの入力です。”$”がユーザアカウント、”#”がルートアカウントで入力する行です。)

    • corkscrewの設定(プロキシを使う場合)
    • 次にgitでOpenFlowを取得しますが、もしgitをプロキシ経由で使う場合、以下のサイト等を参考にcorkscrewを設定しておいてください。

    • GITでOpenFlowを取得
    • $ git clone git://openflow.org/openflow.git
      $ cd openflow
      $ ./boot.sh
      

      なお、結果として以下のように表示されると思いますが、問題ありません。

      configure.ac:43: installing `build-aux/compile`
      configure.ac:40: installing `build-aux/install-sh`
      configure.ac:40: installing `build-aux/missing`
      Makefile.am: installing `build-aux/depcomp`
      
    • OpenFlowをビルド
    • $ ./configure
      $ make
      $ sudo make install
      
    • 次にWireshark(とOpenFlow用のプラグイン)をインストール
    • $ sudo apt-get -y install wireshark libgtk2.0-dev
      $ cd utilities/wireshark_dissectors/openflow
      $ make
      $ make install
      

      上記のプラグインをインストールする箇所ですが、wiresharkはユーザアカウントで実行するので、”sudo make install”ではなく”make install”してください。

    • Regression Suiteのインストール
    • $ cd ~/openflow
      $ sudo regress/scripts/install_deps.pl
      

      ここで、プロキシを使用している方は、一見正常終了しているように見えて、途中で

      Resolving search.cpan.org... failed: Name or service not known.
      wget: unable to resolve host address `search.cpan.org`
      

      などとエラーメッセージが出力されているかもしれません。

      Perlから呼び出すwgetにプロキシを指定するために以下を実行してください。

      $ cat > ~/.wgetrc <<__EOF__
      http_proxy=$HTTP_PROXY
      __EOF__
      

      これで~/.wgetrcにプロキシを設定できますので、install_deps.plを再度実行してください。
      ※$HTTP_PROXYのところは、環境変数HTTP_PROXYの定義がない場合は適切なプロキシ設定に置き換えてください。

    • IPv6無効化など
    • $ sudo apt-get -y remove avahi-daemon
      $ sudo vi /etc/sysctl.conf
      

      /etc/sysctl.confには以下を追記

      net.ipv6.conf.all.disable_ipv6 = 1
      net.ipv6.conf.default.disable_ipv6 = 1
      
      $ sudo vi /etc/modprobe.d/blacklist.conf
      

      /etc/modprobe.d/blacklist.confには以下を追記

      blacklist net-pf-10
      blacklist ipv6
      
    • 再起動
    • $ sudo shutdown -r now
      
    • 環境変数設定
    • $ cd ~/
      $ cp openflow/regress/scripts/env_vars .
      $ vi env_vars
      

      env_varsにある、OF_ROOTのディレクトリを自分の環境にあったものに修正してください。

    • rootアカウントのパスワードを設定
    • $ sudo passwd root
      
    • インストールの確認
    • $ su
      # source env_vars
      # veth_setup.pl
      # ifconfig
      

      ここで、veth0~7まで作成されていることを確認

      wiresharkでOpenFlowのパケットを解釈することができますが、
      現在セットアップしている環境ではrootでwiresharkを起動できません。
      といって、一般ユーザですとネットワークインタフェースを参照できません。
      そこでひと手間。一般ユーザで起動して、ネットワークインタフェースを見られるようにします。
      参照:http://www35.atwiki.jp/futoyama/pages/83.html

      # setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
      

      を実行した後、ユーザ権限でwiresharkを起動(デスクトップのメニューから起動)。

      wiresharkのFilter欄に、

      of || tcp.flags.reset == 1
      

      を入力し、
      Capture -> Interfacesを開き、"lo"(ループバック)をStartしてください。
      ターミナルからルート権限で、

      # of_user_veth_test.pl
      

      を実行し、wireshark上にopenflowのパケットが表示されればOpenFlowのインストール成功です。

  5. VMをコピー
  6. 後半へ続く…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*