まずUWPのループバック制限が原因か確認する

典型的な症状は、ブラウザーはClash経由で正常にアクセスできるのに、Microsoft Store、Xbox、フォト、メールなどのストアアプリだけがオフラインのままになることです。Microsoftアカウントのログイン画面が読み込み中のまま進まない、または「インターネット接続を確認してください」と表示される場合もあります。Clashのシステムプロキシを無効にすると、逆にこれらのアプリが直接接続できることもあります。

この違いは、通常ノード全体の障害を意味しません。従来のデスクトップアプリは、たとえば 127.0.0.1:7890 でClashが待ち受けるローカルプロキシポートへ接続できます。一方、AppContainerサンドボックスで動作するUWPアプリは、既定ではローカルのループバックアドレスに自由にアクセスできません。システムプロキシがClashを指していても、アプリはローカルプロキシポートへの最初の接続を確立できないのです。

ループバック制限に当てはまる3つの特徴

  • Chrome、Firefox、通常のWin32アプリはインターネットに接続できるのに、一部のストアアプリだけが失敗する。
  • Clashのシステムプロキシが有効で、プロキシアドレスが 127.0.0.1、ポートが一般的な 7890 になっている。
  • 対象アプリがリクエストを送信しても、Clashの接続一覧に該当する接続がなく、ログにもドメインのマッチ記録がない。

まず一般的なプロキシ障害を切り分ける

  1. Clashクライアントを開き、カーネルが起動中であることを確認します。起動失敗や再起動の繰り返しになっていないかも確認してください。
  2. 「設定」→「システムプロキシ」を開き、システムプロキシが有効になっていることを確認します。
  3. 現在の設定でHTTPまたはMixedの待ち受けポートが提供されているか確認します。SOCKSだけが待ち受けている場合、Windowsのシステムプロキシから通常のHTTPプロキシとして直接利用することはできません。
  4. ブラウザーで、出口IPを確認できるページを開き、通常のデスクトップアプリがプロキシ経由になっていることを確認します。
  5. 別の利用可能なノードに切り替えてもう一度テストし、特定経路のタイムアウトを切り分けます。

UWPがローカルのClashポートへ直接接続できない理由

UWPアプリは通常、AppContainerの隔離環境で動作します。WindowsはアプリにパッケージID、機能の宣言、制限付きのネットワーク境界を割り当てます。ループバックアドレス 127.0.0.1 とIPv6アドレス ::1 は現在のコンピューターを指しますが、サンドボックスアプリは既定では、別のローカルプロセスが提供するサービスへ接続できません。

Clashのシステムプロキシモードは、まさにこのローカル待ち受けを利用します。一般的な設定では、WindowsがHTTPリクエストを 127.0.0.1:7890 に渡し、Clashが接続を受け取ってから、ルールに従って DIRECT、プロキシノード、その他のポリシーグループを選択します。UWPアプリが 127.0.0.1:7890 へ接続すると、システム境界によって遮断されるため、その後のルールマッチングは発生しません。

mixed-port: 7890
allow-lan: false
mode: rule

上記の allow-lan: false は、他のLAN機器が待ち受けポートへアクセスできるかどうかを制御する設定であり、UWPのAppContainer権限を管理するものではありません。true に変更してもループバック除外の代わりにはならず、LANからのアクセス範囲が変わるだけです。ローカルのストアアプリを処理する場合は、対象アプリのLoopback Exempt状態を変更してください。

ループバック除外で実際に変わること

除外設定を行うと、指定したパッケージがWindowsのループバック例外リストに追加され、そのパッケージからローカルサービスへ接続できるようになります。Clashが自動的に起動したり、アプリの代わりにノードを選択したり、すべての通信をプロキシへ強制的に送ったりするわけではありません。システムプロキシ、Clashの待ち受けポート、ルールモードは引き続き正しく設定する必要があります。

項目 担当する内容 失敗した場合の状態
Windowsのシステムプロキシ システムプロキシに対応するリクエストをローカルアドレスへ向ける アプリが直接接続し、Clashにリクエストが表示されない
UWPのループバック除外 指定したAppContainerからローカルプロキシへアクセスできるようにする アプリが 127.0.0.1:7890 に接続できない
Clashのルール ドメイン、IP、ルールセットに基づいて出口を選択する カーネルに入った接続が誤ったポリシーにマッチする
プロキシノード リモート転送を確立して出口を提供する Clashにリクエスト記録はあるが、タイムアウトやハンドシェイクエラーが発生する

方法1:クライアント付属のループバックツールで個別に許可する

Windows向けの一部のClash GUIクライアントには、UWP Loopbackツールが統合されています。従来のClash for Windowsを例にすると、入口は「General」→「UWP Loopback」にあります。メンテナンス系統によっては「設定」→「ネットワーク」や「ツール」に移動している場合もあります。名称には通常「UWP」「Loopback」「ループバック」のいずれかが含まれます。

GUIでの操作手順

  1. まずClashを完全に起動し、Mixed PortまたはHTTP Portが待ち受け中であることを確認します。一般的な値は 7890 です。
  2. ループバックツールを開きます。Windowsで権限の確認が表示された場合は、プログラムの入手元を確認したうえで、システム設定の変更を許可します。
  3. ツールがインストール済みのAppContainerパッケージを読み取るまで待ちます。通常はアプリ名とPackage Family Nameが一覧に表示されます。
  4. ネットワーク障害が発生しているアプリだけにチェックを入れます。たとえばMicrosoft StoreやXboxです。すべてのパッケージを一度に選択する必要はありません。
  5. 「Save Changes」「Apply」、または該当する保存ボタンをクリックして、除外リストをシステムへ書き込みます。
  6. 問題のアプリを完全に終了してから、スタートメニューで再起動します。ウィンドウを最小化しただけでは、古いネットワークプロセスが残ることがあります。
  7. Clashのシステムプロキシを有効にしたまま、ログイン、ダウンロード、ページ更新などをもう一度実行します。

個別に追加する理由

個別に許可すれば、設定を戻しやすく、実際に影響を受けているパッケージも特定しやすくなります。アカウント認証時だけ別のIDサービスパッケージを呼び出すシステムコンポーネントもあります。前面のアプリだけにチェックを入れてもログインできない場合は、どのウィンドウで問題が起きるかを確認し、Microsoft Account、Xbox Identity Provider、またはシステムのIDコンポーネントを追加してください。

アプリを更新しても、Package Family Nameは通常維持されるため、一般的なバージョンアップで設定をやり直す必要はありません。アンインストール後の再インストール、別のリリースチャネルへの切り替え、アプリのパッケージID変更が行われた場合は、以前の除外設定が現在のパッケージに対応しなくなることがあります。その際は再確認してください。

方法2:CheckNetIsolationコマンドで正確に設定する

GUIツールがない場合は、Windows標準の CheckNetIsolation.exe を使用できます。コマンドラインなら現在の一覧を確認し、変更対象を記録したり、ツールで正しい名前が表示されないパッケージを処理したりできます。スタートメニューで「ターミナル」を検索し、「管理者として実行」を選ぶことをおすすめします。

手順1:アプリのパッケージファミリ名を確認する

PowerShellで次のコマンドを実行し、アプリ名とPackage Family Nameを一覧表示します:

Get-AppxPackage | Select-Object Name, PackageFamilyName

一覧が長い場合は、名前で絞り込めます。次の例ではMicrosoft Storeを検索します:

Get-AppxPackage *WindowsStore* |
  Select-Object Name, PackageFamilyName

Microsoft Storeでよく使われるパッケージファミリ名は Microsoft.WindowsStore_8wekyb3d8bbwe です。実際の操作では、現在のPCでコマンドが出力した値を使用し、表示名からパッケージファミリ名を推測しないでください。

手順2:現在のループバック除外を確認する

CheckNetIsolation.exe LoopbackExempt -s

出力には、ループバックアクセス権を取得しているAppContainerが表示されます。先に確認しておけば、重複追加を避けられるだけでなく、変更前の状態も記録できます。対象パッケージがすでに存在する場合は、システムプロキシが無効、ポートが一致していない、アプリがシステムプロキシに従わない、Clashのルールが誤っているといった原因が考えられます。

手順3:指定したアプリを追加する

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

-a は追加を表し、-n の後には完全なPackage Family Nameを入力する必要があります。コマンドが成功したら、もう一度 -s を実行して対象パッケージが一覧に入ったことを確認します。その後、アプリのプロセスを終了して再起動してください。1回の変更のためにPC全体を再起動する必要はありません。

取り消す場合は個別の項目を削除する

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

-d は指定したパッケージの除外だけを削除します。トラブルシューティング中に一覧全体を消去するのは避けてください。他のローカル開発ツールやシステムアプリに必要な例外が設定されている可能性があります。変更前後の確認結果を残しておけば、問題解決後に元の状態へ戻しやすくなります。

除外設定が本当に有効か確認する

コマンドが成功したという表示は、システムが設定を受け付けたことを示すだけです。アプリのリクエストが実際にClashへ入っていることも確認する必要があります。待ち受けポート、アプリの動作、Clashの接続記録を同時に観察し、ノード切り替えや一時的なネットワーク回復を除外設定の成功と取り違えないようにしてください。

Clashが想定ポートで待ち受けているか確認する

Windowsターミナルで次を実行します:

netstat -ano | findstr :7890

通常は 127.0.0.1:78900.0.0.0:7890、または対応するIPv6アドレスが LISTENING と表示されます。設定が mixed-port: 7891 の場合、システムプロキシも7891を指していなければなりません。ポート番号が一致しなければ、ループバック権限が正しくてもアプリは接続に失敗します。

Clashの接続パネルでリクエストを確認する

  1. 古い接続を消去するか監視を一時停止し、現在の時刻を記録します。
  2. 対象のUWPアプリを再起動します。
  3. ストアのトップページを更新する、アプリを検索する、アカウントのログインページを開くなど、再現可能な操作を実行します。
  4. Connectionsまたは接続パネルに、新しいドメイン、対象IP、マッチしたルールが表示されるか確認します。
  5. リクエストが表示されるのにタイムアウトする場合は、ノードを切り替えるか、該当するポリシーグループを確認します。
確認結果 考えられる原因 次の手順
アプリが復旧し、Clashに接続が表示される ループバック除外が有効になった 現在の個別除外を維持する
アプリは失敗し続け、Clashにも接続が表示されない パッケージの選択ミス、プロセス未再起動、またはアプリがシステムプロキシを無視している パッケージファミリ名を確認し、関連プロセスを終了する
Clashに接続はあるが、継続的にタイムアウトする ノード、DNS、またはポリシーグループの障害 ノードを切り替え、ルールマッチングを確認する
システムプロキシを無効にすると直接接続が復旧する ローカルプロキシ経路がまだ確立されていない 待ち受けポートとループバック一覧を確認する

除外後も接続できない場合の6項目チェック

1. システムプロキシのポートとClashの設定が一致していない

Clashの設定が 7890 から 7897 に変更されたのに、Windowsのプロキシ設定が古いポートのままになっている可能性があります。「設定」→「ネットワークとインターネット」→「プロキシ」で、現在の手動プロキシアドレスを確認し、クライアントに表示されるMixed PortまたはHTTP Portとも照合してください。クライアントにシステムプロキシを自動管理させている場合は、いったん無効にしてから再度有効にすると改善することがあります。

2. 前面のアプリだけを許可し、IDコンポーネントが制限されたまま

Microsoftアカウントへのログインでは、独立したIDプロキシ、Xbox Identity Provider、またはシステムのWebアカウントコンポーネントが呼び出されることがあります。ストアのトップページは開けるのにログインボタンが回り続ける場合、基本のストアパッケージは許可済みでも、認証フローに関係する別のパッケージが追加されていない可能性があります。表示されたウィンドウ名とパッケージ一覧をもとに1つずつテストし、同じストアパッケージを繰り返し追加しないでください。

3. アプリがネットワークプロセスを再作成していない

ウィンドウを閉じても、UWPのバックグラウンドタスクが終了するとは限りません。「タスクマネージャー」→「プロセス」を開き、対象アプリと関連プロセスを終了してから、スタートメニューで起動してください。それでも古い状態が残る場合は、現在のWindowsアカウントからサインアウトして再度サインインします。

4. アプリ自体がWindowsのシステムプロキシを使用していない

ループバック除外はローカルへのアクセスを許可するだけで、アプリにシステムプロキシの読み取りを強制するものではありません。一部のアプリは独自のネットワークスタック、固定された直接接続、特殊なUDP通信を使用するため、システムプロキシモードでは対象の通信を処理できません。クライアントでmihomoカーネルベースのTUNモードを有効にし、仮想ネットワークインターフェース経由で通信をカーネルに取り込む方法があります。

有効化の場所は通常「設定」→「TUNモード」です。オンにしたら、仮想ネットワークアダプターの作成に必要な権限をクライアントが取得していることを確認し、システムに対応するインターフェースが現れているか確認してください。TUNとシステムプロキシでは処理経路が異なるため、有効化する前に現在の設定を保存し、ポート、DNS、ルールを同時に変更して切り分けが複雑にならないようにします。

5. DNSまたはルールがリクエストを誤った出口へ送っている

接続がClashのパネルに表示されているなら、ループバックの問題はほぼ解決しています。次に、マッチしたルールとポリシーグループを確認します。たとえばアカウントのドメインが DIRECT に送られているものの、現在のネットワークからは直接接続できない場合があります。DNSが異常な結果を返すと、ハンドシェイク失敗、タイムアウト、再試行の繰り返しとして現れることもあります。この場合は、ログに記録された実際のドメインを対象にルールを調整し、ループバック項目を追加し続けないでください。

6. ポートが別のプログラムに使用されている

netstat で7890が別のPIDに使用されている場合、Clashがポートのバインドに失敗している可能性があります。タスクマネージャーの「詳細」タブでPIDからプロセスを探すか、設定の mixed-port7897 など未使用のポートへ変更し、設定を再読み込みしたうえでシステムプロキシも更新してください。

設定後も安定して使うためのおすすめ

実際に必要なパッケージだけを残します。対象アプリのPackage Family Name、Clashの待ち受けポート、変更日を記録しておけば、OSの再インストールやクライアント変更後もすぐに復元できます。使わなくなったアプリは、CheckNetIsolation.exe LoopbackExempt -d で該当する項目を削除できます。

普段はMixed Portを1つ、たとえば7890に固定し、クライアントにシステムプロキシを管理させます。切り分け中にカーネル、サブスクリプション、DNSモード、ポート、TUN設定を同時に変更しないでください。1回に1項目だけ変更し、アプリの再起動、接続パネル、ポートの待ち受けという3つの結果で変化を確認します。

最終的な判断基準は明確です。対象アプリでログインまたは読み込みが完了し、Clashの接続パネルに該当リクエストが表示され、ルールのマッチ結果が期待どおりであること。この3点を満たせば、UWPからローカルプロキシポート、Clashカーネルの処理、リモート出口までの経路が確立しています。