OpenFlow徹底入門 SDNを実現する技術と知識(馬場 達也 大上 貴之 関山 宜孝 髙畑 知也)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. OpenFlow徹底入門 SDNを実現する技術と知識

OpenFlow徹底入門 SDNを実現する技術と知識





形式:
書籍
発売日:
ISBN:
9784798131771
定価:
3,960(本体3,600円+税10%)
仕様:
B5変・488ページ
カテゴリ:
ネットワーク・サーバ
キーワード:
#ネットワーク・サーバ・セキュリティ,#データ・データベース,#システム運用,#Web・アプリ開発
シリーズ:
徹底入門
紙の書籍

SDNでネットワーク仮想化が変わる

仮想システムの登場によりOSやサーバー機器がソフトウェアとして管理できるようになりましたが、「OpenFlow」は新たに“ネットワークの仮想化”を提供するものです。もともと仮想ネットワーク自体はシステムにはありましたが、これらはそれぞれの機器を設定しなければいけないという点で、実際の機器を操作しているのと変わりません。OpenFlowプロトコルが新しいのはこのような機器の設定変更をサーバーからリモートで実現するため、システム全体のネットワークを一元的に管理することができる点です。

本書はOpenFlowの実装である、クライアントOpen vSwitchとサーバーFloodlightを使ってソフトウェア的にネットワークを扱う本格的な手法を紹介します。本書を通じて、SDN(Software-Defined Networking)を実現するための指針を得ることができます。

1 データセンタネットワークの課題

1.1 データセンタネットワークと仮想化
1.2 従来のネットワーク仮想化技術
 1.2.1 VLAN
 1.2.2 VRF
 1.2.3 仮想ファイアウォール/仮想ロードバランサ
 1.2.4 スタック
 1.2.5 リンクアグリゲーション
1.3 従来のネットワーク制御方法
 1.3.1 TELNET / SSH
 1.3.2 SNMP
 1.3.3 NETCONF
1.4 従来のネットワーク仮想化/制御技術の課題
 1.4.1 VLANで仮想化できるのは最大4094個まで
 1.4.2 ライブマイグレーションに対応できない
 1.4.3 構成の異なるネットワークを仮想化できない
 1.4.4 設定の自動化が難しい
 1.4.5 帯域の増加に対応できない
1.5 既存のネットワーク仮想化/制御技術の課題を解決する技術
 1.5.1 VXLAN/ NVGRE/ STT
 1.5.2 EVB
 1.5.3 バーチャルシャーシ
 1.5.4 TRILL / SPB/ MC-LAG
 1.5.5 仮想アプライアンス
 1.5.6 OpenFlow

2 OpenFlow の概要

2.1 OpenFlowの歴史
 2.2 OpenFlowが注目される理由
 2.2.1 マルチベンダ対応
 2.2.2 柔軟な経路制御が可能
 2.2.3 運用自動化が容易
2.3 OpenFlowの適用領域
2.4 OpenFlowの基本アーキテクチャ
 2.4.1 マッチング処理
 2.4.2 OpenFlowコントローラとOpenFlowスイッチの接続
 2.4.3 OF-Config
 2.4.4 トポロジの発見
2.5 ホップバイホップ方式とエッジオーバーレイ方式
 2.5.1 ホップバイホップ方式
 2.5.2 エッジオーバーレイ方式
2.6 実装方式の違い
 2.6.1 リアクティブ型とプロアクティブ型
 2.6.2 ブロードキャスト/マルチキャストの処理方法の違い
2.7 既存のネットワーク技術における課題の解決
 2.7.1 仮想化できるネットワークの数
 2.7.2 ライブマイグレーションへの対応
 2.7.3 構成の異なるネットワークの仮想化
 2.7.4 仮想化環境の自動化
 2.7.5 帯域の増加への対応
2.8 OpenFlow対応製品

3 SDN(Software-Defined Networking)

3.1 SDNのアーキテクチャ
3.2 SDN実装の変遷
 3.2.1 OpenFlow登場期のSDN
 3.2.2 現在のSDN
 3.2.3 将来のSDN
3.3 ネットワーク技術者の将来

4 Open vSwitch を用いたOpenFlowネットワークの構築

4.1 OpenFlowスイッチとは
 4.1.1 OpenFlowスイッチの特徴
 4.1.2 OpenFlowスイッチの挙動
 4.1.3 OpenFlowスイッチの実装
4.2 動作検証環境の構築
 4.2.1 動作検証環境の全体像
 4.2.2 動作検証環境の構築手順
 4.2.3 Ubuntu Desktop用仮想マシンの作成
 4.2.4 Ubuntu Desktopのインストール
 4.2.5 LANセグメントの作成
 4.2.6 仮想マシンをライブラリから削除
4.3 仮想化ソフトウェアの準備(KVM)
 4.3.1 KVM環境の構成
 4.3.2 VMware Player仮想マシンの複製
 4.3.3 NICの追加と設定
 4.3.4 ホスト名とIPアドレスの設定
 4.3.5 KVMのセットアップ
 4.3.6 libvirtのセットアップ
 4.3.7 virt-managerのセットアップ
 4.3.8 VM(Ubuntu Server)の作成
 4.3.9 Ubuntu Serverのインストール
 4.3.10 VM(Ubuntu Server)の複製
 4.3.11 Ubuntu Serverのホスト名とIPアドレスの設定
4.4 仮想化ソフトウェアの準備(Citrix XenServer)
 4.4.1 XenServer環境の構成
 4.4.2 XenServerのインストール
 4.4.3 XenCenterのセットアップ
 4.4.4 VM(Ubuntu Server)の作成
 4.4.5 VM(Ubuntu Server)の複製
 4.4.6 Ubuntu Serverのホスト名とIPアドレスの設定
4.5 Open vSwitch チュートリアル
 4.5.1 Open vSwitchの概要
 4.5.2 Open vSwitchのインストール(Ubuntu)
 4.5.3 brcompatのセットアップ
 4.5.4 Open vSwitchの起動と停止
 4.5.5 Open vSwitchの基本操作
 4.5.6 Open vSwitchの設定(Ubuntu)
 4.5.7 VMをOpen vSwitchに接続(KVM)
 4.5.8 Open vSwitchの設定(XenServer)
4.6 仮想アプライアンスOpenFlowスイッチの作成
 4.6.1 VMware Player仮想マシンの作成
 4.6.2 Ubuntu Serverのインストール
 4.6.3 Open vSwitchのインストール
 4.6.4 仮想マシンにNICを追加
 4.6.5 Open vSwitchにポートを追加
 4.6.6 仮想マシンをライブラリから削除
 4.6.7 仮想マシンの複製

5 OpenFlow スイッチ入門

5.1 Open vSwitchの仕様
 5.1.1 Open vSwitchの構成要素
 5.1.2 Open vSwitchのモジュール構成
 5.1.3 コマンドラインユーティリティ
 5.1.4 動作モード
5.2 OpenFlowスイッチの構成要素
5.3 OpenFlowスイッチの機能
5.4 フローマッチング
5.5 フローエントリ
 5.5.1 ヘッダフィールド
 5.5.2 カウンタ
 5.5.3 アクション
5.6 フローエントリの追加と削除
 5.6.1 フローエントリ操作の基本的なコマンド
 5.6.2 フローエントリの追加
 5.6.3 直近にマッチしたフローエントリの確認
 5.6.4 統計情報の確認
 5.6.5 フローエントリの削除
5.7 フローエントリの寿命
 5.7.1 フローエントリの生存期間の確認
 5.7.2 生存期間を利用したパケット制御
5.8 パケットの書き換え
 5.8.1 Modify-Fieldアクションによるヘッダの変更
5.9 パケットイン
5.10 パケットアウト
5.11 OpenFlowコントローラへの接続設定
 5.11.1 データパスIDの設定
 5.11.2 OpenFlowコントローラの指定

6 OpenFlow コントローラ入門

6.1 OpenFlowコントローラとは
6.2 フローエントリの追加
 6.2.1 基本的な動作
 6.2.2 実行契機
 6.2.3 通信内容
6.3 パケットアウト
 6.3.1 基本的な動作
 6.3.2 実行契機
 6.3.3 通信内容
6.4 フローエントリとパケットイン・パケットアウトの併用
 6.4.1 一般的な例
 6.4.2 フローエントリとパケットイン・パケットアウトの違い
6.5 OpenFlowコントローラフレームワーク
 6.5.1 NOX
 6.5.2 POX
 6.5.3 Trema
 6.5.4 Beacon
 6.5.5 Ryu
 6.5.6 OpenDayLight
 6.5.7 Floodlight
6.6 Floodlightチュートリアル
 6.6.1 Floodlightとは
 6.6.2 アーキテクチャ
 6.6.3 環境構築
 6.6.4 起動
 6.6.5 OpenFlowスイッチの接続
 6.6.6 フローエントリの追加
 6.6.7 設定変更
 6.6.8 Webインタフェース

7 Floodlight を用いたコントローラの実践

7.1 リピータハブ
 7.1.1 リピータハブの仕組み
 7.1.2 OpenFlowを用いたリピータハブ
 7.1.3 FloodlightのHubモジュール
7.2 MACラーニングスイッチ
 7.2.1 フォワーディングデータベース(FDB)
 7.2.2 MACラーニングスイッチの仕組み
 7.2.3 OpenFlowを用いたMACラーニングスイッチ
 7.2.4 FloodlightのLearningSwitchモジュール
7.3 L2仮想ネットワーク
 7.3.1 L2仮想ネットワークの仕組み
 7.3.2 OpenFlowを用いたL2仮想ネットワーク
 7.3.3 FloodlightのVirtualNetworkFilterモジュール
7.4 リンク検出
 7.4.1 LLDP
 7.4.2 OpenFlowを用いたリンク検出
 7.4.3 FloodlightのLinkDiscoveryManagerモジュール
7.5 ファイアウォール
 7.5.1 ファイアウォールの仕組み
 7.5.2 OpenFlowを用いたファイアウォール
 7.5.3 FloodlightのFirewallモジュール
7.6 ロードバランサ
 7.6.1 ロードバランサの仕組み
 7.6.2 OpenFlowを用いたロードバランサ
 7.6.3 FloodlightのLoadBalancerモジュール

8 OpenFlow プロトコルを見る

8.1 環境構築
 8.1.1 Wiresharkのセットアップ
 8.1.2 WiresharkによるOpenFlowパケットのキャプチャ
8.2 ハンドシェイク
 8.2.1 バージョンの確認
 8.2.2 OpenFlowスイッチ仕様の確認
8.3 パケットイン
8.4 フローエントリの追加とパケットアウト
 8.4.1 Flow Modメッセージ
 8.4.2 Send Packetメッセージ

9 コントローラプログラミング

9.1 仮想L2スイッチによるネットワークスライスの実現
9.2 仮想L2スイッチを開発するための準備
9.3 仮想L2スイッチ─モジュール定義の実装
9.4 仮想L2スイッチ─トラフィック制御の実装
 9.4.1 処理イメージ
 9.4.2 マルチキャストパケットの転送
 9.4.3 ユニキャストパケットの転送
9.5 L2Switchモジュールの動作確認
9.6 仮想的なL3スイッチの実現
9.7 仮想L3スイッチの開発準備
9.8 仮想L3スイッチ─モジュール定義の実装
9.9 仮想L3スイッチ─トラフィック制御の実装
 9.9.1 処理イメージ
 9.9.2 マルチキャストパケットの転送
 9.9.3 ユニキャストパケットの転送
9.10 L3Switchモジュールの動作確認

10 コントローラによるトラフィック制御の活用/運用

10.1 仮想アプライアンスや従来のネットワーク機器の活用
 10.1.1 Vyattaイメージファイルのダウンロード
 10.1.2 Vyattaを動作させるVMの準備
 10.1.3 Vyattaのインストール
 10.1.4 ネットワークインタフェースにIPアドレスを設定
 10.1.5 Vyattaを経由するネットワークの構成
 10.1.6 Vyattaを経由するネットワークの有効化
 10.1.7 Vyattaのファイアウォール機能の有効化
10.2 Open vSwitchを用いたオーバーレイ方式の実現
10.3 OpenFlowネットワークの安定運用
 10.3.1 OpenFlowスイッチの管理
 10.3.2 OpenFlowコントローラの管理
 10.3.3 Flowエントリで構成された転送経路の管理

11 データセンタオーケストレーションの実現

11.1 データセンタオーケストレーションに必要な機能
 11.1.1 仮想マシン管理との連携
 11.1.2 仮想アプライアンスの活用
 11.1.3 レイヤ3スイッチの実現
11.2 Hinemos仮想ネットワーク管理オプションの例
 11.2.1 GUIによる論理ネットワークの設計・構築
 11.2.2 仮想マシン管理との連携
 11.2.3 経路表示
 11.2.4 経路の変更
 11.2.5 OpenFlowによる仮想レイヤ3スイッチの実現
 11.2.6 OpenFlowによる仮想ファイアウォールの実現
 11.2.7 OpenFlowによる仮想ロードバランサの実現

付録

付録A Mininet
A.1 Mininetとは
A.2 Mininetのインストール
A.3 Mininetの起動
A.4 リモートコントローラの指定
A.5 トポロジの変更
A.6 トポロジのカスタマイズ
 A.6.1 本書で扱うトポロジ
A.7 基本操作
 A.7.1 ノードの確認
 A.7.2 リンクの確認
 A.7.3 すべての情報の表示
 A.7.4 ノード上でのコマンド実行
 A.7.5 フローエントリの確認

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2013年11月12日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 222
本文下から4行目以降
次に、kvmにフローエントリを書き込んでみましょう。port=1から入ってきたパケットをすべてドロップするフローエントリを、下記のcurlコマンドにてREST APIを実行して追加します。 kvmvm1からkvmvm2に対して疎通確認
$ curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"flow-mod-1", "priority":"32768", "ingress-port":"1","active":"true", "actions":"output=2"}' http://192.168.24.99:8080/wm/staticflowentrypusher/json
{
    "status" : "Entry pushed"
}
コントローラが書き込んだフローをREST APIで確認してみます。 フローをREST APIで確認
$ curl -X GET http://192.168.24.99:8080/wm/staticflowentrypusher/list/00:00:00:00:00:00:01:00/json
{
    "00:00:00:00:00:00:01:00":{
        "flow-drop":{
            "actions":null,
            "priority":32767,
            "flags":0,
            "bufferId":-1,
            "cookie":45035996273704960,
            "idleTimeout":0,
            "hardTimeout":0,
            "command":0,
            "outPort":-1,
            "match":{
                "dataLayerDestination":"00:00:00:00:00:00",
                "dataLayerSource":"00:00:00:00:00:00",
                "dataLayerType":"0x0000",
                "dataLayerVirtualLan":-1,
                "dataLayerVirtualLanPriorityCodePoint":0,
                "inputPort":1,
                "networkDestination":"0.0.0.0",
                "networkDestinationMaskLen":0,
                "networkProtocol":0,
                "networkSource":"0.0.0.0",
                "networkSourceMaskLen":0,
                "networkTypeOfService":0,
                "transportDestination":0,                
                "transportSource":0,
                "wildcards":4194302
            },
        "type":"FLOW_MOD",
        "length":72,
        "version":1,
        "xid":0,
        "lengthU":72
        }
    }
}
次に、kvmにフローエントリを書き込んでみましょう。 受信したパケットをすべてドロップするフローエントリを、 下記のcurlコマンドにてREST APIを実行して追加します。 フローエントリをREST APIで追加
$ curl -d '{"switch":"00:00:00:00:00:00:01:00", "name":"flow-drop", "priority":"32768", "ingress-port":"", "active":"true", "actions":""}' http://192.168.24.99:8080/wm/staticflowentrypusher/json
{
    "status" : "Entry pushed"
}
コントローラが書き込んだフローをREST APIで確認してみます。 フローをREST APIで確認
$ curl -X GET http://192.168.24.99:8080/wm/staticflowentrypusher/list/00:00:00:00:00:00:01:00/json
{
    "00:00:00:00:00:00:01:00":{
        "flow-drop":{
            "actions":null,
            "priority":-32768,
            "flags":0,
            "bufferId":-1,
            "cookie":45035996273704960,
            "idleTimeout":0,
            "hardTimeout":0,
            "command":0,
            "outPort":-1,
            "match":{
                "dataLayerDestination":"00:00:00:00:00:00",
                "dataLayerSource":"00:00:00:00:00:00",
                "dataLayerType":"0x0000",
                "dataLayerVirtualLan":-1,
                "dataLayerVirtualLanPriorityCodePoint":0,
                "inputPort":0,
                "networkDestination":"0.0.0.0",
                "networkDestinationMaskLen":0,
                "networkProtocol":0,
                "networkSource":"0.0.0.0",
                "networkSourceMaskLen":0,
                "networkTypeOfService":0,
                "transportDestination":0,
                "transportSource":0,
                "wildcards":4194303
            },
        "type":"FLOW_MOD",
        "length":72,
        "version":1,
        "xid":0,
        "lengthU":72
        }
    }
}
2013.11.12
1刷 292
表7.8
URIが「/vm/firewall/rules/json」から始まる1行を削除
2013.11.12

感想・レビュー

ケータ さん

2014-12-20

OpenFlowの基本を説明しながら,仮想環境の設定,OVS(openvswitch)のインストールの仕方まで示してくれているる良著.コントローラとしてはFloodlightが用いられている.