まず確認:UWPのループバック制限か、プロキシ自体の問題か
ブラウザーはインターネットに接続できるのに、Microsoft Storeや特定のストアアプリが読み込み中のままになる場合は、UWPのループバック制限を疑うのが一般的です。Clashのシステムプロキシは通常、127.0.0.1:7890のようなローカルアドレスを指定します。AppContainerの分離環境で動作するアプリは、既定では通常のデスクトップアプリのようにローカルのループバックサービスへアクセスできないため、プロキシの接続先に到達できないことがあります。
ただし、「ストアからインストールした」ことだけで、すべてのアプリに同じUWP制限が適用されるわけではありません。Microsoft Storeでは従来型のデスクトップアプリも配布されており、パッケージ化されたデスクトップアプリのネットワーク動作も一様ではありません。この記事で紹介するループバックの例外設定は、主にAppContainerのネットワーク分離が適用されるアプリ向けです。ストアからのダウンロード失敗をすべてこの制限のせいにしないでください。
まず確認したい3つの基本項目
- プロキシのポートを確認します。クライアントのポート設定で、HTTPポートまたは混合ポートを確認してください。ここでは例として
7890を使います。実際のポートが7897なら、以下のテストも7897に変更してください。 - Windowsのプロキシ設定を確認します。Windows 11で「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ セットアップ」→「編集」と進み、アドレスとポートがクライアントの設定と一致しているか確認してください。クライアントのシステムプロキシ切り替えを使う場合は、クライアント側に設定を管理させ、双方で値が上書きされないようにします。
- プロキシの接続先が使えるか確認します。ブラウザーで接続先のサービスを開き、Clashの接続画面またはログでリクエストを確認してください。ブラウザーでも失敗する場合は、まずサブスクリプション、選択中のノード、ルールを確認します。ループバックの例外を手当たり次第に追加するのは避けてください。
PowerShellでは、次の2つのコマンドでローカルポートと明示的なHTTPプロキシをそれぞれ確認できます。2つ目のコマンドはHTTPポート、またはHTTPに対応した混合ポートのテスト用です。SOCKS専用ポートには使えません。
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 20 https://www.microsoft.com/
3つの方法の選び方:個別アプリならループバックの例外設定
最初の2つの方法は、どちらもWindowsのループバック例外リストを変更します。GUIツールは対象を選びやすく、コマンドラインはパッケージ名の確認や設定の取り消しに便利です。3つ目の方法はTUNでネットワーク通信を制御するため、アプリがローカルのHTTPプロキシに接続する必要はありません。これは通信経路を切り替える方法であり、アプリにループバック権限を付与するものではありません。
| 方法 | 向いているケース | 設定による影響 |
|---|---|---|
| クライアント内蔵のループバック設定ツール | クライアントにUWPまたはLoopbackの設定があり、対象アプリが少数の場合 | 選択したアプリにループバックの例外を追加 |
| CheckNetIsolationコマンド | パッケージ名の確認、現状の一覧表示、特定の例外の削除が必要な場合 | パッケージファミリ名で例外リストを管理 |
| TUN仮想ネットワークアダプター | アプリがシステムプロキシに従わない場合や、より広範な通信を制御したい場合 | 通信の制御方法が変わるため、ルーティングとDNSの追加確認が必要 |
まずは最初の2つの方法のどちらかを試してください。例外を追加しても解決しない場合は、アプリがシステムプロキシを参照しているか、対象ドメインがDIRECTに振り分けられていないか、TUNが必要かを確認します。調査中は一度に変更する項目を1つに絞り、変更前後のログを残してください。
方法1:クライアント内蔵のUWPループバックツールを使う
Windows向けクライアントの中には、ループバック例外の設定ツールを内蔵しているものがあります。メニュー名は「UWPループバック」「UWP Loopback」「Loopback Exemption」などで、クライアントやバージョンによって場所が異なります。すべてのClashクライアントに同じメニューがあるとは限りません。設定画面に見当たらない場合は、次のセクションで紹介するWindows標準コマンドを使ってください。
- Clashを起動した状態にし、システムプロキシが有効であることを確認して、現在の待ち受けポートを控えます。
- クライアントの設定からUWPまたはLoopback関連の項目を探してツールを開きます。Windowsから管理者権限を求められた場合は、プログラムの入手元を確認してから許可してください。
- アプリ一覧から対象アプリ(Microsoft Storeなど)を探します。名前とパッケージ識別子の両方が表示される場合は、アイコンの見た目だけで判断せず、パッケージ識別子も確認してください。
- ローカルプロキシを使う必要のあるアプリだけを選び、ツールの「保存」または「適用」ボタンをクリックします。ボタン名はツールによって異なります。
- 対象アプリを完全に終了してから、もう一度起動します。バックグラウンドでプロセスが動き続けている場合は、タスクマネージャーでそのアプリのタスクを終了してからテストしてください。
一覧に対象アプリがない場合
まず、アプリが別のアカウントではなく、現在のWindowsユーザーにインストールされているか確認してください。一覧を更新しても見つからない場合は、PowerShellでパッケージ名を調べます。従来型のWin32アプリは、このツールで管理する対象ではない可能性があります。名前が似たパッケージを選んでも解決しません。
方法2:CheckNetIsolationで例外を個別に追加・削除する
Windows 10とWindows 11にはCheckNetIsolation.exeが標準搭載されているため、別途ループバックツールをインストールする必要はありません。「スタート」を開いてPowerShellを検索し、右クリックして「管理者として実行」を選びます。以下では、現在サインインしているユーザーにインストール済みのMicrosoft Storeを例にします。全ユーザーのパッケージを先に検索する必要はありません。
手順1:PackageFamilyNameを調べる
Get-AppxPackage -Name Microsoft.WindowsStore |
Select-Object Name, PackageFamilyName
Microsoft Storeでよく使われるパッケージファミリ名はMicrosoft.WindowsStore_8wekyb3d8bbweです。実際の値は、必ずこのPCでの出力を確認してください。指定するのはPackageFamilyNameです。バージョン番号やプロセッサアーキテクチャを含むPackageFullNameではありません。
ほかのアプリを探す場合は、まず現在のユーザーのパッケージを一覧表示し、名前で絞り込みます。次のコマンドは名前順に並べるため、対象を見つけやすくなります。
Get-AppxPackage |
Sort-Object Name |
Select-Object Name, PackageFamilyName
手順2:現在の一覧を確認して対象パッケージを追加する
CheckNetIsolation.exe LoopbackExempt -s
CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-sは現在の例外を表示し、-aは項目を追加、-nはパッケージファミリ名を指定します。最後にもう一度一覧を表示し、対象パッケージが追加されたことを確認してください。コマンドが正常に実行されても、確認できるのは権限設定が成功したことだけです。続けてアプリを再起動し、実際の通信を確認してください。
手順3:変数を使って別のアプリを処理し、パッケージ名の入力ミスを防ぐ
次の例もMicrosoft Storeを使い、まず検索結果を変数に保存してからコマンドに渡します。ほかのアプリを処理する場合は、前の手順で一覧を確認し、正確なNameを特定してから検索条件を変更してください。アプリの表示名をそのままパッケージ名として使わないでください。
$app = Get-AppxPackage -Name Microsoft.WindowsStore
if ($null -ne $app) {
CheckNetIsolation.exe LoopbackExempt -a "-n=$($app.PackageFamilyName)"
} else {
Write-Output "現在のユーザーにMicrosoft Storeのパッケージが見つかりません。"
}
取り消すときは今回追加した項目だけを削除する
CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-dで指定した例外を削除できます。1回の調査のためにリスト全体を消去すると、ほかのアプリの設定にも影響するため不要です。アクセス拒否が発生した場合は、ターミナルを管理者として起動しているか確認してください。パッケージが見つからない場合は、現在のユーザーへのインストール状況とパッケージファミリ名を調べ直し、識別子を推測しないでください。
方法3:TUNでシステムプロキシに従わないアプリの通信を制御する
アプリがWindowsのシステムプロキシを参照しない場合、ループバック例外を追加しても、その通信が自動的にClashへ送られるわけではありません。その場合は、mihomoベースのクライアントなど、TUN対応のクライアントとコアを検討できます。TUNは仮想ネットワークインターフェイスとルーティングを使って、条件に合うIP通信を制御します。アプリが127.0.0.1:7890へ直接接続する必要はありません。
- コアと権限を確認します。クライアントのコア情報で、現在使用中のコアがTUNに対応しているか確認してください。サービスモードのインストールを求められた場合は、画面の案内に従ってインストールし、サービスが起動していることを確認します。実装によっては管理者権限での起動が必要です。
- テスト条件を1つに絞ります。まずシステムプロキシの状態を記録し、システムプロキシを一時的にオフにしてTUNだけを有効にします。どちらの経路が機能しているか判別しやすくなります。
- ルーティングとDNSの制御を有効にします。クライアントのTUN設定で自動ルートやDNS関連の項目を確認してください。mihomoの設定では
tun.enable、auto-route、dns-hijackなどのフィールドがよく使われますが、設定の一部をコピーしただけですべてのクライアントに適用されるとは限りません。 - 対象アプリを再起動して接続を確認します。リクエストがクライアントの接続一覧に表示されることを確認し、適用されたルール、プロキシグループ、実際の接続先を調べてください。
TUNで通信を制御しても、すべての通信がプロキシノードを経由するわけではありません。ClashがRuleモードの場合、リクエストは引き続きルールに従って処理され、DIRECTになることも、プロキシグループに振り分けられることもあります。ストア関連のドメインがDIRECTに設定されていて、現在のネットワークから直接接続できない場合は、読み込みに失敗することがあります。
例外を追加しても解決しない場合:ログから4種類の問題を切り分ける
1. 対象のリクエストがまったく表示されない
まずアプリを完全に終了して再起動し、Windowsのシステムプロキシがクライアントの実際のポートを指しているか確認してください。ループバックリストが正しく、ブラウザーの明示的なプロキシテストも成功するのに、アプリのリクエストがまったく記録されない場合は、アプリがシステムプロキシを使っていないか、別のコンポーネントがリクエストを送信している可能性があります。同じパッケージを繰り返し追加するのではなく、TUNで比較テストしてください。
2. リクエストは表示されるが、ルールがDIRECTになる
リクエストがコアに届いているため、次はルールの振り分けを確認します。接続の詳細で、対象ドメイン、ルールの種類、接続先を確認してください。Microsoft Storeのログイン、ページ表示、ダウンロードでは異なるドメインやシステムコンポーネントが使われる場合があります。1つの接続先を直しても、ダウンロード全体が解決するとは限りません。ページが開くだけで、バックグラウンドのダウンロードも同じ経路を使うと判断しないでください。
3. プロキシへの接続後にタイムアウトする、またはDNSエラーが発生する
選択中のノードから同じ接続先にアクセスできるか確認し、ログで名前解決の失敗がないか調べてください。TUNを使っている場合は、想定どおりDNSリクエストが制御されているかも確認します。企業ネットワークの内部ドメイン、ほかのVPNのDNS、クライアントのDNS設定が競合することがあります。DNSサーバー、ノード、ルートを同時に変更せず、1つずつテストしてください。
4. ページは開くが、ダウンロードが止まったままになる
ダウンロードにはシステムサービスや別のプロセスが関わる場合があります。個別アプリのループバック例外を設定しても、PC上のすべてのサービスがユーザーのプロキシを使うわけではありません。WinHTTPのグローバルプロキシを変更するコマンドを安易に実行したり、ネットワークの切り分けの代わりにストアのキャッシュを何度もリセットしたりしないでください。ダウンロード中に新しい接続が発生するか、その接続をどのプロセスが作成しているかを確認してから、TUNの利用やルールの修正を検討します。
動作確認と設定の復元:再現できる設定を記録する
- アプリの動作を確認します:起動、ログイン、コンテンツの読み込み、ダウンロードを個別にテストしてください。1つのボタンが使えるようになっただけで、すべて解決したと判断しないでください。
- プロキシ経路を確認します:接続履歴で適用ルールと接続先を確認します。テスト後は一時的な設定を戻し、普段使っているRuleモードに戻してください。
- 変更内容を記録します:アプリのパッケージファミリ名、実際のポート番号、追加した例外を記録しておくと、後から設定を移行したり取り消したりする際に役立ちます。
- 設定を元に戻す場合:GUIツールで該当するチェックを外すか、
LoopbackExempt -dで対象パッケージを削除します。TUNをテストした場合は、TUNとシステムプロキシの状態も元に戻してください。
最短の切り分け手順は、まずローカルプロキシが使えることを確認し、制限のある対象アプリにループバック例外を追加することです。アプリがシステムプロキシを使わない場合は、その後でTUNを検討します。こうすれば、ポート、権限、ルーティング、ルールの問題を分けて確認でき、変更後にどの手順が有効だったかも判断しやすくなります。