Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

BatfishのQuestion一覧と概要説明

More than 1 year has passed since last update.

はじめに

Batfishは、ネットワーク機器のスナップショット(Config等)に対し、Questionを使って様々な問い合わせを行います。
Questionの例として、Advent Calender 3日目で紹介したnodePropertiesや、Advent Calender 4日目で紹介したinterfacePropertiesがあります。他にも、2018年11月末時点で、42種類のQuestionが提供されています。
本記事では、各Questionでできることの概要をまとめたいと思います。

Questionの仕組み

以下URLの情報をもとに、イメージを図で表してみました。
https://github.com/batfish/batfish/tree/master/questions

まずPybatfish(クライアント)でJSON形式のQuestionテンプレートをロードします。次に、ユーザが定義したノード名やプロパティ等の変数をテンプレート内に埋め込みます。このテンプレートを使ってBatfishサービス(コーディネーター)にREST APIリクエストをかけ、内容に従ったスナップショットの解析を行い、結果をPybatfishに返すという流れになります。

4-2.png

Batfishで使用可能なQuestion

  • 一覧は以下URLに掲載されています。

 [Web版] https://pybatfish.readthedocs.io/en/latest/questions.html#module-pybatfish.question.bfq
 [PDF版] https://media.readthedocs.org/pdf/pybatfish/latest/pybatfish.pdf

  • QestionテンプレートのJSONファイルを見たい方は以下を参照願います。

 https://github.com/batfish/batfish/tree/master/questions

  • 現在も活発に開発が行われており、StableとExperimentalの2つのカテゴリーが存在します。

 Stable: 恒久的なもので、今のところ今後もサポートしていく予定。
 Experimental: 現在はサポートされているが、今後リプレイスや廃止の可能性あり。Stableに移行する可能性もある。

  • 原文をそのまま日本語にすると分かりづらいのもあるので、実際に実行してみた結果をもとに、具体例を交えて記載しています。気になるQuestionがあれば、原文やチュートリアルを見てみて下さい。

  • 参考情報として、Stable(S)/Experimental(E)の区分や、公式チュートリアルがあるか(★)も記載しました。

  • 一部Questionの実行結果、解析対象のConfigファイルをGistに保管してありますので、見比べながら表を見て頂くと分かりやすいかもしれません。

https://gist.github.com/Tachashi/f63afb5693140687007756f16517fb37

Question一覧

No. Question 内容 区分
1 aaaAuthenticationLogin AAA認証が適用されていないline(aux、con、vty)を出力 S
2 bgpPeerConfiguration BGPピア設定情報を出力 E
3 bgpProcessConfiguration BGPプロセス設定情報を出力 E
4 bgpSessionCompatibility 設定したBGPセッションのステータスを出力(対向機器の設定は考慮しない) E
5 bgpSessionStatus 設定したBGPセッションのステータスを出力 E
6 definedStructures ネットワーク内で定義された構造をリストアップ。具体的には、インターフェース、クラスマップ、ポリシーマップ、ACL名等を抽出し、それが何行目から何行目までに設定されているかを出力 S
7 detectLoops ループを検出 E
8 differentialReachability ある構成(現状)では許可されるが、別の構成(設定後)ではドロップされるフローを検出 E★
9 edges 指定したタイプ(layer3、BGP、OSPF、EIGRP等)のネイバー関係をリストアップ S★
10 fileParseStatus ファイルのパース(構文解析)ステータスを表示。問題なければPASS、Batfishがうまくパースできない行があった場合、PARTIALLY_UNRECOGNIZEDやFAILと表示される S★
11 filterLineReachability 前の行でより広い範囲をカバーするACL行があるために、評価されないACL行を特定 E★
12 filterTable あるQuestionに対する回答をさらにフィルタする E
13 interfaceMtu MTU値が、指定した条件と合致するインターフェースを出力。"<"などの比較演算子を使い、例えば1500より小さいものを出力することが可能 E
14 interfaceProperties インターフェース設定のプロパティを出力 E★
15 ipOwners スナップショット内の全機器のIPアドレス、インターフェース、ノード、VRFのマッピングを出力 S
16 ipsecSessionStatus 設定したIPSecセッションのステータスを出力 S
17 multipathConsistency マルチパスのルーティングが存在する中で、経路によって異なる扱いを受けるフローを検出 E★
18 namedStructures ACLやVRF等の名称と中身を構造化されたデータとして出力 E
19 neighbors スナップショット内機器における、特定のレイヤー(layer3、eBGP、iBGP、OSPF、EIGRP等)のネイバー関係をリストアップ E
20 nodeProperties ノード設定のプロパティを出力 E★
21 nodes 各ノードのすべて(もしくはサマリー)の設定パラメータを、ベンダー非依存のデータモデルの形で、JSON辞書形式で出力 E
22 ospfProperties OSPFルーティングプロセスに関する設定パラメータを出力 E
23 parseWarning パース出来なかったConfig、行番号、コメントを出力 S★
24 prefixTracer あるプレフィックス(A.B.C.D/Y)のネットワークへの伝播をトレース E
25 reachability 入力/出力箇所、送信元/宛先IPアドレス、配置上の制約にマッチするフローを検出 E★
26 referencedStructures ACL、クラスマップ等と、それを参照する設定(アクセスグループ、ポリシーマップ)と行番号を出力 S
27 resolveFilterSpecifier 各ノードが持つACL名、ACL番号の一覧を出力 E
28 resolveInterfaceSpecifier 各ノードが持つインターフェース名の一覧を出力 E
29 resolveIpSpecifier IP指定子によって解決された値を出力 E
30 resolveIpsOfLocationSpecifier 各ノードが持つインターフェースとそのIPアドレスの一覧を出力 E
31 resolveLocationSpecifier 各ノードのインターフェースのロケーション(インターフェース名やノード名)の一覧を出力 E
32 resolveNodeSpecifier 各ノードのノード名を出力 E
33 routes 特定のノード、VRF、RIB(main/bgp/bgpmp)に関するルート情報を出力 S★
34 searchFilters あるFilter/ACLが対象フローを許可、拒否したり、特定の行にマッチするか検索 E★
35 testFilters 特定のフローが、特定のfilter/ACLによってどのように処理されるかを検出 S★
36 traceroute 指定した開始ノードから宛先へ仮想的なTracerouteを行う。実際のTracerouteと異なり、各ホップの戻り通信がNGでもIPアドレスは返してくれる E★
37 undefinedReferences 参照しているACL等が、実際には定義されていないケースを検知(場合によっては、深刻な結果を招くミスの可能性あり) S★
38 unusedStructures ACL、ルートマップ等が定義されているが、使われていないケースを検知(Config誤り等の可能性あり) S
39 viModel すべての設定パラメータとネイバー関係を、ベンダー非依存のデータモデルの形で、JSON辞書形式で出力 E
40 viConversionWarning ベンダー非依存モデルに変換したときに発生したWarningを出力 S
41 loopbackMultipathConsistency マルチパスのルーティングが存在する中で、経路によって異なる扱いを受けるLoopback間のフローを検出 E
42 subnetMultipathConsistency マルチパスのルーティングが存在する中で、経路によって異なる扱いを受けるサブネット間のフローを検出 E

最後に

今回調べていく中で、Batfishが強力なネットワーク解析ツールであることを改めて実感しました。
個人的に興味を持ったQuestionについて、もう少し踏み込んだ内容を別の記事で紹介できればと思います。
あと、Advent Calendarはまだまだ空いていますので、みなさんも是非触ってみた結果を共有してもらえると嬉しいです!:grin:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away