Clash Sniffer が効かない?mihomo の sniff とストリーミング分流を直す手順(2026)
Sniffer が「オン」でもストリーミングだけ別経路になる理由
mihomo(旧 Clash Meta 系)の Sniffer(嗅探/sniff)は、TLS の ClientHello から SNI を、平文 HTTP なら Host を読み取り、接続先が IP のまま届いた場合でもドメイン名へ戻してルール評価できるようにする機能です。一方で、Netflix や YouTube などのストリーミングは CDN や QUIC を多用し、クライアントによっては「最初は IP」「途中で別ホスト」といったパターンが出ます。ここに 分流ルールの順序や DNS の fake-ip 設定が噛み合わないと、GUI 上では Sniffer を有効にしたつもりでも、ログ上のマッチは GEOIP や MATCH に落ち続けることがあります。
本稿では、当サイトの TUN モードの解説やストリーミング向け DOMAIN 記事で扱った「経路の層」と役割を分け、Sniffer 機能そのものに焦点を当てて切り分けます。購読プロファイルの鮮度はサブスクリプション取り込みの手順と同様に先に確認し、本文では YAML 上の sniffer 段と dns 段、そして rules の並びをセットで扱います。
用語:本稿では設定キー名どおり sniffer ブロックを「Sniffer」、個別プロトコル設定を「sniff」、名前解決の仮想 IP 方式を「fake-ip」と書きます。クライアントの表示名は製品ごとに異なります。
よくある症状:ログにドメインが出ない・意図したプロキシグループに入らない
典型的には次のような状態です。(1)接続一覧では宛先が 198.18.x.x のようなプール内 IP のまま変わらない、(2)ルールヒットが IP-CIDR や GEOIP に偏り、自前で足した DOMAIN-SUFFIX に一度も触れない、(3)ブラウザは通るがアプリだけ別出口、などです。これは必ずしもノードの故障ではなく、嗅探結果がルールに渡る前に別の分岐へ吸い込まれているケースが多いです。
まずは mihomo のログレベルを上げ、該当フローで SNI/Host が記録されているかを見ます。記録が無い場合はポートが sniff 対象外か、プロトコルが QUIC 主体で別経路になっている可能性があります。Meta から mihomo への移行直後は、旧プロファイルに sniffer ブロック自体が無い・デフォルト無効のまま、というパターンもよくあります。
ステップ 1:sniffer の有効化と override-destination
最小限、sniffer.enable を true にし、TLS/HTTP の sniff にストリーミングでよく使うポート(例:443、一部アプリの 8443、平文系の 80 など)が含まれているか確認します。override-destination は、嗅探で得たドメインを実際の転送先決定に上書きするためのスイッチで、ここが false のままだと「ログには出るがルールは IP ベースのまま」という状態が残りやすいです。ストリーミング用の DOMAIN-SUFFIX を信頼して使うなら、意図を理解したうえで true に寄せるのが一般的です。
併せて force-dns-mapping は、DNS クエリと接続の対応付けを強めるオプションで、fake-ip 利用時にホスト名の一貫性を取りやすくします。parse-pure-ip は純粋な IP トラフィックの扱いに関わるため、環境によってはログの見え方が変わります。以下は「よくある骨格」の例です(コメントは説明用のため、実ファイルでは削除してください)。
sniffer:
enable: true
sniff:
TLS:
ports: [443, 8443]
HTTP:
ports: [80, 8080-8210]
force-dns-mapping: true
parse-pure-ip: true
override-destination: true
ステップ 2:分流ルールの優先順位を「細かい DOMAIN を上」に
嗅探でドメインが復元できても、rules の上から評価される最初の一致が実効です。購読ルールセットに広い GEOIP や包括的な DOMAIN-KEYWORD が先にあり、そこで PROXY や DIRECT に固定されていると、後段の DOMAIN-SUFFIX,example.com,STREAM には到達しません。ストリーミング専用のプロキシグループ名(例:STREAM)へ寄せたい場合は、対象サービス用の DOMAIN 系をリスト上部へ移動するのが基本です。
ルール評価の考え方の共通項はルール分岐の詳解に任せつつ、Sniffer 文脈では「復元されたホスト名が、どのルール行に最初に当たるか」をログと突き合わせます。追記する DOMAIN-SUFFIX は、実際に観測した CDN ホストに合わせて複数行に分けると安全です。過度に短いキーワードルールは他トラフィックを巻き込むので、ストリーミングではサフィックスの列挙を優先します。
rules:
- DOMAIN-SUFFIX,video.net,STREAM
- DOMAIN-SUFFIX,example-cdn.com,STREAM
- GEOIP,CN,DIRECT
- MATCH,PROXY
ステップ 3:DNS の fake-ip と嗅探の整合
dns.enhanced-mode が fake-ip のとき、クライアントはしばしば名前解決結果としてプール内の仮想 IP を返します。このとき実サーバーへ向けた接続とルール評価用のホスト名の対応がずれると、見かけ上「DOMAIN ルールが効かない」ように見えます。force-dns-mapping や嗅探の組み合わせはここを締めるためのものです。
また、fake-ip-filter やスキップリストにストリーミング関連ドメインが入りすぎていると、意図せず redir-host 側の挙動に寄ったり、システム DNS へ逃げたりします。フィルタは「必要最小限」にし、変更後はキャッシュを意識してアプリを再起動したり、数分待ってから再試行したりすると切り分けがしやすいです。IPv6 環境では AAAA の扱いも絡むため、片道だけ不通のときは ストリーミング分流の総合記事で触れた DNS の項と同様に、OS 側の DNS 設定との二重化も疑います。
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://dns.example/dns-query
fallback:
- tls://dns.example:853
ステップ 4:TUN/システムプロキシと「嗅探が効くレイヤー」
ブラウザだけシステムプロキシ経由で、アプリは直出し、という状態では、Sniffer が見るフロー自体が分かれます。TUN で端末全体を同じスタックに載せれば、嗅探とルールの適用対象が揃いやすくなります。逆に、ローカルで別の VPN やフィルタが動いていると、Clash の手前でパケットが変形し、SNI が期待どおり見えないこともあります。企業端末では SSL インスペクションと競合する例もあるため、その場合はクライアント側の例外設定やネットワークの切り替えが必要です。
短いチェックリスト(再掲)
sniffer.enable: trueと、対象プロトコル・ポートがストリーミングの実フローをカバーしているか。override-destinationを目的に合わせており、DOMAIN-SUFFIXが実効マッチに使われているか。rulesの順序で、細かい DOMAIN 系が広いGEOIP/MATCHより上にあるか。- fake-ip と
force-dns-mapping、および DNS フィルタが過剰でないか。 - ブラウザとアプリでプロキシの見える範囲が違わないか(必要なら TUN)。
運用のコツ:一度きりの巨大ルールより、ログに出たホスト名を追記していく方が、サービス側の CDN 変更にも追従しやすいです。Sniffer 関連は設定の依存関係が多いので、変更は一項目ずつ戻しやすい形で保存すると安全です。
ドキュメントと入手経路
YAML の網羅的な項目は、当サイトのチュートリアル・ドキュメントも参照してください。実行ファイルの入手は、説明が一貫した配布導線としてダウンロードページを使うのがおすすめです。
まとめ
Clash Sniffer をオンにしてもストリーミングの DOMAIN-SUFFIX に乗らないときは、嗅探の上書き(override-destination)、分流ルールの優先順位、DNS の fake-ip とマッピング、そして TUN などトラフィックが通るレイヤーを同時に疑うのが近道です。mihomo ではこれらを一つのプロファイルで扱えるため、ログと設定を突き合わせながら段階的に直せます。
同種のクライアントのなかでも、Meta 系はログと拡張設定のバランスが取りやすく、sniff と DNS をセットで調整しやすいのが強みです。
各 OS 向けビルドの入手先はダウンロードページにまとめています。嗅探とルールのズレを一度整理したうえで、環境に合ったクライアントを入れると、再現と修正の両方がはるかに楽になります。→ Clash クライアントを無料でダウンロードし、sniff と分流を自分の手で揃えた接続を試す