「システムプロキシがオン」でも「すべての通信がプロキシを通る」わけではない理由

Clash クライアントの「システムプロキシ」スイッチは、本質的にはオペレーティングシステムやデスクトップ環境のプロキシ設定項目(Windows の WinINet 設定、macOS のネットワークサービスのプロキシ、Linux の GSettings や環境変数)を書き換えるものです。この種の設定はシステムのプロキシ設定を能動的に読み取るプログラムにのみ有効で、代表例はブラウザや一部の GUI アプリです。これはネットワーク層での強制転送ではないため、プロセス側が設定を無視することもできます——これこそ「プロキシは確かにオンなのに、あるアプリだけプロキシを通らない」という現象が起きる根本原因です。

コマンドラインツール(curl、wget、git、パッケージマネージャーなど)の多くはシステムプロキシの設定を読み取らず、代わりに環境変数(http_proxyhttps_proxyall_proxy)を参照します。つまり、システムプロキシがオンであることと端末がプロキシを通せるかどうかは別問題であり、それぞれ異なる調査アプローチが必要になります。

アプリの種類を問わず一律に強制プロキシしたい場合、唯一確実な方法はTUNモードです——これはネットワークインターフェース層で通信を引き受けるため、アプリ側が能動的にプロキシ設定を読み取っているかどうかに依存しません。本記事の後半でシステムプロキシとTUNモードの選び方を具体的に説明します。

i

調査の前に一つ確認しておきましょう。Clash 自体が正常に動作しているか、使えるノードがあるかどうかです。コアが起動していない、あるいは購読ノードがすべて無効な場合、システムプロキシの設定が正しくても接続は確立できません。この種の問題はまず実行ログでプロキシポートが正常にリスニングしているか確認することをおすすめします。

ブラウザがプロキシを通らない場合の確認手順

ブラウザがプロキシを通らない原因は主に4つに分類できます:プロキシスイッチが反映されていない、ブラウザ独自のプロキシ設定がある、拡張機能やセキュリティソフトによる干渉、DNSがプロキシを通らないことによる一部漏出です。以下の順序で一つずつ確認していきます。

ステップ1:システムプロキシのスイッチ状態を確認する

Clash クライアントの設定画面を開き、「システムプロキシ」がオンになっているか、そしてリスニングポート(通常は HTTP/Mixed ポートで、デフォルトは 7890 前後)が正しいか確認します。一部のクライアントは設定ファイルを切り替えるとこのスイッチをリセットすることがあり、アップグレードやシステム再起動後にシステム側からオフに戻される場合もあります。

ステップ2:ブラウザ独自のプロキシ設定を除外する

一部のブラウザ(特に Firefox)はデフォルトでシステムプロキシに追従せず、独自の接続設定を使います。Firefox で手動プロキシが設定されていたり「プロキシなし」が選択されていたりすると、システムプロキシが正常でも反映されません。確認箇所:

ステップ3:拡張機能やセキュリティソフトによる干渉を確認する

広告ブロック系の拡張機能、企業向けセキュリティクライアント、一部の VPN クライアントは、ネットワークリクエストの経路を強制的に変更したりプロキシ設定を横取りしたりすることがあります。まずブラウザのプライベート/シークレットモード(デフォルトで拡張機能が無効)で正常に戻るか試してみましょう。正常に戻るなら原因はどれかの拡張機能にあるので、一つずつ無効化して特定します。

ステップ4:DNSリクエストもプロキシを通っているか確認する

ブラウザが「つながるが遅い」「一部のサイトは正常で一部は異常」という症状は、多くの場合 DNS の漏出が原因です——ページのデータはプロキシを通っているのに、ドメイン名解決はローカル DNS を使っており、プロバイダやローカルネットワークによって先に干渉されている状態です。これは厳密には「プロキシが効いていない」わけではありませんが症状が似ているため、ルールモードで DNS ハイジャックや fake-ip モードが有効になっているかも併せて確認することをおすすめします。

!

プロキシ経路そのものが正常かどうかだけを確かめたい場合は、特定のサイトを先にテストするのではなく、IP 確認系のページに直接アクセスして出口 IP が変わるかを観察することをおすすめします——特定サイトの異常はルールによる振り分けで直結グループに割り当てられているだけの場合があり、プロキシ全体の失効を意味しないことがあります。

コマンドライン端末がプロキシを通らない場合の確認手順

端末ツールがプロキシを通るかどうかは、そのツールがプロキシ環境変数を読み取るか、そして変数が正しく設定され現在のセッションに継承されているかによって決まります。以下の順序で確認します。

ステップ1:環境変数が設定されているか確認する

macOS / Linux の端末で以下を実行します:

echo $http_proxy
echo $https_proxy
echo $all_proxy

出力が空であれば、現在のセッションにプロキシ環境変数が存在しないため、端末コマンドはプロキシを通りません。手動設定の例(ポートは実際のクライアントのリスニングポートに置き換えてください):

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"

Windows で PowerShell を使う場合の対応コマンド:

$env:http_proxy="http://127.0.0.1:7890"
$env:https_proxy="http://127.0.0.1:7890"

ステップ2:変数が正しい設定ファイルに書き込まれているか確認する

export で一時的に設定した変数は現在の端末セッションでのみ有効で、新しく開いた端末ウィンドウには継承されません。長期的に有効にしたい場合は shell の起動時読み込みファイル、例えば ~/.zshrc~/.bashrc~/.bash_profile(使用している shell やシステムによって異なります)に書き込む必要があり、変更後は source ~/.zshrc を実行するか端末を開き直して反映させます。

ステップ3:ツール自体がこれらの変数を読み取るか確認する

ツールによって従うルールが異なります:

ステップ4:最小限のコマンドでプロキシ経路を検証する

ツール自体のロジックによる干渉を排除するため、curl で直接プロキシポートが本当に使えるかテストします:

curl -x http://127.0.0.1:7890 -I https://www.example.com

このコマンドが正常にレスポンスヘッダーを返すなら、プロキシポート自体は正常に動作しており、問題は該当ツールがプロキシ設定を正しく読み取れていないことにあります。このコマンド自体がタイムアウトやエラーになる場合は、問題は Clash クライアントまたはノード側にあるので、クライアントに戻ってノードの接続状況とリスニングポートを確認してください。

端末系の問題に対しては「curl に -x パラメータを付けて手動でプロキシを指定してテストする」ことを最初の検証手順とすることをおすすめします——これにより問題の範囲を「プロキシポート」か「個別ツールの設定」かのどちらかに素早く絞り込むことができ、ツール自身の複雑な設定項目の中で堂々巡りすることを避けられます。

システムプロキシスイッチとTUNモード、どちらを選ぶべきか

システムプロキシと TUN モードは適用範囲がまったく異なる2つの仕組みです。選ぶ前にまず自分の使用シーンを明確にしておくことをおすすめします。

システムプロキシスイッチの特徴

システムプロキシはオペレーティングシステムやブラウザが読み取るプロキシ設定項目を書き換えるだけで、負荷が小さく切り替えが柔軟で、システムのネットワークスタックに対して非侵襲的という利点があります。欠点は適用範囲が完全ではないことです——システムプロキシの設定を能動的に読み取らないプログラム(一部のコマンドラインツール、ゲーム、一部のバックグラウンドサービス)はプロキシの適用対象外となり、環境変数やアプリ内のプロキシオプションを別途手動設定する必要があります。

TUNモードの特徴

TUN モードはシステム内に仮想ネットワークインターフェースを作成し、Clash コアがそのインターフェースを通過するすべての通信を引き受けます。アプリがプロキシを能動的に設定しているかどうかを問いません。つまり、コマンドラインツール、バックグラウンドサービス、ゲームなど、もともと「システムプロキシを通らない」通信も一括して処理され、グローバルプロキシに近い効果が得られます。代償として設定項目が複雑になり(通常はプロセスモードの追加、ルーティングテーブルやファイアウォールルールの調整が必要)、一部のシステムでは仮想ネットワークカードの作成に管理者/root権限が必要です。

2つの方式の選び方

i

TUN モードをオンにしても一部の通信がプロキシを迂回する場合、多くはルーティングテーブルやファイアウォールルールの衝突が原因です。まず他の VPN やネットワーク加速系ツールを一時的に停止して再テストし、複数のネットワーク引き受けツールが互いに衝突していないか確認しましょう。

よくある誤判定のケースと調査の心構え

システムプロキシ関連の問題では、いくつかの現象が「プロキシが効いていない」と誤判定されがちですが、実際の原因はプロキシ設定そのものにはありません:

全体の調査の流れとしては、まず Clash 自体が正常に動作し使えるノードがあることを確認し、次にシステムプロキシのスイッチや環境変数の設定が正しいことを確認し、最後に個別のアプリがこれらの設定に従っているかを確認する、という順序でまとめられます。この順序で階層ごとに検証していくことで、間違った階層で堂々巡りをして原因を見つけられないという事態を避けられます。