>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
JavaScript

ネットワークとコンテナを手軽に可視化するツール

ホームサーバやワークステーションにコンテナ、VM、テストサービスが数十個溜まってくると、それらを管理するのが大変になります。結局、「今データベースが動いているIPアドレスは何番だっけ」「どのポートが開いているんだっけ」「あの古いワーカーはどのDockerネットワークに接続されているんだっけ」と頭を悩ますことになるでしょう。通常はターミナルを開いてgrepで出力を見たり、nmapを実行したり、頭の中で情報を整理する必要があります。

最近、開発者のKaram Ajajが作成したオープンソースプロジェクトAtlasを見つけました。このツールがそのような定型作業を自動化します。ローカルサブネットをスキャンし、Dockerソケット経由でコンテナの詳細を取得し、ブラウザ上にインタラクティブなネットワークマップを描画します。

内部構造と動作原理

Atlasのアーキテクチャは、複数の馴染み深いコンポーネントを組み合わせ、1つのコンテナにパッケージ化了しています:

  • スキャナーはGo 1.22で書かれています。このバイナリはARPやping経由で低レベルのネットワークリクエストを実行し、Dockerソケットをクエリし、開いているポートの詳細なプロービングを行います。すべての検出結果はローカルSQLiteデータベースに保存されます。
  • バックエンドはFastAPIで動作します。REST APIで検出されたホストを提供し、セッションを管理し、スキャン開始のコマンドを受け付けます。
  • WebインターフェースはReactで構築され、NGINXがサービスを提供します。NGINXはAPIリクエストのプロキシも担当します。

このスタックは自律的に動作します。コンテナ内でのcron設定は不要で、定期的なサブネットポーリングはGoのタイマーで処理されます。

主な機能

詳細なDocker検査

コンテナに複数のネットワークインターフェースがある場合、多くの類似ツールは 어려움을 겪습니다。Atlasは各インターフェースを個別に追跡します。コンテナに複数の内部IPアドレスとMACアドレスがある場合、それらはすべて特定のネットワーク名に関連付けられてグラフに表示されます。このユーティリティはイメージメタデータも解析し、オペレーティングシステムのタイプを推定しようとします。

隣接ホストの発見

Atlasはローカルホストだけで停止しません。SCAN_SUBNETS変数でカンマ区切りのサブネットリストを指定できます,例如 192.168.1.0/24,10.0.0.0/24。スキャナーは利用可能なデバイスを検出し、OSのフィンガープリントを取得し到達可能なポートをチェックします。異なるネットワークアダプターから見える同じホストには、対応するインターフェースラベルが付けられます。

インタラクティブな可視化

ネットワークグラフは円形と階層的なレイアウトに切り替えることができます。グラフ表示がその時に不便な場合は、すべてのパラメータ、フィルター、搜索を備えた標準的なホストテーブルを利用できます。インターフェースはモバイル対応なので、電話からネットワークの状態を確認できます。

Circular dashboard layout

Hierarchical dashboard layout

Host table

Log panel

API経由の柔軟なスケジューリング

チェック間隔は起動時に設定しますが、コンテナを再起動せずにリアルタイムで変更できます。これには専用のAPIエンドポイントがあります:

# Проверить текущие интервалы
curl http://localhost:8888/api/scheduler/intervals

# Изменить частоту быстрого сканирования на 30 минут
curl -X PUT http://localhost:8888/api/scheduler/intervals/fastscan \
  -H "Content-Type: application/json" \
  -d '{"interval": 1800}'

自分での展開方法

試す一番 빠른方法は、完成されたDockerイメージを 실행することです。このツールはホストネットワークとデーモンソケットへのアクセスが必要です:

docker run -d \
  --name atlas \
  --network=host \
  --cap-add=NET_RAW \
  --cap-add=NET_ADMIN \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e ATLAS_UI_PORT='8888' \
  -e ATLAS_API_PORT='8889' \
  -e ATLAS_ADMIN_USER='admin' \
  -e ATLAS_ADMIN_PASSWORD='change-me' \
  -e SCAN_SUBNETS="192.168.1.0/24" \
  keinstien/atlas:latest

NET_RAWNET_ADMINフラグは、スキャン中の低レベルパケット送信に必要です。管理者パスワードが設定されていない場合、UI認証はデフォルトで無効になっています。セキュリティが重要な場合は、ATLAS_ADMIN_PASSWORDを設定してください。これにより、Webインターフェースはログイン画面に保護され、APIエンドポイントにはBearerトークンが必要になります。

起動後、Webインターフェースはhttp://localhost:8888でアクセスでき、インタラクティブなSwaggerドキュメントはhttp://localhost:8888/api/docsにあります。

誰が使うべきか

Atlasはホームラボ、小規模オフィスのインフラ、テスト環境が頻繁に作成・破棄されるステージングサーバーに最適です。このプロジェクトはローカルアドレスの頭の中のマップを維持する必要性を排除し、うっかり開けたままのポートを適時に発見するのに役立ちます。

まずインターフェースを試したい場合は 作者が一般公開デモをメンテナンスしており、用户名はadmin、パスワードはchange-meです。ソースコードはMITライセンスで公開されているため、独自の自動化スクリプトに安心して適応させることができます。

関連プロジェクト