v0.3.0 · MIT · セルフホスト

Topophany — ターミナルで読むセルフホスト型ネットワーク監視

どこから、どの経路で、何に届いたのか — そして、何を根拠に。

ネットワークとサービスをセルフホストで監視し、ターミナルで読む。Go のバイナリ 1 つで依存なし。チェックが通るまで緑にはなりません。

go install github.com/WhitenWhiten/topophany/cmd/topo@latest

01 ターミナル UI

どこかおかしい? それはどこ?

topo preview の録画です。本物の TUI に、合成の根拠を流しています。

~ topo preview 再生中 · 140×42
プレビューモードの Topophany ターミナル UI の録画。下のチャプターから選べます。

障害が起きる

x を押すと、DMIT 回線が中国本土から遮断されます。確定した失敗だけが赤くなります。

1–9 チャプター space 一時停止。topo preview で自分でも試せます。

02 セマンティクス

色ではなく根拠を

通過したチェックなしに緑になるものはありません。誰も監視していないものは unknown のままです。

初めから緑のものはない

サービス根拠状態
●メインサイトCloudflare ⇢ S1http 200 · 4 秒前Cloudflare NRT が応答 · キャッシュ DYNAMIC
○自宅ダッシュボードノートのみ登録済み・未監視チェックが未設定unknown
✖VLESS+Reality 入口DMIT · ロサンゼルスtcp タイムアウト · 6 秒前長沙 MacBook から · 3 サンプル中 3DOWN

正常な行は静かなまま。チェックがなければ稼働中ではなく unknown です。

観測点を明示する

tcp タイムアウト ×3 http 200 · 182 ms 長沙 worker · MacBook ロサンゼルス DMIT 入口 ニューヨーク worker · S1 判定 長沙からの経路の障害 · サーバーは稼働中

ある場所から見えた失敗は、その経路の障害であって、サーバーの停止ではありません。

エッジが応答した

訪問者
Cloudflare · NRT● HTTP 521 · エッジは稼働
S1 オリジン▲ 影響あり

CDN からの応答が証明するのはエッジだけ。オリジンを証明するのは、キャッシュでない応答です。

推測は推測と明記する

✖ INCIDENTVLESS+Reality 入口DMIT · ロサンゼルス

Failed checks
✖ m-exit-dmit-aaitr
Other-observer response evidence
● w-exit-s2-aaitr ● w-exit-s2-qqpr
Hypothesis (not a finding)
source/path-specific interference, filtering or routing fault is possible; blocking authority and untested protocols are not established

インシデントは根拠を示し、それ以上は仮説と明記します。

03 構成

1 つのバイナリ、3 つの役割

topo はクライアントであり、コレクターであり、観測点です。CGO も、データベースも、外部モジュールも不要。

  • バイナリクライアント、コレクター、ワーカー
  • 外部 Go モジュール標準ライブラリのみ
  • リリースビルドLinux、macOS、Windows · amd64、arm64
  • タブマウス対応

2 つのコレクター、合意形成の芝居はなし

ワーカーは両方に送り、片方が落ちている間はバッファします。

設計からして読み取り専用

リモートの設定 API もシェルもありません。トポロジーはレビューするローカル JSON です。

上限があり、それを明言する

上限に達すると、根拠を捨てずにエラーで計測を止めます。

04 プローブ

計測できるもの

ネイティブのプローブ、プロキシチェーン、そして既存ツール向けの読み取り専用アダプター。

ネイティブプローブ

L7
  • HTTPステータス、本文、ヘッダー、出口 IP
  • SSHバナー
  • DNSA, AAAA
L6
  • TLS証明書の検証
L4
  • TCP接続
  • UDPエコー、ランダムな nonce
L3
  • ICMPIPv4

プロキシチェーン

  • HTTP CONNECT
  • HTTPS CONNECT
  • SOCKS5リモート DNS
  • OpenSSH -Wホスト検証

読み取り専用アダプター

  • Mihomo
  • Tailscale
  • WireGuard

エッジとプラットフォーム

  • CloudflareWorkers, Pages
  • Vercel
  • Supabase

05 インストール

1 分で動く

ビルド済みアーカイブ、または go install ひとつで。

go install github.com/WhitenWhiten/topophany/cmd/topo@latest

Go 1.26.9 以降が必要です。

  1. 見て回る

    組み込みのデモ。x で何かを壊してみてください。

    topo preview
  2. コレクターを起動する

    127.0.0.1:7447 でデモを動かします。

    topo init --dir ./demo topo serve --config ./demo/topology.json \ --auth ./demo/auth.json \ --data ./demo/collector-data \ --observer demo
  3. TUI を開く

    別のターミナルで。

    topo --credentials ./demo/credentials.json