WindowsストアアプリがClash経由で通信できない場合の対処法:UWPのループバック制限を解除

WindowsストアアプリがClashのプロキシを使えない原因となるUWPのネットワーク分離を解説。クライアント内蔵ツールまたはCheckNetIsolationコマンドで制限を解除する方法を紹介します。

まず確認:ループバックがブロックされているか

ブラウザーは通信できるのに、特定のストアアプリだけ接続に失敗する場合は、ループバック制限を優先して確認しましょう。ブラウザーでもサイトを開けない場合は、設定が有効か、ノードが利用可能か、プロキシポートが待ち受け中かを先に確認してください。ループバックの例外設定では、無効なサブスクリプションやパスワードの誤り、接続不能なサーバーは解決できません。

UWPはWindowsのアプリプラットフォームの一つです。UWPアプリは通常、アプリからアクセスできる範囲を制限する隔離環境のAppContainerで動作します。ループバックとは、アプリから127.0.0.1や::1などのローカルアドレスにアクセスすることです。Clashのローカルプロキシはこれらのアドレスで待ち受けることが多いため、システムプロキシの接続先がClashに設定されていても、隔離されたアプリから接続できない場合があります。

ただし、Microsoft Storeからインストールしたアプリが、必ずUWPアプリとは限りません。ストアでは従来のデスクトップアプリやパッケージ化されたデスクトップアプリも配布されています。アプリの種類やプロキシ設定、接続ログを確認して原因を判断し、ストアアプリの通信問題をすべてループバック制限のせいにしないようにしましょう。

確認できる現象 優先して確認する項目 次の対応
ブラウザーと対象アプリの両方で通信できない コア、ポート、ノード、ルール まずローカルプロキシへの接続を確認
ブラウザーは正常だが、隔離アプリは失敗し、Clashに該当する接続がない ループバック制限、またはアプリがシステムプロキシを使用していない 対象パッケージに例外を追加して再確認
Clashにアプリのリクエストが表示されるが、接続がタイムアウトする 適用されたルール、ノード、DNS、接続先サービス 接続の詳細を確認し、例外を何度も追加しない
ストア画面は使えるが、ダウンロードに失敗する ダウンロードサービスやバックグラウンドコンポーネントの通信経路 画面表示とバックグラウンドのダウンロード通信を切り分ける

操作前に確認:システムプロキシとローカルポート

実際に使用するポートを確認してから、分離制限を解除します。ここでは例として127.0.0.1:7890を使います。これはサンプルのアドレスであり、すべてのクライアントの初期値ではありません。HTTPポートはHTTPプロキシのリクエストを受け付けます。混合ポートは通常、HTTPとSOCKSの両方を受け付けます。Windowsの手動プロキシには、HTTPプロキシに対応したポートを指定してください。SOCKS専用ポートを誤って指定しないようにしましょう。

  1. クライアントを開き、使用可能な設定が選択されていることを確認します。ポート設定または実行中の設定で、portやmixed-portの値を確認してください。現在有効な設定を基準にします。
  2. クライアントの「システムプロキシ」を有効にします。Windows 11では、「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ セットアップ」→「編集」と進み、アドレスとポートを確認してください。
  3. Windows 10では、「設定」→「ネットワークとインターネット」→「プロキシ」と進み、「プロキシサーバーを使う」の設定を確認します。クライアントがこれらの値を自動設定する場合もあるため、確認のために重ねて手動変更する必要はありません。
  4. まず、正常に表示できることが分かっているHTTPSページをブラウザーで開き、クライアントの「接続」または「ログ」パネルを確認します。ブラウザーで個別のプロキシ拡張機能を使っている場合、その接続成功だけではWindowsのシステムプロキシが正常とは判断できません。

コマンドでポートの待ち受けを確認

PowerShellで次のコマンドを実行します。実際のポートが7897の場合は、コマンド内の7890を7897に変更してください。待ち受けの結果が表示されれば、このPC上のプログラムがそのポートを待ち受けています。さらに、そのプログラムが現在使用中のコアであることも確認してください。

Get-NetTCPConnection -State Listen -LocalPort 7890 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Test-NetConnection -ComputerName 127.0.0.1 -Port 7890

TcpTestSucceeded : Trueは、このTCP接続が確立したことを示すだけで、接続先のWebサイトやノードが正常であることを意味しません。通常、PowerShellは対象アプリの隔離環境では実行されないため、この確認だけではUWPアプリにループバックへのアクセスが許可されたことも証明できません。

方法1:クライアント内蔵のUWPツールを使う

クライアントにUWPツールがある場合は、アプリを個別に選択して許可しましょう。Windows向けクライアントの中には、ループバックの例外を設定する画面が用意されているものがあります。メニュー名は「UWPループバック」「Loopback」「UWP Loopback」などです。これはGUIクライアント独自の追加機能であり、Clashやmihomoのコアに共通するメニューではありません。

たとえば、旧バージョンのClash for Windows 0.20.xでは、「General」ページに「UWP Loopback」の項目があります。この手順は既存のインストール環境を確認するためのもので、他のクライアントにそのまま当てはめることはできません。使用中のクライアントに同じ項目がない場合は、次のセクションにあるWindowsのコマンドを使ってください。

  1. UWPループバックツールを開きます。Windowsのアクセス許可確認が表示されたら、操作を開始したのが現在のクライアントに付属するツールであることを確認してから、管理者権限への昇格を許可してください。
  2. アプリ一覧から対象アプリを探します。一覧での表示名がスタートメニューの名前と異なる場合があるため、必要に応じて発行元とパッケージ名も確認してください。
  3. ローカルプロキシを使う必要があるアプリだけにチェックを入れ、保存または適用をクリックします。ツールによっては、ボタンが「Save Changes」や「Apply」と表示されます。
  4. 対象アプリを完全に終了し、バックグラウンドで動作していないことを確認してから、再度起動し、通信が必要な操作を試します。
  5. Clashの接続またはログパネルを開き、対象ドメインへの新しいリクエストが表示されるか確認します。アプリのトップ画面にキャッシュが表示されているだけで、成功と判断しないでください。

方法2:CheckNetIsolationでループバックの例外を追加

Windows標準のCheckNetIsolationを使うと、例外リストの確認と変更ができます。ここではMicrosoft Storeアプリを例に説明します。現在のユーザーアカウントで、管理者としてPowerShellを開いてください。Windows 11では、スタートボタンを右クリックして「ターミナル (管理者)」を選ぶ方法もあります。別の管理者アカウントの資格情報でターミナルを起動する場合、表示されるアプリパッケージが対象ユーザーのものか確認してください。

手順1:アプリの正確なパッケージファミリー名を調べる

コマンドで必要なのはPackageFamilyName(パッケージファミリー名)です。デスクトップのショートカット名や、バージョン番号とアーキテクチャを含むPackageFullNameとは異なります。まず、現在のユーザーにインストールされているストアアプリのパッケージを検索します。

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

一般的な環境では、パッケージファミリー名としてMicrosoft.WindowsStore_8wekyb3d8bbweが表示されますが、実際の操作では必ずこのPCでの出力を確認してください。対象がストア自体ではない場合は、パッケージ名の一部で検索できます。たとえば、Xbox関連のパッケージを検索するには次のようにします。

Get-AppxPackage -Name "*Xbox*" |
  Select-Object Name, PackageFamilyName

ワイルドカード検索では複数の結果が表示されることがあります。すべての結果をリストに追加したり、表示名をパッケージファミリー名として使ったりしないでください。結果が表示されない場合は、アプリが現在のアカウントにインストールされているか、この方法で識別できるアプリパッケージかを確認してください。

手順2:対象パッケージに例外を追加する

次のPowerShellコードは、現在のユーザーのMicrosoft Storeパッケージを取得し、ループバック例外リストに追加します。アプリがインストールされていない場合に処理を続行しないよう、コードには空の値を確認する処理があります。他のアプリに対して実行する場合は、Microsoft.WindowsStoreを確認済みの正確なパッケージ名に置き換えてください。

$package = Get-AppxPackage -Name Microsoft.WindowsStore

if ($null -eq $package) {
    throw "現在のユーザーにMicrosoft.WindowsStoreアプリパッケージが見つかりません。"
}

$family = $package.PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -a "-n=$family"

-aは追加を表し、-nの後ろにはパッケージファミリー名を指定します。アクセス拒否のメッセージが表示された場合は、まずターミナルが管理者権限で起動されているか確認してください。アクセス許可の問題を回避するために、システムのセキュリティ機能を無効にしないでください。

手順3:例外リストを確認してアプリを再起動する

CheckNetIsolation.exe LoopbackExempt -s

-sは現在の例外リストを表示するオプションです。対象のパッケージファミリー名が含まれているか確認してください。一部の項目はセキュリティ識別子として表示される場合もあります。追加成功と表示されたら、対象アプリをいったん終了して再起動し、新しいネットワークリクエストを発生させます。必要に応じてサインアウトしてから再度サインインし、以前のプロセスが残っている影響を取り除いてください。

設定の反映を確認し、安全に取り消す方法

アプリの動作とClashの接続記録を両方確認しましょう。設定の効果は、コマンドが成功したかだけでなく、変更前後に同じ操作を行って比較するのが確実です。テスト中は同じノードと同じ設定を使い、複数の条件を同時に変更しないでください。

  1. 変更前の症状は、「検索できない」など具体的に記録し、「通信できない」のように曖昧な表現は避けます。
  2. 対象パッケージにループバック例外を追加し、アプリを完全に終了してから再起動します。
  3. 同じ検索や更新操作をもう一度行い、アプリに新しいサーバー応答が返るか確認します。
  4. Clashで該当する時刻の接続、ドメイン、適用されたルールを確認します。ルールモードでDIRECTに一致した場合は、リクエストが直接接続に割り当てられたことを示します。ループバック設定の失敗を意味するわけではありません。

不要になったら、パッケージ単位で削除

取り消す場合は-dを使います。ここでもMicrosoft Storeを例に、パッケージファミリー名を再取得してから削除するため、以前のターミナルセッション内の変数には依存しません。

$package = Get-AppxPackage -Name Microsoft.WindowsStore

if ($null -eq $package) {
    throw "現在のユーザーにMicrosoft.WindowsStoreアプリパッケージが見つかりません。"
}

$family = $package.PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -d "-n=$family"
CheckNetIsolation.exe LoopbackExempt -s

削除後にもう一度リストを表示し、対象の項目が削除されたことを確認してください。アプリ一つの設定を取り消すために、例外をすべて消去しないでください。他のアプリや開発環境、デバッグツールが既存の項目を必要としている場合があります。アプリを再インストールしてパッケージファミリー名が変わった場合は、改めて確認してください。以前の項目が残っているだけで、新しいインストールにも許可が適用されたと判断しないでください。

例外を追加してもプロキシを使わない場合:通信経路を順に確認

システムプロキシ、グローバルモード、TUNは別の設定

「グローバルモード」にしても、すべてのプロセスが自動的にClashへ接続するわけではありません。グローバルモードが主に決めるのは、コアに届いた通信の出口です。アプリがそもそもシステムプロキシを使っていない場合、モードを切り替えても自動的にコアへ通信が流れることはありません。「リクエストが届いていない」のか、「届いているが出口が違う」のかを切り分けましょう。

TUNは仮想ネットワークインターフェースを使って通信を取り込む方式です。mihomoを使うクライアントでは、該当する設定から有効にできることが多いものの、対象の通信が取り込まれるかどうかは、ルーティングやDNS、権限、除外設定にも左右されます。TUNはループバック例外の別名ではなく、すべてのストアアプリの問題を解決できるとは限りません。TUNを試す場合は、現在の設定を保存し、一度に変更する条件を一つに絞って接続ログを確認してください。

画面表示とバックグラウンドのダウンロードは、別のプロセスが処理する場合がある

Microsoft Storeのページ表示、アプリのダウンロード、更新処理は、それぞれ異なるコンポーネントを経由することがあります。ストアのフロントエンドパッケージに例外を追加しても、バックグラウンドサービスが同じユーザーのシステムプロキシを使うとは限りません。「ページは開くがダウンロードに失敗する」場合は、Windowsのダウンロードサービスやネットワークエラー、実際の接続記録を確認してください。関係のないアプリパッケージを次々に追加するのは避けましょう。

WinHTTPの設定を万能な修復手段として使わない

Windowsのユーザープロキシ設定とWinHTTPのプロキシ設定は、完全に同じ仕組みではありません。WinHTTPは一部のプログラムやシステムサービスが使用するネットワークインターフェースです。設定を変更すると、他の処理にも影響することがあります。次の読み取り専用コマンドで現在の状態を確認できますが、リクエスト元を特定する前に、設定をむやみにインポートしたり上書きしたりしないでください。

netsh winhttp show proxy

ログに対象のリクエストが記録されている場合は、次にドメインの名前解決、適用ルール、ノードの状態を確認します。リクエストがまったくない場合は、アプリが独自のプロキシを使用していないか、別のプロセスが通信していないか、ループバック制限の対象となるアプリの種類かを確認してください。設定項目を確認するにはYAMLマニュアルを、一般的な接続の問題についてはよくある質問をご覧ください。

Clashをダウンロード