0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Yamaha RTX配下の通信をWebで可視化し、MCPでAIエージェントからアクセスできるようにした話

0
Posted at

はじめに

瀧澤です。
自宅やSOHOのネットワークで、スマートTV、IPカメラ、NAS、スマートスピーカー、ゲーム機、家電などが増えてくると、ふと気になります。

「この端末たちは、実際にはどこへ通信しているのか?」

ルーターの管理画面を見れば、接続中の端末や通信量はある程度わかります。
ただ、「どの端末が」「どの外部宛先へ」「いつ」「どれくらいの頻度で」通信しているかを、あとから調査しやすい形で見るのは意外と大変です。そして、この疑問は、単なる好奇心だけではなくなってきているとも感じています。

最近は、AIによる脆弱性発見や修正支援の話題を見る機会が増えました。Anthropic の Mythos / Glasswing project についても、関連する報道や公開情報では「AIが既存コードベースから多数の脆弱性を見つけ、修正につながった」という文脈で語られています。

しかし、コーディングエージェントが進化すれば、脆弱性を見つける側・直す側の両方が速くなる、という方向性は自然です。問題は、見つかる速度に対して、直る速度が追いつかない機器があるのではないか?ということです。

家庭やSOHOのIoT機器は、OSやブラウザのように自動更新が効くとは限りません。ファームウェア更新が止まっていたり、そもそもユーザーが管理画面を開かないまま何年も動いていたりします。だからこそ、まず「何と通信しているか」を見えるようにしておくことには意味があると考えています。

さらに最近は、AIエージェントからインフラや開発環境を操作する流れも強くなっています。AWS Kiro、Anthropic Claude、Anysphere Cursor などからコードやローカルツールにアクセスするのは珍しくなくなりました。一方で、Yamaha RTX ルーターのような家庭・SOHOでよく使われるネットワーク機器の状態は、AIエージェントから直接扱いにくい領域となっています。(自分で調べた範囲では、現時点で、Yamaha RTX の NAT セッション情報を継続収集し、MCP 経由で AI エージェントから問い合わせられる形にした公開ツールは見当たりませんでした。)

そこで、Yamaha RTX の NAT セッションや関連ログを読み取り、LAN内デバイスの外向き通信を可視化しつつ、MCP 経由で AI エージェントから問い合わせられる OSS を作ってみました。

名前は EgressView です。

この記事では、なぜ作ったか、どういう仕組みか、MCP対応で何が変わったかを書いてみようと思います。

EgressView には補助的なデータソース連携もありますが、この記事では話を絞るため、Yamaha RTX の NAT セッション可視化と MCP 連携を中心に扱います。


何ができるのか

EgressView は、Yamaha RTX ルーター配下の外向き通信を、ブラウザで可視化するツールです。

egressview-ui-overview.png

ざっくりと、以下のようなことができます。

機能 内容
グラフマップ LAN内端末と通信先の関係をノードグラフで表示
統計情報 宛先別・アプリ別・時系列で通信傾向を表示
通信ログ セッション一覧を期間・送信元・宛先・脅威情報で検索
端末一覧 IP/MAC/ベンダー/名前/メモ/状態を管理
検出ログ 脅威ヒット、新規端末、ビーコン候補などを記録
脅威フィード照合 Feodo Tracker、ThreatFox、URLhaus、Spamhaus DROP と照合
Slack通知 脅威検出や新規端末検出を通知
MCP連携 AIエージェントから通信状況や端末メモを問い合わせ

パケットキャプチャ用のミラーポートや専用アプライアンスを用意するのではなく、まずは Yamaha RTX が持っている NAT セッション情報を活用します。


なぜ NAT セッションを見るのか

家庭・SOHOでネットワーク監視をしようとすると、いくつか選択肢があります。

方法 良いところ 大変なところ
DNSログを見る 軽い。Pi-hole や dnsmasq と相性が良い IP直打ちやDoH、共有CDNでは限界がある
パケットキャプチャ 詳細に見える ミラーポート、保存容量、権限、プライバシー配慮が必要
エージェント導入 端末ごとに詳しく取れる IoT機器には入れられない
ルーターのNATセッション 全端末の外向き通信を横断的に見られる L4中心で、通信内容までは見えない

EgressView は、まず NAT セッションを軸にしています。

Yamaha RTX では、たとえば以下のような情報を SSH 経由で取得できます。

show nat descriptor address 100 detail

ここから、送信元IP、宛先IP、ポート、プロトコルなどを取り出します。

通信内容は見ません。
ただ、どの端末がどこへ出ているかはわかります。

これは、家庭・SOHOの運用ではかなり実用的です。

一方で、ここには明確な制約もあります。NATセッションを見る方式なので、基本的に対象は IPv4 の外向き通信 です。IPv6で直接外へ出る通信や、NATを通らない通信はこの方式だけでは見えません。

ただ、家庭内のIoT機器では、今でもIPv4でクラウドへ接続するものが多くあります。少なくとも「まず家庭内IoTの外向き通信をざっくり把握する」という目的では、IPv4 NATセッションを見るだけでも得られる情報はかなりあります。IPv6まで含めた可視化は、将来的にはミラーポートやオプションのキャプチャノードのような別アプローチで補う必要があると考えています。


生のNATセッションだけでは読みにくい

もちろん、NATセッションだけを見ても、人間にはつらいです。

192.168.1.42 -> 203.0.113.10:443
192.168.1.58 -> 198.51.100.20:5223
192.168.1.91 -> 192.0.2.30:8883

これだけでは、何が起きているのかわかりません。

そこで EgressView では、複数の情報を組み合わせて見やすくしています。

LAN側の識別

情報 用途
MAC / OUI ベンダー推定
DHCPログ IPとMACの対応
mDNS / DNS名 端末名の補完
手動メモ 「これはリビングのTV」などの運用メモ

宛先側の識別

情報 用途
逆引きDNS 宛先ホスト名の推定
dnsmasqログ 正引きDNSとの突合
RDAP 宛先IPの組織名
Geo情報 国・都市・地図表示
ポート/ホスト名 アプリ名の推定

たとえば 443/tcp だけでは何も言えませんが、ホスト名や組織名がつくと「AWS」「Apple Push」「YouTube」「Slack」「Tuya Smart」など、かなり文脈が見えてきます。

脅威データベースとの照合

さらに、外向き通信の宛先を脅威データベースとも照合します。

現時点では、Feodo Tracker、ThreatFox、URLhaus、Spamhaus DROP などの公開フィードを取り込み、宛先IPやドメインと突き合わせています。これにより、単に「知らない宛先へ通信している」だけでなく、「既知のマルウェアC2、フィッシング、悪性URL、ブロック対象ネットワークと関係がありそうか」を見られます。

もちろん、脅威フィードのヒットは万能ではありません。誤検知もありますし、ヒットしないから安全とも言い切れません。それでも、家庭・SOHOのネットワークで日常的に見るには、調査の入り口としてかなり役に立ちます。


AIエージェントからネットワーク状況を聞く

EgressView は MCP サーバーを内蔵しており、AWS Kiro、Anthropic Claude、Anysphere Cursor などの MCP 対応AIエージェントから、EgressView のデータを問い合わせられます。

たとえば、次のように聞けます。

過去24時間で一番通信が多い端末は?
脅威判定された通信はある?
192.168.1.42 が最近どこに通信しているか見て
メモが付いている端末を一覧して
192.168.1.97 に「リビングの掃除機。OTA更新でGitHubへ接続することがある」とメモして

現在は11個のMCPツールを公開しています。

MCPツール できること
get_threat_summary safe / warn / danger の件数を見る
get_traffic_summary 総セッション数、ユニーク宛先数、端末数を見る
get_top_destinations 通信先ランキングを見る
get_device_traffic 端末別の通信状況を見る
get_new_nodes 新しく出現した端末・宛先を見る
get_threat_connections 脅威判定された通信を見る
get_alerts 検出ログを見る
get_devices 端末一覧を見る
query_connections 通信ログを検索する
get_device_notes 端末メモを見る
set_device_note 端末メモを追加・更新・削除する

個人的には、ここがかなり便利でした。

ネットワーク機器の管理画面は、どうしても「人間が画面を開いて、条件を変えて、読む」ものになりがちです。MCP対応により、AIエージェントから「この端末、最近変な通信してない?」のように聞けるようになります。EgressViewは、RTX の NAT セッションや周辺ログを、AIエージェントが扱いやすい形に変換しています。

実際には、こんな感じで「今日の脅威情報を分析して」と聞けます。
内部IPや具体的な宛先はマスクしています。

egressview-mcp-query-redacted.png


実際に見えてくるもの

EgressView を動かすと、普段あまり意識していなかった通信が見えてきます。

例としては、次のようなものです。

  • スマートTVが定期的に複数のCDNや広告系ドメインへ通信している
  • IPカメラがクラウド中継サーバーへ継続的に接続している
  • スマート家電がMQTT/TLSで特定クラウドへ常時接続している
  • ある端末だけ、短い間隔で同じ宛先へ通信している
  • 新しい端末がネットワークに現れて、外部通信を始めた

これらは、すべてが悪い通信というわけではありません。

ただ、知らない通信を知らないままにしないことが大事だと思っています。

EgressView では、グラフマップや統計で全体を見て、気になった端末を通信ログや端末一覧で掘り下げる、という流れを意識しています。


アーキテクチャ

大まかな構成はこうです。

egressview-architecture.png

バックエンドは Node.js、保存は SQLite です。

MCP は stdio と HTTP の両方に対応しています。Claude Desktop のように stdio が扱いやすいクライアントではローカルプロセスとして起動し、Cursor やカスタムクライアントでは HTTP 経由で使えます。


既存ツールとの違い

近い領域には、DNSベースで広告・トラッカーをブロックする Pi-hole や、トラフィックを詳しく分析する ntopng / Zeek / Suricata などがあります。EgressView は、それらを置き換えるものではありません。狙っているのはもう少し狭く、Yamaha RTX を使っている家庭・SOHO環境で、追加ハードウェアなしに「どの端末がどこへ外向き通信しているか」を見えるようにすることです。DNSだけでは見えない通信も、パケットキャプチャほど重い構成にしなくても、まずNATセッションから把握する。そこに端末名、組織名、脅威フィード、メモ、MCP連携を足して、日常的に調査しやすくする、という位置づけです。

なお、現時点のEgressViewはIPv4 NATセッション中心です。IPv6通信まで深く見る用途では、Zeek / Suricata / ntopng のようにパケットやフローを直接扱う構成の方が向いています。EgressViewはまず「追加ハードウェアなしで、IPv4中心のIoT通信を見える化する」ことに寄せています。


試し方

Yamaha RTX ルーターがあり、Node.js 22以上が入っていれば試せます。

git clone https://github.com/yo1t/egressview.git
cd egressview
npm install
npm start

最初にブラウザ用のログインパスワードがコンソールに表示されます。
Yamaha RTX のIP、SSHユーザー名、パスワードを設定画面に入れて、自動検出を実行すると、NAT descriptor やLAN IPを検出します。

ルーターが手元にない場合は、デモモードでもUIを確認できます。

DEMO_MODE=true DEMO_ADMIN_TOKEN=my-token npm start

詳細はREADMEにまとめています。


参考


おわりに

家庭やSOHOのネットワークは、業務システムほど厳密に監視されない一方で、端末の種類はどんどん増えています。そして最近は、AIエージェントからコードやツールにアクセスする流れが進んでいます。であれば、ネットワークの状態も、画面で見るだけでなく、AIエージェントから自然言語で確認できるようになると便利です。

EgressView は、Yamaha RTX のNATセッションという情報を起点に、家庭/SOHOの外向き通信を見えるようにする試みです。まだ発展途上ですが、Yamaha RTX を使っている方、家庭内IoTの通信が気になっている方、MCPでローカルツールをAIエージェントから扱いたい方には、試してもらえるとうれしいです。Issue・PRも歓迎です。

免責

こちらの内容にもとづく環境の構築は、自己の責任でお願いします。各種サービス、AIクライアント、APIを利用する場合は、それぞれの利用条件に従ってください。

本記事は個人として作成したものであり、所属する企業・団体の見解を示すものではありません。また、特定の製品・サービスの利用を推奨または保証するものではありません。


商標について

AWS Kiro、Anthropic Claude、Anysphere Cursor、Yamaha などの製品名は、各社の商標または登録商標です。EgressView はこれらの企業と提携・承認・後援関係にありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?