トラブル対処 読了時間:約12分

WindowsのUWPアプリがプロキシを使わない?ループバック免除でローカル接続を許可

UWPのサンドボックスが127.0.0.1への接続を制限する理由と、クライアント内蔵ツールやCheckNetIsolationでストアアプリにループバック免除を設定する方法を解説します。

まず確認:ループバック制限が原因か

ブラウザーでは正常にアクセスできるのに、特定のWindowsアプリだけネットワークエラーが続く場合は、サブスクリプションを変更する前に原因を確認しましょう。システムプロキシを使う場合、Clashクライアントは通常、アプリをPC上のプロキシポート(例:127.0.0.1:7890)に接続させます。AppContainerで動作する一部のUWPアプリはネットワーク分離の制限を受け、一般的なデスクトップアプリのようにこのローカル接続先へアクセスできないことがあります。

ループバック免除で解決するのは「アプリからPC上のプロキシへ接続できるか」という問題です。サブスクリプションのインポートや無効なノードの修復、アプリ通信の自動プロキシ化は行いません。以下の症状に当てはまるか確認してから、免除リストを変更してください。

  • Clashのコアが動作しており、ブラウザーから同じシステムプロキシを使って対象サイトにアクセスできる。
  • システムプロキシのアドレスが 127.0.0.1 または localhost で、ポートがクライアントの設定と一致している。
  • ネットワーク障害が、すべてのソフトではなくAppContainerを使う特定のアプリに限られている。
  • 対象アプリを再起動してリクエストを実行しても、クライアントの「接続」画面に該当リクエストが表示されない。これは切り分けの手がかりであり、単独で原因を断定するものではありません。

127.0.0.1、システムプロキシ、AppContainerの仕組み

127.0.0.1はIPv4のループバックアドレスで、このPC自身を指します。IPv6では::1が対応するアドレスです。ClashのHTTPポートまたは混合ポートはループバックインターフェースで待ち受け、同じPC上のアプリから利用できます。「システムプロキシ」を有効にすると、Windowsのプロキシ設定を参照するアプリが接続を試みます。

AppContainerはアプリをネットワークなどの境界で分離します。既定では、一般的なUWPアプリはPC上のループバックサービスに自由にアクセスできません。プロキシポートが待ち受け中でも、ネットワーク分離ポリシーによって接続が阻止されることがあります。ループバック免除は、指定したアプリパッケージにこの種のローカル通信を許可する設定であり、すべてのネットワーク権限を開放するものではありません。

設定項目役割代わりにはならないこと
システムプロキシ対応アプリに、使用するプロキシのアドレスとポートを知らせるAppContainerのループバック制限は解除できない
ループバック免除指定したアプリパッケージからローカルのループバック接続先へのアクセスを許可するアプリにシステムプロキシの使用を強制できない
ルールモードコアのルールに従ってDIRECT、プロキシグループなどの経路を選択するアプリからPC上のポートへの接続失敗は解決できない
TUNモード仮想ネットワークアダプターで、ルーティング条件に合う通信を取り込むシステムプロキシに対する免除を自動追加する機能ではない

ループバックの問題を解決するために、待ち受けアドレスを0.0.0.0へ変更したり、「LAN接続を許可」を安易に有効にしたりしないでください。プロキシにアクセスできる範囲が変わるだけで、アプリのサンドボックス制限が解除されるわけではありません。PC内だけで使う場合は、ループバックでの待ち受けを維持してください。

プロキシポートとWindowsの設定を確認する

2か所のポート番号を照合する

  1. クライアントの「設定」を開き、「ポート」「混合ポート」またはmixed-portを確認します。画面の項目名はクライアントによって異なるため、現在の設定値を基準にしてください。
  2. Windows 11では「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ セットアップ」→「プロキシ サーバーを使う」の「編集」を開きます。Windows 10では「設定」→「ネットワークとインターネット」→「プロキシ」を開きます。
  3. アドレスとポートが一致しているか確認します。クライアントの混合ポートが7897なのに、システムプロキシに7890が設定されている場合は、まずポートを修正してからUWPの問題を調べてください。

7890と7897はよく使われる例であり、すべてのクライアントの既定値ではありません。HTTPシステムプロキシには、HTTPに対応した待ち受けポートを指定してください。SOCKS専用ポートをHTTPプロキシ欄に設定しないでください。

PowerShellでローカルポートの待ち受けを確認する

ここでは実際のポートが7890だと仮定します。クライアントを起動してから、PowerShellで次を実行してください。

Test-NetConnection -ComputerName 127.0.0.1 -Port 7890

出力のTcpTestSucceededを確認します。Trueなら、現在のPowerShellプロセスからTCP接続できています。ただし、UWPアプリにアクセスが許可されたことや、リモートノードが利用可能であることを示すものではありません。Falseの場合は、コアが起動しているか、ポート番号が正しいか、セキュリティソフトが待ち受けを遮断していないかを確認してください。

方法1:クライアントのループバック免除ツールを使う

一部のクライアントには、GUIからループバック免除を設定する機能があります。サポートが終了したClash for Windowsを例にすると、旧バージョンでは「Settings」→「UWP Loopback」→「Launch Helper」から補助ツールを起動できました。この手順は旧クライアントの例であり、Clash Verge Revやほかのmihomoクライアントに共通するメニューではありません。

  1. 古い接続が使い回されないよう、問題のアプリを終了します。バックグラウンドに残っている場合も、終了してからテストしてください。
  2. クライアントからループバック免除ツールを開きます。Windowsユーザーアカウント制御の確認画面が表示されたら、ツールの入手元を確認してから許可してください。
  3. アプリ一覧から対象を探します。表示名がストア上の名称と異なる場合があるため、必要に応じてパッケージ名も確認してください。
  4. PC上のプロキシへのアクセスが必要なアプリだけにチェックを入れ、「Save Changes」または保存ボタンをクリックします。
  5. 対象アプリを再起動して、更新やログインを行います。同時にクライアントの「接続」と「ログ」を確認してください。

ツールの一覧に対象アプリがない場合は、現在のWindowsユーザーにインストールされているか確認してください。別の管理者アカウントでツールを起動すると、表示されるアプリが異なることがあります。アカウントの違いをサブスクリプションやノードの問題と取り違えないようにしてください。

方法2:CheckNetIsolationで免除を追加する

現在のリストとアプリパッケージのIDを確認する

スタートメニューで「Windows PowerShell」を検索し、「管理者として実行」を選択します。以下のコマンドはWindows 10およびWindows 11で使えます。組織管理のデバイスではポリシーによって変更が制限される場合があるため、まず組織のデバイス管理ルールに従ってください。

CheckNetIsolation.exe LoopbackExempt -s

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

1つ目のコマンドで現在の免除を表示し、2つ目で現在のユーザーのアプリパッケージを一覧表示します。追加時にはPackageFamilyNameを使い、PackageFullNameで代用しないでください。完全パッケージ名には通常、バージョンやアーキテクチャなどが含まれますが、パッケージファミリー名は同じファミリーに属するパッケージを識別します。

インストール済みパッケージで追加手順を試す

パッケージ名がMicrosoft.WindowsCalculatorのWindows電卓を例に、値の取得と許可の手順を説明します。電卓にプロキシが必要という意味ではありません。実際のトラブルシューティングでは、まず上の一覧から対象アプリを探し、検索名をそのアプリの正確なNameに変更してください。スクリプトはパッケージが1つだけ見つかった場合に続行するため、値が空の場合や複数の結果がある場合の誤操作を防げます。

$packages = @(Get-AppxPackage -Name 'Microsoft.WindowsCalculator')

if ($packages.Count -eq 1) {
    $family = $packages[0].PackageFamilyName
    Write-Output "ループバック免除を追加します: $family"
    CheckNetIsolation.exe LoopbackExempt -a "-n=$family"
} else {
    Write-Warning 'アプリパッケージを1つに特定できません。現在のユーザーとパッケージ名を確認してください。'
}

LoopbackExempt -aは追加を意味し、-n=の後にパッケージファミリー名を指定します。コマンドの実行後、もう一度一覧を確認してください。明確なエラーが表示されなかっただけで、成功と判断しないでください。

CheckNetIsolation.exe LoopbackExempt -s

一覧に対象のパッケージファミリーがあることを確認してから、アプリを終了して再起動します。追加に失敗した場合は、ターミナルに表示されたエラー全文を保存してください。権限不足、アプリパッケージのIDが見つからない、デバイスポリシーによる制限では、それぞれ対処方法が異なります。プロキシノードを何度も変更しても、通常は解決しません。

結果を確認:ループバック、ルール、ノードを分けて調べる

免除を追加したら、プロキシポートとノードはそのままにして、同じアプリで同じ操作を試してください。一度に変更する項目を1つにすれば、どの段階で改善したかを特定できます。以下の順に確認しましょう。

  1. 免除リストを確認する。CheckNetIsolation.exe LoopbackExempt -sを実行し、対象のパッケージが引き続きリストにあるか確認します。
  2. リクエストがコアに届いているか確認する。Clashクライアントの「接続」を開き、アプリ内で再読み込みを実行します。接続によってはプロセス名を判別できないため、対象ドメイン、アドレス、操作した時刻も照合してください。
  3. 適用されたルールを確認する。リクエストが表示されたら、DIRECTとプロキシグループのどちらに振り分けられたか確認します。アプリの接続に失敗する場合は、ポリシー、ノード、DNS、接続先サービスの状態を引き続き調べてください。
  4. ログのエラーを確認する。接続タイムアウト、名前解決の失敗、接続先からの拒否を、すべてUWPのループバック制限が原因だと決めつけないでください。

免除を追加してもリクエストが表示されないのはなぜ?

アプリがWindowsのシステムプロキシを参照していない、別の補助プロセスがリクエストを送信している、または制限対象のUWPネットワーク経路を使っていない可能性があります。ループバック免除を追加しても、こうしたケースでプロキシが自動設定されるわけではありません。まずアプリ自体にプロキシ設定があるか確認し、そのうえでTUNモードが必要か判断してください。

TUNモードでループバック免除を代用できる?

mihomoクライアントのTUNモードは、仮想ネットワークアダプターで通信を取り込み、システムプロキシに対応していない一部のアプリの通信をコアへ渡せます。アプリが直接ソケット接続を使っている場合は、接続経路を変えられることがあります。一方、システムプロキシを読み取ってPC上のポートへ接続するアプリでは、引き続きループバック制限に遭遇する可能性があります。「TUNを有効にする」だけで必ず直るわけではありません。

TUNをテストする前に、クライアントが求めるサービスモードや管理者権限が利用できる状態か確認し、現在の設定も記録してください。システムプロキシ、TUN、DNSモード、ルールを同時に変更しないでください。Windows上のほかのVPN、仮想ネットワークアダプター、セキュリティソフトがルーティングに影響する場合もあります。ファイアウォールを一律に無効化せず、項目ごとに比較して原因を調べてください。

ループバック免除の取り消しとその後の管理

アプリがPC上のプロキシを使わなくなった場合や、原因確認のために一時的に追加した場合は、該当する免除を削除できます。以下では電卓のパッケージを例にしています。実際の操作では、追加時に指定した対象パッケージを調べてください。

$packages = @(Get-AppxPackage -Name 'Microsoft.WindowsCalculator')

if ($packages.Count -eq 1) {
    $family = $packages[0].PackageFamilyName
    CheckNetIsolation.exe LoopbackExempt -d "-n=$family"
} else {
    Write-Warning '削除対象のアプリパッケージを1つに特定できません。取り消す項目を確認してください。'
}

CheckNetIsolation.exe LoopbackExempt -s

-dは指定した項目だけを削除します。1つのアプリの免除を取り消すためにリスト全体を消去しないでください。PC上のサービスに依存するほかのアプリに影響する可能性があります。アプリをアンインストールしてパッケージが見つからない場合は、保存しておいた免除リストでIDを確認してから、そのパッケージファミリーだけを削除してください。

  • 通常のバージョンアップではパッケージファミリーが変わらないことが多く、毎回免除を追加する必要はありません。再インストール、配布元の変更、Windowsユーザーの変更後は、あらためて確認してください。
  • 問題が起きたアプリ名、実際のプロキシポート、免除の追加前後の状態、クライアントログに記録されたエラーの種類を残しておくと、後から再現しやすくなります。
  • ログを共有する前に、サブスクリプションURL、アクセストークンなどのアカウント情報を削除してください。ループバック制限の調査にサブスクリプションURL全体を公開する必要はありません。
Clashをダウンロード