てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Batfish] ネットワーク機器のコンフィグを読み込んでルーティングなどの様々な検証ができるツール「Batfish」の紹介

■ Batfish とは: 実機に接続することなくコンフィグを検証

f:id:akira6592:20181025150354p:plain

Batfish は、ネットワーク機器のコンフィグの様々な検証ができるツールです。 実機に接続する必要はありません。 準備したコンフィグファイルを読み込んでパースし、解析して内部でネットワーク機器が動作するようなイメージです。

本体は Java で書かれいて、Python から扱うためのクライアントである pybatfishもあります。 設定変更のコンフィグの妥当性を、あらかじめ Batfish で確認してから実機に投入する、というようなことが実現できるのではないかと、最近興味を持ちました。

この記事では、Batfish でできることなどの概要や、Docker、Jupiter Notebook を利用した試し方をご紹介します。

Cisco、Arista、Juniper、Palo Alto などの機器に対応

Batfish が対応している機器の一覧はこちらです。これらの機器の形式のコンフィグファイルを読み込むことができます。 https://github.com/batfish/batfish#what-configuration-formats-does-batfish-support

Cisco、Arista、Juniper、Palo Alto などの機器に対応しています。

情報ソース(デモ動画・プレゼン資料)

Batfish 公式サイトのトップにもリンク掲載されていますが、デモ動画やプレゼン資料などがあります。

チュートリアル動画

今後も Batfish の YouTube チャンネルで動画が増えるかもしれません。

プレゼン動画・資料

ブログ


■ Allinone の Docker イメージ でかんたんにお試しできる

Batfish には 2 つの公式 Docker イメージがあります。

利用方法は、Dcokerfile が管理されているリポジトリ batfish/dockerREADME.md に記載されています。 ここでは、[batfish/allinone](https://hub.docker.com/r/batfish/allinone/] を利用して、簡単に動作を確認する方法をご紹介します。

もし、Docker コンテナを動かす環境が用意できない場合は、batfish/pybatfish リポジトリにある Jupyter Notebook の .ipynb ファイル で雰囲気がつかめます。

コンテナの起動と Junipter Notebook へのログイン

docker run -p 8888:8888 batfish/allinone

コンテナ側で Jupyter Notebook が 8888/TCP ポートを空けているので、ホスト側からも 8888/TCP でアクセスできるようにポートマッピングしています。

コンテナが起動すると、以下のようなログが表示されます。

  • ログ
[root@centos7 ~]# docker run -p 8888:8888 batfish/allinone
[I 04:30:16.094 NotebookApp] Writing notebook server cookie secret to /data/.local/share/jupyter/runtime/notebook_cookie_secret
[I 04:30:16.779 NotebookApp] Serving notebooks from local directory: /notebooks
[I 04:30:16.779 NotebookApp] The Jupyter Notebook is running at:
[I 04:30:16.779 NotebookApp] http://(0320725b43c3 or 127.0.0.1):8888/?token=abcdef123456xxxx
[I 04:30:16.779 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 04:30:16.780 NotebookApp] No web browser found: could not locate runnable browser.
[C 04:30:16.780 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://(0320725b43c3 or 127.0.0.1):8888/?token=abcdef123456xxxx

上記のログの例では token=abcdef123456xxxx が Jupyter Notebook へログインするトークン情報です。この場合、以下のような URL で Jupyter Notebook へログインします。

Notebook の選択

Jupyter Notebook にログインすると、以下の Notebook の一覧が表示されます。

f:id:akira6592:20181025150132p:plain

ここでは、一番初歩的そうな「Getting started with Batfish.ipynb」を選択して説明します。

なお、同じディレクトリにある networks ディレクトリの配下には、example-filtersexamples ディレクトリがありります。これらの 2つのディレクトリの中には、ネットワーク機器のコンフィグやホストの定義ファイルが含まれています。Batfish でこれらのディレクトリを指定すると、コンフィグなどを読み込んで、解析できる状態になります。

Getting started with Batfish

この Notebook は、大まかには以下の流れです。

  • networks/example ディレクトリに含まれる、ネットワーク機器(Cisco IOS)のコンフィグや、ホストの定義などを読み込み、スナップショットを作成する
  • 設定の抽出や、traceroute、ルーティングテーブルなどを検証する。

見出しだけ翻訳して、一部 "※" で注釈をつけた .ipynb ファイルを作成したので、以下に貼り付けます。

Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Getting started with Batfish (Japanese)


■ まとめ

ネットワーク機器のコンフィグを読み込んでルーティングなどの様々な検証ができるツール「Batfish」で、どんな事ができるかなど、雰囲気が伝わりましたでしょうか。 完全に実機と同じものとみなして検証することは難しいですが、補助的な検証には利用できるのではないでしょうか。 また、実機に接続する必要がなく、コンフィグだけ用意すればよい点も魅力的です。

私自身はまだ調べ始めたばかりです。また何か新しいことが分かったり試したりしたら、このブログに投稿したいしと思います。

参考

Ansible と Batfish を組み合わせた話の Webinar があるようです。 www.ansible.com