ネットワーク構成をリアルタイムで可視化!openwisp-network-topology でメッシュ・VPN トポロジを管理する

タグ openwispネットワークトポロジDjangoWebSocketVPNメッシュネットワークREST APICelerycolumnコラムlinuxLinuxwindowsWindowsGitHubオープンソースopenwisp-network-topology
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

ネットワーク構成をリアルタイムで可視化!openwisp-network-topology でメッシュ・VPN トポロジを管理する

ひとことでいうと

openwisp-network-topology は、複数のネットワーク機器がどうつながっているかを地図のように見せてくれる、オープンソースの Web アプリです。メッシュ Wi-Fi や VPN(仮想プライベートネットワーク)の接続状態をブラウザ上でグラフとして確認でき、リンクが切れたときにはアラートを送ることもできます。OpenWISP(オープンソースのネットワーク管理プロジェクト)の一部として開発されており、実際の企業や ISP の現場でも使われている実績があります。静的な図ではなく、WebSocket(ブラウザとサーバーをリアルタイムでつなぐ技術)を使ってグラフが自動更新されるのが大きな特長です。

こんな人におすすめ

  1. ISP・企業のネットワーク管理者: 複数拠点の VPN や Wi-Fi メッシュの接続状態を一画面で把握し、障害箇所をすばやく特定したい方にぴったりです。どこでリンクが切れているかがグラフで一目でわかります。

  2. ネットワークを学ぶ学生・研究者: 実際のルーティングプロトコル(機器同士が経路を決めるルール)がどんなトポロジ(接続の形)を作るかを視覚的に体験できます。REST API(外部からデータをやりとりする仕組み)でデータを取り出して独自に分析することも簡単です。

  3. Django を使う開発者・OSS 貢献者: openwisp-controller(デバイス設定管理)や openwisp-monitoring(死活監視)と連携する拡張モジュールを作りたい方にも向いています。カスタムのシグナルハンドラや管理画面の上書きについて、公式ドキュメントで詳しく解説されています。

インストール・使い方

openwisp-network-topology は Python 3.12 で動作確認されており、既存の Django プロジェクトにプラグインとして組み込む形式です。ターミナル(文字で命令を送る画面)にコマンドをコピー&ペーストするだけで進められます。

Step 1: 仮想環境を作成してパッケージをインストール

python -m venv venv
source venv/bin/activate
pip install openwisp-network-topology

仮想環境(venv)とは、プロジェクトごとに独立した Python の作業スペースのことです。他のプロジェクトに影響を与えずにパッケージを管理できます。pip install でこのライブラリとその依存パッケージが一括でインストールされます。

Step 2: Django の設定ファイルに追加

# settings.py
INSTALLED_APPS = [
    ...
    'openwisp_utils',
    'openwisp_network_topology',
    'rest_framework',
    'channels',
    ...
]

INSTALLED_APPS は「このプロジェクトで使うアプリの一覧」です。ここに追加することで、Django がライブラリの機能を正しく認識できるようになります。

Step 3: URL の設定とデータベースの初期化

# urls.py に include('openwisp_network_topology.urls') を追加後
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

migrate コマンドはデータベース(情報を保存する場所)の設計を最新の状態にします。createsuperuser で管理者アカウントを作成し、runserver でローカルサーバーが起動します。

Step 4: Celery ワーカーを起動(自動トポロジ取得のため)

celery -A myproject worker -l info
celery -A myproject beat -l info

Celery(セロリ)は「バックグラウンドで定期的に処理を実行する仕組み」です。トポロジ情報の定期取得や古いスナップショットの削除が、この仕組みによって自動で行われます。

開発環境では付属の docker-compose.yml を使うと、PostgreSQL・Redis・Celery を含む環境をコマンド一つで起動できます。

docker-compose up -d

Docker Compose(ドッカーコンポーズ)とは、複数のサービスをまとめて起動・管理できるツールです。-d オプションをつけるとバックグラウンドで起動します。

動かしてみた

Docker 環境で起動確認を行ったところ、Python 3.12.13 が正常に動作しており、プロジェクト全体の構造が問題なく読み込めることを確認しました。

openwisp_network_topology/ パッケージの中には、admin.py(管理画面)・models.py(データ定義)・tasks.py(定期タスク)・consumers.py(WebSocket 処理)・routing.py(URL 振り分け)・signals.py(イベント通知)・urls.pyutils.py など、Django アプリとして必要なファイルがすべて揃っています。

tests/ ディレクトリと pytest.iniruntests.py の存在から、テストスイートも整備されていることが確認できました。requirements-test.txtrun-qa-checks スクリプトにより、コードスタイルチェック(black)や QA の自動化もサポートされています。パッケージング面では setup.pypyproject.toml の両方が用意されており、旧来の setuptools 形式と現代的な PEP 517 形式の両方に対応しています。

ブラウザで試す

openwisp-network-topology が出力するノード・リンク構造を模したサンプルデータを入力すると、D3.js(ブラウザ上でグラフを描画する JavaScript ライブラリ)によるインタラクティブなグラフとして可視化されます。実際にインストールしなくても、サイト内の「ブラウザで試す」ボタンからネットワークトポロジの概念をすぐに体感できます。ノードをドラッグして配置を動かしたり、リンクの状態を確認したりすることで、グラフの見方を事前に把握しておけます。

はじめの一歩――すぐ試せる設定のコツ

最小構成でローカル確認したい場合は、以下のポイントを押さえると早くスタートできます。

  • パーサーを設定する: settings.pyTOPOLOGY_PARSERS に使用するプロトコルを指定します。OLSR・batman-adv・OpenVPN に対応したパーサーが最初から用意されています。

  • 管理画面からトポロジを登録する: ブラウザで /admin/ を開き、「Topology」を新規作成してパーサーと URL を入力します。Celery タスクが定期的に情報を取得してグラフが自動更新されます。

  • スナップショット保存日数を決める: TOPOLOGY_LINK_EXPIRATION の値(日数)で、過去のトポロジをどれくらい保持するか調整できます。まずデフォルト値で始め、ディスク容量に合わせて調整するのがおすすめです。

# settings.py(最小デモ設定例)
TOPOLOGY_PARSERS = [
    'netdiff.OlsrParser',
    'netdiff.BatmanParser',
    'netdiff.OpenvpnParser',
]
TOPOLOGY_LINK_EXPIRATION = 60  # スナップショット保存日数(日)
  • シグナルハンドラを試す: link_status_changed シグナルを使うと、リンクがアップ/ダウンしたときに任意の処理を呼び出せます。まずは print() でログを出すだけの簡単なハンドラから試してみましょう。

  • REST API を確認する: インストール後に /api/ にアクセスすると、トポロジデータを JSON 形式で取得できます。curl や Postman などのツールで手軽に動作確認できます。

活用アイデア

  • 障害アラートシステムの構築: link_status_changed シグナルを受け取り、Slack や PagerDuty に通知するハンドラを追加することで、リンク断を即座に検知できます。
  • 構成変更の監査ログ: 日次スナップショット機能と組み合わせ、トポロジの変化を時系列で比較することで、無断な機器追加・削除の検出に活用できます。
  • OpenWISP エコシステムとの統合: openwisp-controller と openwisp-monitoring を組み合わせると、構成・監視・トポロジを一元管理するネットワーク運用プラットフォームを構築できます。
  • ルーティングプロトコルの学習教材: OLSR・batman-adv・OpenVPN のトポロジがリアルタイムで変化する様子を視覚的に観察でき、プロトコルの動作理解に役立ちます。
  • REST API を使った独自ダッシュボード: トポロジデータを REST API で取り出し、社内の分析ツールや Grafana などの可視化ツールへのデータ投入にも応用できます。
  • 自動復旧スクリプトとの連携: リンクダウンを検知したシグナルハンドラから障害デバイスへの再設定コマンドを呼び出すことで、自動復旧の仕組みを構築できます。

用語とポイント解説

トポロジ(Topology) ネットワーク上の機器(ノード)とその接続(リンク)の配置・関係図のことです。かんたんに言うと「ネットワークの地図」です。この地図を見ることで、どの機器がどこにつながっているかが一目でわかります。

メッシュルーティング 各機器(ノード)が互いにルートを自動で探し合う分散型のルーティング方式です。かんたんに言うと「みんなで助け合ってデータの道を決める仕組み」です。一部の機器が壊れても別の経路でデータを届けられる耐障害性があり、OLSR・batman-adv などのプロトコルがこの方式に該当します。

OLSR(Optimized Link State Routing) メッシュネットワーク向けのルーティングプロトコルの一つです。かんたんに言うと「ネットワーク全体の地図をこまめに更新して最短経路を見つけるルール」です。openwisp-network-topology はこのプロトコルのトポロジ情報を取り込んで可視化できます。

batman-adv(B.A.T.M.A.N. advanced) Linux カーネルで動くメッシュルーティングプロトコルです。かんたんに言うと「Linux が動く機器同士がメッシュネットワークを自動で作る仕組み」です。OpenWrt などのルーターファームウェアでよく使われており、openwisp-network-topology はこのトポロジも可視化できます。

Django シグナル Django(Python の Web フレームワーク)で、データの変化などのイベントが起きたときに任意の処理を呼び出す仕組みです。かんたんに言うと「何かが起きたら自動でお知らせしてくれる通知システム」です。リンクのアップ/ダウン時にアラートを送ったり、ログを記録したりするのに活用します。

Django Channels WebSocket など非同期のプロトコルを Django で扱うための拡張ライブラリです。かんたんに言うと「ブラウザとサーバーが常時つながって、更新情報をすぐ画面に反映する仕組み」です。openwisp-network-topology はこれを使ってトポロジグラフをリアルタイムに更新しています。

Celery(セロリ) Python 用の非同期タスクキューライブラリです。かんたんに言うと「重い処理や定期的な作業をバックグラウンドで自動実行してくれるスケジューラー」です。openwisp-network-topology ではトポロジの定期取得や古いスナップショットの削除に使われています。

netdiff OpenWISP が開発する、ネットワークトポロジのパース(解析)と差分検出を行うライブラリです。かんたんに言うと「各プロトコルから取ってきたネットワーク情報を読み解いて、前回との変化を見つけるツール」です。openwisp-network-topology はこのライブラリを使って各種プロトコルのデータを統一的に処理しています。

D3.js データを視覚的に表現するための JavaScript ライブラリ(BSD-3-Clause ライセンス)です。かんたんに言うと「数値やつながりのデータをグラフや図に変換してブラウザに表示するツール」です。openwisp-network-topology のトポロジグラフはこのライブラリで描画されています。

REST API HTTP を使ってデータのやりとりをする、Web サービスの標準的なインターフェースです。かんたんに言うと「外部のプログラムからデータを取り出したり、送り込んだりできる窓口」です。openwisp-network-topology はこの API を通じて外部システムとのデータ連携が可能で、トポロジデータを JSON 形式で受け渡しできます。

ぜひ、VPN ネットワークの障害監視や、メッシュ Wi-Fi のトポロジ把握・構成変更の監査ログなどに活用してみてはいかがでしょうか。