SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
お手軽 OpenFlow Traceroute
@atzm
2015/12/12
Tremaday #8
self
• ISP 勤務
– システム/ソフトウェア開発
– ここ最近は OpenFlow とか Overlay とか
– 対外 (趣味?) でもたまにネタがあれば
• Web ブラウザ上で L2 Learning Switch とか
• Linux カーネルの PF_PACKET 周りとか vxlan ドライバとか
• libpcap の Q-in-Q (IEEE 802.1ad) 対応とか
• etc…
著者近影
OpenFlow traceroute
• 欲しかったもの
– ある L2 フレームの本番 flow entries に従った転送経路を調べたい
• ethertype へのマッチ等はよく使うので IP には限定したくない
– OFC での静的解析ではなく,実際にフレームを流す動的解析がしたい
• 条件
– なるべく本番 flow entries に手を入れたくない
• 本番トラフィックが流れてる最中でも使えるのが理想だが…
– なるべく条件を緩くしたい (可搬性)
• 例えば「VLAN ID を 100 個ほどシステム予約します」とか…
• 例えば「システム都合で 10,000 個ほど flow entries 突っ込みます」とか…
– なるべく vendor extensions は使いたくない (可搬性)
– 手軽に実装したい (人間の負荷)
– 手軽に使いたい (人間/機械の負荷)
related works
• アカデミアの偉大な先人達
– Stanford: “ndb” (SDN Debugger)
• flow entries を細工して,経路途中の OFS からデータを PACKET_IN
• OFC で PACKET_IN データを集めて backtrace を生成
– IBM: “SDN Traceroute”
• 経路途中の OFS から PACKET_IN するのは一緒だが,
flow entry に細工せず済むように色々と頑張っている
• 前段で OFS の隣接関係を調査し,更にグラフ彩色問題を解いて,
隣接 OFS が同色にならないようにする
• 隣接 OFS の色の数ほどシステム側で flow entries を追加投入
• 色の数ほど VLAN PCP 値を (全体で) 予約
– 必ずしも PCP である必要はなく,本番で使わないフィールドなら何でも良い
– etc, etc, etc…
survey
• 欲しいものに一番近いのは IBM “SDN Traceroute”
– 前段で OFS の隣接関係 (トポロジ) 検出?
• トポロジ情報がないと traceroute の実施ができない
– グラフ彩色?
• トポロジをグラフに見立てて OFS を色分け
• グラフ彩色問題と言えば NP 困難/完全の代名詞では…
• トポロジが変化するとグラフ彩色やり直しになる
もうひと工夫すれば,グラフ彩色等せずとも実現できるのでは…?
strategy
• 基本構造は既存研究と同じで良い
OFS OFS OFSOFS
OFC
始点を指定して
traceroute 実行命令
Probe マーカに反応して
PACKET_IN 以降繰り返し…
通過した OFS を報告
Probe マーカを付けたフレームを
OFPP_TABLE 指定して
PACKET_OUT
※ もし転送と PACKET_IN を全部 OFS に任せる形にすると,
OFS-OFC 間の遅延状況等次第で報告順が前後してしまう
study
• この場合 traceroute に必要な flow entry とは…
– 基本形は下記だが,何も考えずに投入すると…
priority=0xffff,<marker-field>=<reserved> actions=output:controller
OFS
OFC
Probe マーカを付けたフレームを
OFPP_TABLE 指定して
PACKET_OUT
Probe マーカに反応して
PACKET_IN
たいへん危険ですのでおやめください
review
• 外から来た probe と,controller から来た probe
を判別するための「何か」が必要
– “SDN Traceroute” では,これを “色” で解決していた
• 隣接する OFS はそれぞれ別の色になっている
• 自分以外の色でマークされた Probe だけ OFC へ渡す
• 必要な flow entry 数は,隣接 OFS の色の数
• 色の数ほど Probe マークのための値を (全体で) 予約
• この “色” を着けるために,トポロジ検出したりグラフ彩色問
題を解いたりする必要があった
design
• “判別” に,外に出たら消えてしまうフィールドを用いれば良い!
– metadata
• 一番使いやすく,side effect もない
• 仕様上は set-field action が許可されるのは OF 1.5 から
– とはいえ OVS などは 1.3 とかでも可能
– tunnel_id
• 仮想ネットワーク ID を OpenFlow 的に操作しない環境では metadata と同じと
考えることができる
• 上記環境以外では side effect があるため使いづらい
“判別” 出来さえすれば,無理にフレーム自体を書き変える必要はないのでは…?
flow entry
• 例えば VLAN PCP=7 を probe マークに使う場合
table=0,priority=0xffff,metadata=0,dl_vlan_pcp=7 actions=controller
– OFC は,PACKET_OUT メッセージの actions に
set_field:1->metadata, output:OFPP_TABLE
などと指定するだけで良い
– traceroute に必要な flow entry は 1 つだけ!
– probe マークに必要な予約値も 1 つだけ!
– トポロジ検出やグラフ彩色等の前処理も必要なし!
– お手軽!!
implementation
• 本当に動くのだろうか?
• Ryu アプリとして実装
OFS
OFC
APP
Frontend[HTTP POST]
調査したいヘッダを持つフレーム,
Traceroute 開始地点
受け取ったフレームに
Probe マーク挿入
metadata 付けて
PACKET_OUT
……
PACKET_IN
[HTTP WebSocket]
フレーム内容を解析して
ユーザに報告
……
CLI
https://github.com/atzm/oftroute
topology
• やっぱりトポロジも知りたい?
• OFS 隣接関係検出機能は持っていない
• でも他アプリとの共存は可能なので
• 例えば Ryu ビルトインのトポロジ検出と連携
GUI
https://github.com/atzm/oftgui
ありがとうございました

Mais conteúdo relacionado

Semelhante a お手軽 OpenFlow Traceroute

仮想ネットワークを実現するOpenVNet
仮想ネットワークを実現するOpenVNet仮想ネットワークを実現するOpenVNet
仮想ネットワークを実現するOpenVNet
Akira Yokokawa
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能
Shinichiro Abe
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
 
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
Akira Yokokawa
 

Semelhante a お手軽 OpenFlow Traceroute (18)

Lagopus performance
Lagopus performanceLagopus performance
Lagopus performance
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
 
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitchOpen flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるかOpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
 
Lagopus, raw socket build
Lagopus, raw socket buildLagopus, raw socket build
Lagopus, raw socket build
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
VIOPS06: OpenFlowによるネットワーク構築と実証事件
VIOPS06: OpenFlowによるネットワーク構築と実証事件VIOPS06: OpenFlowによるネットワーク構築と実証事件
VIOPS06: OpenFlowによるネットワーク構築と実証事件
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
 
SDN Framework Ryu Internal
SDN Framework Ryu InternalSDN Framework Ryu Internal
SDN Framework Ryu Internal
 
OLD_Lt traffic analyse_OLD
OLD_Lt traffic analyse_OLDOLD_Lt traffic analyse_OLD
OLD_Lt traffic analyse_OLD
 
仮想ネットワークを実現するOpenVNet
仮想ネットワークを実現するOpenVNet仮想ネットワークを実現するOpenVNet
仮想ネットワークを実現するOpenVNet
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 

お手軽 OpenFlow Traceroute

  • 2. self • ISP 勤務 – システム/ソフトウェア開発 – ここ最近は OpenFlow とか Overlay とか – 対外 (趣味?) でもたまにネタがあれば • Web ブラウザ上で L2 Learning Switch とか • Linux カーネルの PF_PACKET 周りとか vxlan ドライバとか • libpcap の Q-in-Q (IEEE 802.1ad) 対応とか • etc… 著者近影
  • 3. OpenFlow traceroute • 欲しかったもの – ある L2 フレームの本番 flow entries に従った転送経路を調べたい • ethertype へのマッチ等はよく使うので IP には限定したくない – OFC での静的解析ではなく,実際にフレームを流す動的解析がしたい • 条件 – なるべく本番 flow entries に手を入れたくない • 本番トラフィックが流れてる最中でも使えるのが理想だが… – なるべく条件を緩くしたい (可搬性) • 例えば「VLAN ID を 100 個ほどシステム予約します」とか… • 例えば「システム都合で 10,000 個ほど flow entries 突っ込みます」とか… – なるべく vendor extensions は使いたくない (可搬性) – 手軽に実装したい (人間の負荷) – 手軽に使いたい (人間/機械の負荷)
  • 4. related works • アカデミアの偉大な先人達 – Stanford: “ndb” (SDN Debugger) • flow entries を細工して,経路途中の OFS からデータを PACKET_IN • OFC で PACKET_IN データを集めて backtrace を生成 – IBM: “SDN Traceroute” • 経路途中の OFS から PACKET_IN するのは一緒だが, flow entry に細工せず済むように色々と頑張っている • 前段で OFS の隣接関係を調査し,更にグラフ彩色問題を解いて, 隣接 OFS が同色にならないようにする • 隣接 OFS の色の数ほどシステム側で flow entries を追加投入 • 色の数ほど VLAN PCP 値を (全体で) 予約 – 必ずしも PCP である必要はなく,本番で使わないフィールドなら何でも良い – etc, etc, etc…
  • 5. survey • 欲しいものに一番近いのは IBM “SDN Traceroute” – 前段で OFS の隣接関係 (トポロジ) 検出? • トポロジ情報がないと traceroute の実施ができない – グラフ彩色? • トポロジをグラフに見立てて OFS を色分け • グラフ彩色問題と言えば NP 困難/完全の代名詞では… • トポロジが変化するとグラフ彩色やり直しになる もうひと工夫すれば,グラフ彩色等せずとも実現できるのでは…?
  • 6. strategy • 基本構造は既存研究と同じで良い OFS OFS OFSOFS OFC 始点を指定して traceroute 実行命令 Probe マーカに反応して PACKET_IN 以降繰り返し… 通過した OFS を報告 Probe マーカを付けたフレームを OFPP_TABLE 指定して PACKET_OUT ※ もし転送と PACKET_IN を全部 OFS に任せる形にすると, OFS-OFC 間の遅延状況等次第で報告順が前後してしまう
  • 7. study • この場合 traceroute に必要な flow entry とは… – 基本形は下記だが,何も考えずに投入すると… priority=0xffff,<marker-field>=<reserved> actions=output:controller OFS OFC Probe マーカを付けたフレームを OFPP_TABLE 指定して PACKET_OUT Probe マーカに反応して PACKET_IN たいへん危険ですのでおやめください
  • 8. review • 外から来た probe と,controller から来た probe を判別するための「何か」が必要 – “SDN Traceroute” では,これを “色” で解決していた • 隣接する OFS はそれぞれ別の色になっている • 自分以外の色でマークされた Probe だけ OFC へ渡す • 必要な flow entry 数は,隣接 OFS の色の数 • 色の数ほど Probe マークのための値を (全体で) 予約 • この “色” を着けるために,トポロジ検出したりグラフ彩色問 題を解いたりする必要があった
  • 9. design • “判別” に,外に出たら消えてしまうフィールドを用いれば良い! – metadata • 一番使いやすく,side effect もない • 仕様上は set-field action が許可されるのは OF 1.5 から – とはいえ OVS などは 1.3 とかでも可能 – tunnel_id • 仮想ネットワーク ID を OpenFlow 的に操作しない環境では metadata と同じと 考えることができる • 上記環境以外では side effect があるため使いづらい “判別” 出来さえすれば,無理にフレーム自体を書き変える必要はないのでは…?
  • 10. flow entry • 例えば VLAN PCP=7 を probe マークに使う場合 table=0,priority=0xffff,metadata=0,dl_vlan_pcp=7 actions=controller – OFC は,PACKET_OUT メッセージの actions に set_field:1->metadata, output:OFPP_TABLE などと指定するだけで良い – traceroute に必要な flow entry は 1 つだけ! – probe マークに必要な予約値も 1 つだけ! – トポロジ検出やグラフ彩色等の前処理も必要なし! – お手軽!!
  • 11. implementation • 本当に動くのだろうか? • Ryu アプリとして実装 OFS OFC APP Frontend[HTTP POST] 調査したいヘッダを持つフレーム, Traceroute 開始地点 受け取ったフレームに Probe マーク挿入 metadata 付けて PACKET_OUT …… PACKET_IN [HTTP WebSocket] フレーム内容を解析して ユーザに報告 ……
  • 13. topology • やっぱりトポロジも知りたい? • OFS 隣接関係検出機能は持っていない • でも他アプリとの共存は可能なので • 例えば Ryu ビルトインのトポロジ検出と連携