Windows UWPアプリがClashプロキシに繋がらない:ループバック制限の解除方法2選

Windows UWPアプリは既定でループバックアドレスへのアクセスが禁止され、ストアアプリがシステムプロキシを通れなくなります。標準ツールで制限を解除する2つの方法と注意点を解説。

症状:ストアアプリだけネットに繋がらず、デスクトップアプリは正常

システムプロキシは有効で、ブラウザや各種デスクトップアプリは問題なくプロキシを経由し、Clashのパネルにも継続的な接続ログが表示されている。それでもMicrosoft Store、天気、メール、Xboxなどストアからインストールしたアプリだけが「インターネット接続がありません」と表示されたり、ずっとぐるぐる回っている。クライアントの再起動、ノードの切り替え、サブスクリプションの再インポートを試しても効果がない。

これはサブスクリプションやノードの問題ではない。これらのアプリには共通点がある——UWP(Universal Windows Platform)アプリであること。UWPはAppContainerのサンドボックス内で動作し、Windowsは既定でサンドボックスアプリからループバックアドレス127.0.0.1へのアクセスを禁止している。そしてClashのシステムプロキシアドレスはまさにこの127.0.0.1だ。

原因:UWPのループバック分離機構

Clashでシステムプロキシを有効にすると、システム設定に書き込まれるプロキシアドレスは127.0.0.1:7890(既定のMixedポート、実際の値はクライアントの設定に依存)になる。デスクトップのWin32アプリはこのアドレスを読み取って直接この本機ポートに接続でき、問題は起きない。一方UWPアプリが同じアドレスに接続しようとすると、システムのネットワーク分離レイヤーによって即座にブロックされ、リクエストがClashコアに到達すらしない。結果として「プロキシは有効なのにネットに繋がらない」という状態になる。

この制限はシステム側のセキュリティ設計であり、サンドボックスアプリが本機の他のサービスを探索・アクセスできないようにすることで、悪意あるストアアプリから他のプログラムを守るためのものだ。解除するには対象アプリをループバック免除リスト(Loopback Exemption)に追加すればよく、Windows標準のコマンドラインツール CheckNetIsolation.exe だけで完結し、サードパーティ製ソフトは不要。以下の2つの方法から必要に応じて選択する。

方法1:パッケージ名を指定して個別アプリだけ免除する

特定のストアアプリだけをプロキシ経由にしたい場合に向いた方法で、免除範囲が最小限に抑えられ、分離ポリシーへの変更も最小限で済む。

  1. スタートメニューを右クリックし、「ターミナル(管理者)」または「Windows PowerShell(管理者)」を選択する。免除操作には管理者権限が必須で、通常権限で実行すると拒否される。
  2. 対象アプリのパッケージファミリー名(PackageFamilyName)を確認する。天気アプリを例にすると、以下を実行する:
Get-AppxPackage *bingweather* | Select-Object Name, PackageFamilyName

出力のPackageFamilyName列には Microsoft.BingWeather_8wekyb3d8bbwe のような形式で表示される。アスタリスクの間のキーワードを対象アプリの英語名に置き換えるだけでよい。例:*windowsstore**windowscalculator*

  1. 確認したパッケージファミリー名を免除リストに追加する:
CheckNetIsolation.exe LoopbackExempt -a -n=Microsoft.BingWeather_8wekyb3d8bbwe

パラメータ -a は追加を意味し、-n= の後ろに前の手順で確認した完全なパッケージファミリー名を貼り付ける。

  1. 対象アプリを終了して再起動すればネットワークが復旧する。設定はすぐに反映され、システムの再起動は不要。

方法2:1つのコマンドでUWPアプリ全体を免除する

ストアアプリが多く、1つずつパッケージ名を調べるのが面倒な場合は、SIDを指定して全アプリパッケージを一括で免除できる。同じく管理者権限のターミナルで実行する:

CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1

S-1-15-2-1 はWindows組み込みのセキュリティ識別子「ALL APPLICATION PACKAGES」(すべてのアプリケーションパッケージ)のSIDだ。免除リストに追加すると、すべてのUWPアプリがループバックアドレスにアクセスできるようになり、システムプロキシが一括で有効になる。新規にインストールしたストアアプリも同様に対象となる。

分離範囲に注意

一括免除はすべてのストアアプリのサンドボックス分離を緩めることになり、どのストアアプリでも本機のサービスにアクセスできるようになってしまう。セキュリティ分離を重視する環境では、方法1に戻り、実際にプロキシが必要なアプリだけを個別に免除リストへ追加することを推奨する。

確認と元に戻す方法

免除リストはいつでも確認・削除できる。よく使うコマンドは以下の通り:

  • 現在の免除項目をすべて表示:CheckNetIsolation.exe LoopbackExempt -s
  • 個別アプリの免除を削除:CheckNetIsolation.exe LoopbackExempt -d -n=パッケージファミリー名
  • SIDで追加した免除を削除:CheckNetIsolation.exe LoopbackExempt -d -p=S-1-15-2-1
  • 免除項目をすべて削除:CheckNetIsolation.exe LoopbackExempt -c

反映確認の方法:先ほどネットに繋がらなかったUWPアプリを再度開き、同時にClashクライアントの接続パネルを確認する。そのアプリのプロセスによる接続ログが表示されれば、トラフィックがコアに到達している証拠だ。免除設定はシステム設定に書き込まれるため再起動後も保持される。Windowsの大型アップデート後は -s で一覧が保持されているか再確認するとよい。

免除後も繋がらない場合のチェックポイントとTUNモードという代替案

免除設定を済ませてもアプリがネットに繋がらない場合は、以下の順にチェックする:

  • コマンドを管理者権限のターミナルで実行したか確認する。権限不足の場合は昇格が必要と表示される;
  • Clashのミックスポートまたはhttpポートが変更されていないか、システムプロキシ設定のポート番号と一致しているか確認する;
  • Windowsファイアウォールやサードパーティ製セキュリティソフトがClashコアのローカルリスニングをブロックしていないか確認する;
  • Clashのログを確認し、リクエストがコアに到達しているかチェックする。まったく到達していない場合は、依然として分離レイヤーにブロックされていることを意味する。

もう一つの手段は、システムプロキシそのものを回避すること:TUNモードを有効にする。TUNはネットワーク層に仮想NICを構築してマシン全体のトラフィックを引き受ける仕組みで、UWPアプリの通信も仮想NIC経由で直接mihomoコアに入るため、127.0.0.1というプロキシアドレスを経由しない。結果としてループバック制限自体が関係なくなる。Clash Verge Rev、Clash PlusなどmihomoコアベースのクライアントはいずれもTUNモードに対応しており、初回有効化時にはサービスモードのインストールまたは管理者権限での実行が必要になる。ストアアプリを長期的に多用するユーザーにとっては、免除リストを維持するよりTUNモードを使う方が手間がかからない。

TUNモードの副次的なメリット

TUNが引き受けるのはすべてのトラフィックであり、システムプロキシ設定を参照しないコマンドラインツールやゲームクライアントも含まれる。一度設定すればUWP以外のあらゆるケースをカバーできる。

and

DOWNLINK READY

Clashクライアントをダウンロード

Windows、macOS、Linux、Android、iOS向けClashクライアントのダウンロード窓口を網羅。mihomoコア搭載版とGUI版を掲載。

Clash をダウンロード