トラブル対処 読了目安:9分

Windowsストアアプリがプロキシ経由で接続できない:UWPのループバック免除設定

UWPアプリがローカルのループバックアドレスに接続できない仕組みを解説。CheckNetIsolationコマンドやGUIツールで制限を解除する方法と、TUNへの切り替え方を紹介します。

まず確認:ストアアプリだけが接続できない?

Clash Vergeのシステムプロキシを有効にするとブラウザーではサイトを開けるのに、特定のストアアプリだけ読み込みが終わらない、ログインできない、オフラインと表示される場合は、AppContainerのループバック分離が原因かもしれません。まず確認するのはサブスクリプションではなく、アプリが127.0.0.1:7897などのローカルプロキシの待ち受けアドレスに接続できるかどうかです。

ただし、「Microsoft Storeからインストールした」からといって、必ずUWPのサンドボックスで動作しているとは限りません。ストアでは通常のデスクトップアプリ、パッケージ化されたWin32アプリなども配布されています。ループバック免除の対象となるのは、AppContainerのネットワーク分離が適用されるプロセスです。ストアアプリの接続トラブルすべてに有効な対処法ではありません。

  • ブラウザーも接続できない:プロキシのポート、ノードへの接続、サブスクリプションの読み込み状況、システムプロキシのアドレスを確認してください。
  • サンドボックスアプリ1つだけが接続できない:まずパッケージIDを確認し、そのアプリだけにループバック免除を設定してみてください。
  • システムプロキシを無効にすると復旧する:プロキシ経由の通信に原因があると考えられます。ただし、ループバック制限、アプリのプロキシ非対応、接続先サーバーによる拒否を切り分ける必要があります。
  • プロキシを無効にしても接続できない:システム時刻、アプリのサービス状況、アカウントへのログイン、ローカルネットワークを確認してください。通常、ループバック免除は最初に試す対処法ではありません。

UWPのループバック分離とシステムプロキシの関係

システムプロキシは、その設定に従うアプリにプロキシのアドレスを提供するだけで、すべてのプロセスの通信を自動的に中継するものではありません。通常、プロキシクライアントはローカルでHTTPまたは混合プロキシのポートを待ち受けます。アプリがそのポートに接続すると、コアがルールに基づいて直接接続するか、プロキシノードを経由するかを選択します。

ネットワーク分離が適用されるAppContainerアプリでは、ローカルのループバックアドレスへのアクセスが既定で制限されています。そのため、プロキシコアもブラウザーも正常に動作していても、アプリが最初にローカルプロキシへ接続する段階で失敗することがあります。ここでいう「ループバック」とは、IPv4の127.0.0.1やIPv6の::1のように、同じコンピューター自身へ接続することです。リモートノードへの接続ではありません。

ループバック免除でできること・できないこと

  • ループバック免除を設定すると、指定したパッケージのAppContainerからローカルのループバックサービスへアクセスできるようになります。この制限によってローカルプロキシへの接続が妨げられている場合に有効です。
  • アプリにプロキシのアドレスを自動設定する機能ではなく、すべてのネットワークライブラリにWindowsのシステムプロキシを使わせるものでもありません。
  • 無効なサブスクリプション、DNSエラー、ノードのタイムアウト、証明書エラー、アプリ独自の地域制限は解消できません。
  • Clash/mihomoのルールは変更されません。免除後に直接接続するかプロキシを経由するかは、有効な設定とプロキシグループによって決まります。

ループバック制限を回避するために、待ち受けアドレスを0.0.0.0に変更したり、Windowsファイアウォールを無効にしたりしないでください。ローカルサービスの公開範囲が広がる一方で、アプリの分離境界を適切に解決できません。

CheckNetIsolationでアプリごとに免除を設定する

1. ローカルプロキシが正常に動作することを確認

Windows 11では「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ セットアップ」を開き、アドレスとポートを確認します。Windows 10では「設定」→「ネットワークとインターネット」→「プロキシ」を開きます。クライアントがシステムプロキシを管理している場合は、設定が上書きされないよう、まずクライアント側で待ち受けポートを確認してください。

PowerShellを開き、ポートの待ち受け状態と、プロキシを明示したHTTPSリクエストをテストします。

Test-NetConnection -ComputerName 127.0.0.1 -Port 7897
curl.exe --proxy http://127.0.0.1:7897 --head --connect-timeout 10 https://www.microsoft.com/

TcpTestSucceeded : TrueはTCPポートに接続できることを示すだけで、ノードやWebサイトへの接続まで保証するものではありません。2つ目のコマンドでは接続タイムアウトを10秒に設定しています。HTTPレスポンスが返れば、そのリクエストでアプリケーション層の応答を受け取れたことになります。接続が拒否された場合は、ポートを修正するかコアを起動してください。免除の設定に進む必要はありません。

2. アプリのPackageFamilyNameを確認

スタートメニューでPowerShellを検索し、「管理者として実行」を選択します。以下ではMicrosoft Storeのパッケージを例に、現在のユーザーにインストールされているパッケージIDを確認します。

Get-AppxPackage -Name Microsoft.WindowsStore |
  Select-Object Name, PackageFamilyName, PackageFullName

コマンドに指定するのはPackageFamilyNameです。アプリの表示名や、バージョン・アーキテクチャ情報を含むPackageFullNameではありません。Microsoft Storeでよく使われるパッケージファミリー名はMicrosoft.WindowsStore_8wekyb3d8bbweですが、実行前に実際の検索結果を確認してください。

別のアプリが対象の場合は、まず現在のユーザーのパッケージ一覧を表示し、Nameで探してください。表示名が似ているという理由だけで、該当するすべてのパッケージに免除を設定しないでください。

Get-AppxPackage |
  Sort-Object Name |
  Select-Object Name, PackageFamilyName

検索結果が表示されない場合は、アプリが現在のアカウントにインストールされているか、通常のデスクトップアプリではないかを確認してください。別の管理者アカウントで昇格していると、現在のユーザーのパッケージ一覧が異なる場合があります。「結果なし」をそのままパッケージの破損と判断しないでください。

3. 免除を追加して一覧を確認

管理者権限のターミナルで以下のコマンドを実行します。1つ目でパッケージを追加し、2つ目で現在の免除一覧を表示します。

CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s

-aは追加、-nの後にはパッケージファミリー名を指定し、-sは一覧の照会を意味します。一覧はSIDやパッケージ名を含む形式で表示されることがあり、表示方法はシステム環境によって異なります。「アクセスが拒否されました」と表示された場合は、ターミナルが管理者権限で起動されているか確認してください。名前に関するエラーが出た場合は、指定した項目をもう一度確認してください。

作業中の内容を保存し、対象アプリを完全に終了してからスタートメニューで起動し直します。バックグラウンドプロセスが残っている場合は、タスクマネージャーで対象アプリのものだと確認できたプロセスを終了してから再試行してください。用途のわからないシステムプロセスは終了しないでください。

4. 取り消せる形で設定する

テスト後に権限が不要になった場合は、追加した項目だけを削除できます。

CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s

-dは削除を意味します。操作した日付、対象パッケージ、再テストの結果を記録しておくと便利です。既存の免除をまとめて削除すると、ほかのアプリ用に設定されたローカル通信に影響する可能性があるため、避けてください。

GUIツールを使う場合:対象パッケージだけを選択

使用中のクライアントに「UWPループバック免除」の項目があれば、そこからGUI管理ツールを起動できる場合があります。ただし、項目の場所や提供状況はクライアント、派生版、バージョンによって異なります。古いクライアントのボタンの場所をClash Verge Revにそのまま当てはめないでください。項目が見つからない場合は、上記のシステムコマンドを使えばよく、ツールを追加でインストールする必要はありません。

代表的なGUIツールには、Fiddler ClassicのWinConfig/AppContainer Loopback Exemption Utilityがあります。すでにシステムにインストールされ、信頼できるツールであれば、ループバック権限の管理に利用できます。ここで使うのは免除の管理機能です。HTTPS復号を有効にしたり、キャプチャ用のルート証明書をインポートしたりする必要はありません。

  1. ループバック免除ツールを管理者権限で起動し、ローカルのアプリパッケージが一覧に表示されるまで待ちます。
  2. アプリ名とパッケージIDで対象を特定します。名前だけでは判断できない場合は、PowerShellに戻って確認してください。
  3. ローカルプロキシへのアクセスが必要なアプリだけにチェックを入れ、Save Changesなどの保存ボタンをクリックします。
  4. CheckNetIsolation.exe LoopbackExempt -sを実行して設定を確認し、対象アプリを再起動してテストします。

TUNに切り替える:システムプロキシを使わないアプリに適した方法

ループバック免除を設定しても、アプリがシステムプロキシを参照しないなら、一覧を変更し続けてもHTTPプロキシが自動的に使われるようにはなりません。その場合はmihomoのTUNモードを検討できます。仮想ネットワークインターフェースとルーティングを使って、条件に合うIP通信を取り込み、ルールに従って処理します。

TUNは「アプリがローカルのHTTPプロキシに自分で接続する」方式とは異なる経路で通信を取り込みます。そのため、システムプロキシを使わないアプリの通信に使われることがあります。ただし、UWPのネットワーク分離を無条件に解消するスイッチではありません。アプリの権限、ファイアウォール、ルーティング、DNSの設定も通信に影響します。

  1. 元に戻せるよう、現在のシステムプロキシ、TUN、DNS、プロキシグループの状態を記録しておきます。
  2. Clash Verge Revでサービスモードが使用可能であることを確認してから、TUNを有効にします。サービスのインストール方法や設定項目の場所は、実際に使用しているバージョンの画面で確認してください。初回のサービスインストールでは管理者権限が必要になる場合があります。
  3. 通信経路を切り分けるため、テスト時はシステムプロキシを無効にしてTUNだけを有効にします。比較の際に、別のVPNやプロキシクライアントを同時に起動しないでください。
  4. 同じアプリで同じ操作を再度試し、トレイアイコンが点灯しているかだけでなく、クライアントの接続ログ、対象ドメイン、適用されたルールも確認します。

TUNを有効にした後、ブラウザーでもドメインを解決できない場合は、ループバック免除を追加し続けるのではなく、まずDNSとルーティングを確認してください。社内VPN、仮想マシンのネットワーク、ほかのトンネルを使用していると、自動ルーティングが競合する場合があります。テストを中止して元の状態に戻し、項目ごとに比較してください。また、TUNを使ってもアプリのすべての通信が同じノードへ送られるわけではありません。ルールでDIRECTが選ばれれば、対象への通信は直接接続されます。

免除後も解決しない場合:接続段階ごとに切り分ける

症状 まず確認する項目 次の手順
ローカルポートの接続テストに失敗する コアが起動しているか、ポート番号が一致しているか 実際の待ち受けポートを確認して再テストする
プロキシを指定したcurlリクエストも失敗する ノード、DNS、ルール、接続先への通信 免除を追加し直す前に、プロキシ経路を修復する
免除は設定済みだが、アプリの接続ログがない パッケージID、アプリのプロキシ対応、バックグラウンドプロセス アプリを完全に終了して再テストし、必要ならTUNと比較する
接続ログはあるが、ログインに失敗する 適用されたルール、サーバーの応答、アカウントの状態 対象ドメインとエラーコードを確認する

接続ログに記録がないことだけで、ループバック分離が原因とは断定できません。アプリがリクエストを送信していない、キャッシュを使っている、または通信が取り込み対象外の経路を通っている可能性があります。一方、対象ドメインが記録され、想定したルールが適用されているなら、DNSの結果、ノードの出口、サーバーの応答を重点的に確認してください。

netsh winhttp import proxy source=ieをUWPのループバック修復コマンドとして使わないでください。このコマンドはWinHTTPのプロキシ設定をインポートするもので、AppContainerのループバック権限は変更しません。また、対象アプリが使用するネットワークスタックが変わるとは限りません。特定のサービスがWinHTTPを使っていると確認できた場合に限り、影響範囲を理解したうえで個別に対応してください。

再現可能な調査記録には、少なくともWindowsのバージョン、クライアントとコアのバージョン、アプリのパッケージファミリー名、プロキシの待ち受けポート、システムプロキシとTUNの有効・無効、エラーが発生する具体的な手順を含めます。システムのバージョンはwinverで確認できます。ノードの変更、DNSの変更、TUNの有効化を同時に行うのではなく、変更する項目を一度に1つにすると原因を特定しやすくなります。ルールや通信の取り込み設定については設定リファレンスを、基本的な接続トラブルについてはよくある質問とトラブル対処をご覧ください。

Clash をダウンロードOSとインストーラーを選択