OpenFlow

このモジュールでは、デバイスで OpenFlow を有効化して設定する方法について説明します。

OpenFlow の前提条件

デバイスを OpenFlow モードで起動する必要があります。

OpenFlow モードは、スイッチで boot mode openflow コマンドを設定すると有効になります。すべてのポートがこのモードになり、スイッチは通常の Cisco IOS XE 機能をサポートしなくなります。

OpenFlow について

OpenFlow の概要

OpenFlow は Open Networking Foundation(ONF)の仕様で、フローベースの転送インフラストラクチャと、標準化されたアプリケーション プログラム インターフェイスを定義します。OpenFlow では、セキュアなチャネルを介して、デバイスのフォワーディング機能を方向付けすることができます。

OpenFlow は、コントローラ(コントロール プレーン)とイーサネット スイッチ(データ)プレーン)の間のプロトコルです。スイッチ/デバイスには、パイプラインに配置されたフロー テーブルがあります。フローとは、これらのテーブルに到達するパケットを調べるためのルールです。

スイッチ上の OpenFlow エージェントは、OpenFlow プロトコルを使用してコントローラと通信します。エージェントは、OpenFlow 1.0(有線プロトコル 0x1)と OpenFlow 1.3(有線プロトコル 0x4)の両方をサポートしています。エージェントは最大 8 つのコントローラ接続を持つことができます。これらの接続はスイッチオーバー後は維持されず、コントローラはエージェントに再接続する必要があります。

Cisco Catalyst 9400 シリーズ スイッチでの OpenFlow の実装はステートレスです。ノンストップ フォワーディング(NSF)はサポートされていません。スタンバイのスーパーバイザは、フロー データベースと同期しません。

Openflow コントローラ

Openflow コントローラは、Openflow プロトコルを使用して Openflow スイッチとやり取りするエンティティです。ほとんどの場合、コントローラは多数の Openflow 論理スイッチを管理するソフトウェアです。コントローラではネットワークを一元的に表示でき、管理者はこれを使用して、ネットワーク トラフィックの処理方法について基盤となるシステム(スイッチおよびルータ)に指示を出すことができます。通常、コントローラは Linux サーバで実行され、OpenFlow 対応スイッチに IP 接続できる必要があります。

コントローラはスイッチを管理し、スイッチ上でフローを挿入および削除します。これらのフローは、OpenFlow 1.3 および 1.0 の「照合」と「アクション」の基準のサブセットをサポートしています。

スイッチは、管理ポートを使用してコントローラに接続します。管理ポートは管理用の Virtual Routing and Forwarding(VRF)インスタンスの中にあり、そのためコントローラへのセキュアな接続を提供します。コントローラをスイッチに接続するには、コントローラへの到達が可能な IP アドレスとポート番号を設定します。

OpenFlow テーブル パイプライン

OpenFlow テーブル機能要求メッセージを使用すると、OpenFlow コントローラから、OpenFlow が管理するデバイスについて既存のフロー テーブルの機能を照会したり、指定した設定と一致するようにこれらのテーブルを設定したりできます。

テーブルはすべて、照合およびアクション機能のサブセットを使用して設定できます。テーブルのサイズを実行時に変更することもできます。新しいフロー テーブル設定が正常に適用されると、古いフロー テーブルのフロー エントリが通知なく削除されます。動的に設定されたフロー テーブルは、再起動後は維持されません。デバイスが起動するとデフォルトのパイプラインが起動します。

OpenFlow コントローラからの要求に基づいて新しいフロー テーブルを設定している間、既存のフローを流れる進行中のトラフィックはすべてドロップされます。

フローの管理

フロー エントリは、パケットの照合と処理に使用されるフロー テーブル内の要素です。これには、照合設定の優先順位、パケットを照合するための一連の照合フィールド、適用する一連の命令、パケット カウンタ、およびバイト カウンタが含まれています。また、フローごとにタイムアウト(ハード タイムアウトまたは非アクティブ タイムアウト)も関連付けられており、フローの自動削除に使用されます。

Cisco Catalyst 9000 シリーズ スイッチは最大 9 個のフロー テーブルをサポートしています。

各フローは次の情報を提供します。

  • 優先順位:優先順位の高いフローが先に照合されます。フローの更新では、設定された優先順位に基づいて、すべてのフローに優先順位を付ける必要があります。

  • 照合フィールド:パケットを照合する際のフロー エントリの一部。照合フィールドは、さまざまなパケット ヘッダー フィールドと照合できます。フィールドに照合情報が指定されていない場合は、ワイルドカードが使用されます。

  • アクション:パケットに対して作用する操作。

フローの操作

ここでは、フローが OpenFlow デバイスでプログラムされるようにコントローラから送信されるときに実行される操作について説明します。

デバイスには、パイプラインに配置されたフロー テーブルがあります。パイプライン機能情報は、パイプラインの構造を指定します。たとえば、テーブル/ステージの数、各ステージが実行できる機能(照合/アクション)、各テーブルのサイズなどがあります。

コントローラがフロー要求を送信すると、OpenFlow エージェントは、ハードウェアがフローを処理できるかどうかを確認します。エージェントは、スイッチの起動時に定義されるハードウェアの機能とフローとを比較します。フローが有効であれば、該当するフロー テーブルにプログラムされます。

新しいパイプラインが検証された場合(ハードウェアがパイプラインをサポートできるかどうか)、そのパイプラインは、フローをインストールできるかどうかのチェックに使用される新しい機能セットになります。

パイプラインがインスタンス化され、フローがインストールされると、パケットがスイッチから転送されます。優先順位の最も高い、一致するフロー エントリが見つかるまで、入力パケットが各フロー テーブル内のフローと照合されます。パケットの照合は、完全一致の場合もあれば(テーブルのすべてのフィールドが正確に一致する)、部分一致の場合もあります(一部または全部のフィールドに一致し、ビット マスクを持つフィールドが部分的に一致する場合がある)。設定されたアクションに基づいて、パケットが変更されるか転送される場合があります。アクションは、パイプライン内でいつでも適用できます。アクションによって、次の照合対象のフロー テーブル、パケットの出力ポートのセット、およびパケットをコントローラにルーティングするかどうかが決まる場合があります。

サポートされている OpenFlow 操作

OpenFlow 1.3 の次のテーブル、照合、および操作がサポートされています。

表 1. サポートされている OpenFlow 操作

テーブル

テーブル名

照合フィールド

オペレーション

0

PORT_ACL

該当なし

ユーザが指定したアクセスコントロールリスト(ACL)をポートに適用し、次のテーブルに送信します。

1

VLAN

in_port

vlan_vid

eth_src

eth_dst

eth_type

  • スパニング ツリー プロトコル(STP)のブリッジ プロトコル データ ユニット(BPDU)をドロップします。

  • Link Layer Discovery Protocol(LLDP)パケットをドロップします。

  • ブロードキャスト ソース トラフィックをドロップします。

  • コントローラの MAC アドレスをスプーフィングしている送信元からのトラフィックをドロップします。

  • タグ付きポートの場合、VLAN_VID と照合し、次のテーブルに送信します。

  • タグなしポートの場合、は、ポートのネイティブ VLAN を表す VLAN_VID を持つパケットに VLAN フレームをプッシュし、次のテーブルに送信します。

  • 不明なトラフィックをドロップします。

2

ACL

該当なし

ユーザが指定した ACL をパケットに適用し、次のテーブルに送信します。

3

ETH_SRC

in_port

vlan_vid

eth_src

eth_dst

eth_type

ip_proto

icmpv6_type

ipv6_nd_target

arp_tpa

ipv4_src

  • レイヤ 3 トラフィックを IPv4 または IPv6 転送情報ベース(FIB)テーブルに送信して処理します。

  • メッセージ内のパケットを介して、コントローラ宛てのトラフィックを送信します。

  • 学習した送信元 MAC アドレスを ETH_DST に送信します。

    • パケットを介して、不明なトラフィックをコントローラに送信します(学習のため)。

    • ETH_DST テーブルに送信します。

4

IPv4_FIB

vlan_vid

eth_type

ip_proto

ipv4_src

ipv4_dst

  • 各ルートのネクストホップに IP トラフィックをルーティングします。

  • コントローラの MAC アドレスに ETH_SRC を設定します。

  • ETH_DST をネクストホップの解決済み MAC アドレスに設定します。

  • 存続可能時間(TTL)を減らします。

  • ETH_DST テーブルに送信します。

  • 不明なトラフィックをドロップします。

5

IPv6_FIB

vlan_vid

eth_type

ip_proto

icmpv6_type

ipv6_dst

  • 学習した各ルートのネクストホップに IP トラフィックをルーティングします。

  • コントローラの MAC アドレスに ETH_SRC を設定します。

  • ETH_DST をネクストホップの解決済み MAC アドレスに設定します。

  • TTL を減らします。

  • ETH_DST テーブルに送信します。

  • 不明なトラフィックをドロップします。

6

ETH_DST

該当なし

コントローラにトラフィックを送信します。

7

ETH_DST

vlan_vid

eth_dst

  • 学習した宛先 MAC アドレスのホストに出力パケットを送信します。

  • 不明なトラフィックを FLOOD テーブルに送信します。

8

FLOOD

in_port

vlan_vid

eth_dst

  • VLAN 内のブロードキャストをフラッディングします。

  • VLAN 内のマルチキャストをフラッディングします。

  • VLAN 内の不明なトラフィックをフラッディングします。

OpenFlow の設定方法

デバイスでの OpenFlow モードの有効化

スイッチが通常モードで動作している場合は、以前の設定を削除するように write erase コマンドを設定することをお勧めします。

手順の概要

  1. enable
  2. configure terminal
  3. boot mode openflow
  4. exit
  5. write erase
  6. reload
  7. enable
  8. show boot mode

手順の詳細

  コマンドまたはアクション 目的
ステップ 1

enable

例:

Device> enable

特権 EXEC モードをイネーブルにします。

  • パスワードを入力します(要求された場合)。

ステップ 2

configure terminal

例:

Device# configure terminal

グローバル コンフィギュレーション モードを開始します。

ステップ 3

boot mode openflow

例:

Device(config)# boot mode openflow

OpenFlow 転送モードをイネーブルにします。

ステップ 4

exit

例:

Device(config)# exit

グローバル コンフィギュレーション モードを終了し、特権 EXEC モードを開始します。

ステップ 5

write erase

例:

Device# write erase

NVRAM 内のすべてのファイルを消去します。

  • この操作は、デバイスが以前に通常モードで動作していた場合にお勧めします。

ステップ 6

reload

例:

Device# reload

スイッチをリロードし、スイッチの OpenFlow フォワーディング モードを有効にします。

ステップ 7

enable

例:

Device> enable

特権 EXEC モードをイネーブルにします。

  • パスワードを入力します(要求された場合)。

ステップ 8

show boot mode

例:

Device# show boot mode

デバイスのフォワーディング モードに関する情報を表示します。

次の show boot mode コマンドの出力例は、デバイスが OpenFlow モードであることを示しています。
Device# show boot mode

System initialized in openflow forwarding mode
System configured to boot in openflow forwarding mode

次のタスク

通常モードに戻るには、no boot mode openflow コマンドを設定して、デバイスをリロードします。

OpenFlow の設定

手順の概要

  1. enable
  2. configure terminal
  3. feature openflow
  4. openflow
  5. switch 1 pipeline 1
  6. controller ipv4 ip-address port port-number vrf vrf-name security {none | tls }
  7. datapath-id ID
  8. tls trustpoint local name remote name
  9. end

手順の詳細

  コマンドまたはアクション 目的
ステップ 1

enable

例:

Device> enable

特権 EXEC モードをイネーブルにします。

  • プロンプトが表示されたら、パスワードを入力します。

ステップ 2

configure terminal

例:

Device# configure terminal 

グローバル コンフィギュレーション モードを開始します。

ステップ 3

feature openflow

例:

Device(config)# feature openflow

OpenFlow 機能をイネーブルにします。

ステップ 4

openflow

例:

Device(config)# openflow

OpenFlow 設定をイネーブルにし、OpenFlow コンフィギュレーション モードを開始します。

ステップ 5

switch 1 pipeline 1

例:

Device(config-openflow)# switch 1 pipeline 1

論理スイッチとパイプラインを設定し、OpenFlow のスイッチ コンフィギュレーション モードを開始します。

ステップ 6

controller ipv4 ip-address port port-number vrf vrf-name security {none | tls }

例:

Device(config-openflow-switch)# controller ipv4 10.2.2.2 port 6633 vrf Mgmt-vrf security tls

コントローラに接続します。

  • OpenFlow コントローラの接続セキュリティ オプションとして TLS を設定している場合は、tls trustpoint コマンドを設定する必要があります。

  • OpenFlow コントローラのセキュリティ オプションを設定していない場合は、tls trustpoint コマンドを設定する必要はありません。

ステップ 7

datapath-id ID

例:

Device(config-openflow-switch)# datapath-id 0x12345678

(任意)OpenFlow の論理スイッチ ID を設定します。

  • ID 引数にはスイッチ ID を指定します。これは 16 進値です。

ステップ 8

tls trustpoint local name remote name

例:

Device(config-openflow-switch)# tls trustpoint local trustpoint1 remote trustpoint1

(任意)OpenFlow スイッチの Transport Layer Security(TLS)トラストポイントを設定します。

ステップ 9

end

例:

Device(config-openflow-switch)# end

OpenFlow スイッチのコンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

OpenFlow の確認

手順の概要

  1. enable
  2. show openflow hardware capabilities
  3. show openflow switch 1 controller
  4. show openflow switch 1 ports
  5. show openflow switch 1 flows list

手順の詳細


ステップ 1

enable

特権 EXEC モードをイネーブルにします。

  • パスワードを入力します(要求された場合)。

例:

Device> enable
ステップ 2

show openflow hardware capabilities

OpenFlow デバイスのハードウェア機能を表示します。

例:

Device# show openflow hardware capabilities

  Max Interfaces: 1000
  Aggregated Statistics: YES


  Pipeline ID: 1
    Pipeline Max Flows: 2322
    Max Flow Batch Size: 100
    Statistics Max Polling Rate (flows/sec): 10000
    Pipeline Default Statistics Collect Interval: 5

Flow table ID: 0

    Max Flow Batch Size: 100
    Max Flows: 1022
    Bind Subintfs: FALSE
    Primary Table: TRUE
    Table Programmable: TRUE
    Miss Programmable: TRUE
    Number of goto tables: 1
    Goto table id: 1 
    Number of miss goto tables: 1
    Miss Goto table id: 1 
    Stats collection time for full table (sec): 1

!
!
!
ステップ 3

show openflow switch 1 controller

スイッチに接続されているコントローラに関する情報を表示します。

例:

Device# show openflow switch 1 controller

Logical Switch Id: 1
Total Controllers: 1    
Controller: 1    
10.10.23.200:6633    
Protocol: tcp    
VRF: Mgmt-vrf    
Connected: Yes    
Role: Equal    
Negotiated Protocol Version: OpenFlow 1.3    
Last Alive Ping: 2018-06-04 17:59:20 PDT    
state: ACTIVE    
sec_since_connect: 50

ステップ 4

show openflow switch 1 ports

OpenFlow スイッチのポートに関する情報を表示します。

例:

Device# show openflow switch 1 ports
Logical Switch Id: 1
Port    Interface Name   Config-State     Link-State  Features 
   1           Gi1/0/1        PORT_UP        LINK_UP  1GB-FD
   2           Gi1/0/2        PORT_UP        LINK_UP  1GB-FD
   3           Gi1/0/3        PORT_UP        LINK_UP  1GB-FD
   4           Gi1/0/4        PORT_UP        LINK_UP  1GB-FD
   5           Gi1/0/5        PORT_UP      LINK_DOWN  1GB-HD
   6           Gi1/0/6        PORT_UP      LINK_DOWN  1GB-HD
   7           Gi1/0/7        PORT_UP      LINK_DOWN  1GB-HD
   8           Gi1/0/8        PORT_UP      LINK_DOWN  1GB-HD
   9           Gi1/0/9        PORT_UP        LINK_UP  1GB-FD
  10          Gi1/0/10        PORT_UP        LINK_UP  1GB-FD
  11          Gi1/0/11        PORT_UP        LINK_UP  1GB-FD
  12          Gi1/0/12        PORT_UP        LINK_UP  1GB-FD
  13          Gi1/0/13        PORT_UP      LINK_DOWN  1GB-HD
  14          Gi1/0/14        PORT_UP      LINK_DOWN  1GB-HD
  15          Gi1/0/15        PORT_UP      LINK_DOWN  1GB-HD
  16          Gi1/0/16        PORT_UP      LINK_DOWN  1GB-HD
  17          Gi1/0/17        PORT_UP      LINK_DOWN  1GB-HD
  18          Gi1/0/18        PORT_UP      LINK_DOWN  1GB-HD
  19          Gi1/0/19        PORT_UP        LINK_UP  1GB-FD
  20          Gi1/0/20        PORT_UP        LINK_UP  1GB-FD
  21          Gi1/0/21        PORT_UP        LINK_UP  1GB-FD
  22          Gi1/0/22        PORT_UP        LINK_UP  1GB-FD
  23          Gi1/0/23        PORT_UP      LINK_DOWN  1GB-HD
  24          Gi1/0/24        PORT_UP      LINK_DOWN  1GB-HD
  25           Gi1/1/1        PORT_UP      LINK_DOWN  1GB-HD
  26           Gi1/1/2        PORT_UP      LINK_DOWN  1GB-HD
  27           Gi1/1/3        PORT_UP      LINK_DOWN  1GB-HD
  28           Gi1/1/4        PORT_UP      LINK_DOWN  1GB-HD
  29           Te1/1/1        PORT_UP      LINK_DOWN  10GB-FD
  30           Te1/1/2        PORT_UP      LINK_DOWN  10GB-FD
  31           Te1/1/3        PORT_UP      LINK_DOWN  10GB-FD
  32           Te1/1/4        PORT_UP      LINK_DOWN  10GB-FD
  33           Te1/1/5        PORT_UP      LINK_DOWN  10GB-FD
  34           Te1/1/6        PORT_UP      LINK_DOWN  10GB-FD
  35           Te1/1/7        PORT_UP      LINK_DOWN  10GB-FD
  36           Te1/1/8        PORT_UP      LINK_DOWN  10GB-FD
  37           Fo1/1/1        PORT_UP      LINK_DOWN  40GB-FD
  38           Fo1/1/2        PORT_UP      LINK_DOWN  40GB-FD
  39          Twe1/1/1        PORT_UP      LINK_DOWN  10GB-FD
  40          Twe1/1/2        PORT_UP      LINK_DOWN  10GB-FD

ステップ 5

show openflow switch 1 flows list

OpenFlow のエントリを表示します。

次の出力例は、テーブル 0 にインストールされているフローを示しています。match any はテーブル 1 に移動します(「match any」とは、すべてのパケットがテーブル 1 に移動するという意味です)。テーブル 1 では、宛先 MAC アドレス 00:00:01:00:00:01 が照合され、出力ポートが 36 に設定されます。

例:

Device# show openflow switch 1 flows list 

Logical Switch Id: 1
Total flows: 8
 
Flow: 1 Match: any Actions: goto_table:1, Priority: 9000, Table: 0, Cookie: 0x1, 
Duration: 2382.117s, Packets: 34443, Bytes: 3359315
 
Flow: 2 Match: any Actions: drop, Priority: 0, Table: 0, Cookie: 0x0, 
Duration: 2382.118s, Packets: 294137, Bytes: 28806211
 
Flow: 3 Match: any Actions: drop, Priority: 0, Table: 1, Cookie: 0x0, 
Duration: 2382.118s, Packets: 34443, Bytes: 3359315
 
Flow: 4 Match: dl_dst=00:00:01:00:00:01 Actions: output:36, Priority: 9000, 
Table: 1, Cookie: 0x1, Duration: 2382.116s, Packets: 0, Bytes: 0
 

OpenFlow の設定例

例:デバイスでの OpenFlow の有効化

Device# configure terminal
Device(config)# boot mode openflow
Device(config)# exit
Device# write erase
Device# reload
Device> enable
Device# show boot mode 

例:OpenFlow の設定

Device# configure terminal
Device(config)# feature openflow
Device(config)# openflow
Device(config-openflow)# switch 1 pipeline 1
Device(config-openflow-switch)# controller ipv4 10.2.2.2 port 6633 vrf Mgmt-vrf security tls
Device(config-openflow-switch)# datapath-id 0x12345678
Device(config-openflow-switch)# tls trustpoint local trustpoint1 remote trustpoint1
Device(config-openflow-switch)# end

OpenFlow に関するその他の参考資料

関連資料

関連項目 マニュアル タイトル

OpenFlow のコマンド

プログラマビリティ コマンド リファレンス

Open Network Foundation

https://www.opennetworking.org/

Faucet OpenFlow コントローラ

MIB

MIB MIB のリンク

選択したプラットフォーム、Cisco IOS リリース、およびフィーチャ セットに関する MIB を探してダウンロードするには、次の URL にある Cisco MIB Locator を使用します。

http://www.cisco.com/go/mibs

シスコのテクニカル サポート

説明 リンク

シスコのサポート Web サイトでは、シスコの製品やテクノロジーに関するトラブルシューティングにお役立ていただけるように、マニュアルやツールをはじめとする豊富なオンライン リソースを提供しています。

お使いの製品のセキュリティ情報や技術情報を入手するために、Cisco Notification Service(Field Notice からアクセス)、Cisco Technical Services Newsletter、Really Simple Syndication(RSS)フィードなどの各種サービスに加入できます。

シスコのサポート Web サイトのツールにアクセスする際は、Cisco.com のユーザ ID およびパスワードが必要です。

http://www.cisco.com/support

OpenFlow の機能情報

次の表に、このモジュールで説明した機能に関するリリース情報を示します。この表は、ソフトウェア リリース トレインで各機能のサポートが導入されたときのソフトウェア リリースだけを示しています。その機能は、特に断りがない限り、それ以降の一連のソフトウェア リリースでもサポートされます。

プラットフォームのサポートおよびシスコ ソフトウェア イメージのサポートに関する情報を検索するには、Cisco Feature Navigator を使用します。Cisco Feature Navigator にアクセスするには、www.cisco.com/go/cfn に移動します。Cisco.com のアカウントは必要ありません。
表 2. OpenFlow の機能情報

機能名

リリース

機能情報

OpenFlow

Cisco IOS XE Fuji 16.9.1

OpenFlow は Software Defined Networking(SDN)の標準規格であり、SDN 環境での通信プロトコルを定義します。これにより、SDN コントローラは、スイッチやルータなどのネットワーク デバイスのフォワーディング プレーンと直接やり取りできるようになります。

この機能は、次のプラットフォームに実装されていました。

  • Catalyst 9300 シリーズ スイッチ

  • Catalyst 9400 シリーズ スイッチ

  • Catalyst 9500 シリーズ スイッチ

  • Catalyst 9500 シリーズ ハイ パフォーマンス スイッチ

Cisco IOS XE ジブラルタル 16.10.1

Catalyst 9500 シリーズ ハイ パフォーマンス スイッチでのテーブル機能メッセージのサポートが導入されました。