ループバックを有効にする方法とネットワーク分離のトラブルシューティングを行う方法 (Windows ランタイム アプリ)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
このトピックでは、Windows 8 で使う Windows ストア アプリを想定し、ループバックによるネットワーク アクセスを有効にする方法と、ネットワーク分離の問題をトラブルシューティングする方法について説明します。
理解しておく必要があること
テクノロジ
Windows.Networking.BackgroundTransfer
高度なダウンロード/アップロード転送機能を実現します。
-
ソケットと WebSocket を使ったネットワーク通信を可能にします。
-
AtomPub プロトコルを使って Web リソースにアクセスできます。
-
配信フィードを管理します。
-
最新の Web クライアントを使って Web サービスに接続することができます。
-
Web クライアントを使って Web サービスに接続することができます。
必要条件
- 以下の情報は、ネットワーク接続の確立を伴う、あらゆる接続型 (ネットワーク認識型) の Windows ランタイム アプリに当てはまります。書かれている内容は、JavaScript で作られたアプリに関係します。また、C#、VB.NET、C++ で .NET Framework 4.5 を使って作られたアプリにも関係します。
ネットワーク分離の診断ツール
CheckNetIsolation.exe は、ネットワーク機能を備えたアプリの開発に活用できるビルトインの診断ツールです。アプリのテストや診断、トラブルシューティングに利用できます。CheckNetIsolation.exe はコマンド ライン ツールであり、入力パラメーターはコマンド ラインで指定します。主なオプションは次の 2 つです。
LoopbackExempt
インストールされているアプリのうち、IP ループバックの制限が適用されず、ループバック アドレスにアクセスすることのできるアプリを一覧表示します。アプリのテスト時に、IP ループバック アドレスにアクセスできるアプリを追加することもできます。Debug
有効にされている機能のうち、アプリによって使われている機能と使われていない機能を調べます。 使われていないのに有効にされている機能があると、アプリのセキュリティが低下します。このオプションを使うと、(たとえば意図に反して) 破棄されたネットワーク トラフィックの情報を得ることもできます。
CheckNetIsolation.exe では、ヘルプ メッセージや使用法の情報を表示できます。ヘルプを表示するには、次の例のようにコマンドを入力します。
CheckNetIsolation -?
CheckNetIsolation.exe のいくつかのオプションは、アプリ名またはアプリ ID の指定が必要となります。ターゲット コンピューターにアプリが展開されていれば、アプリ名は c:\Program Files\Applications フォルダーで確認できます。アプリを起動するときには、この名前が使われます。これは、Microsoft Visual Studio 2013 の使用時に表示されるパッケージ ファミリ名で、アプリ コンテナーを表します。アプリ ID は、次のレジストリ キーに登録されています。
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer
ループバックによるネットワーク アクセスを有効にする
IP ループバック アドレスを使ったネットワーク通信は、Windows ランタイム アプリでのプロセス間通信 (2 つの異なるアプリ間の通信) には使用できません。このような通信は、ネットワーク分離によって制限されています。IP ループバック アドレスを使ったネットワーク通信は、同じアプリの同じプロセス内の通信目的に限って利用できます。
ループバック機能は、アプリのユーザー向けではなく、開発者がテストやデバッグを目的に使うのが一般的です。たとえば、Windows ランタイム アプリの Web サービスからデータをダウンロードするアプリがあるとします。 開発時には、ローカルの 127.0.0.1 に Web サービスを構成して、1 台のコンピューターでアプリをテストできた方が効率的です。
注 ループバックは、開発目的でのみ許可されます。Visual Studio の外部でインストールされた Windows ランタイム アプリでの使用は許可されません。さらに、Windows ランタイム アプリは、クライアント ネットワーク要求のターゲット アドレスとしてだけ、IP ループバックを使えます。そのため、DatagramSocket または StreamSocketListener を使って IP ループバック アドレスをリッスンする Windows ランタイム アプリは、着信パケットを受信することができません。
開発時に、ループバック アドレスにアクセスできるようにするには、ネットワーク分離を構成して、ループバックの制限からアプリを除外する必要があります。ネットワーク サービスでパケットを受け取る場合、TCP ポートまたは UDP ポートのリスナーもファイアウォール規則で許可する必要があります。
Visual Studio 11 内でインストールおよび実行されたアプリは、ループバックの制限から除外済みとして自動的に登録されます。制限から除外されているアプリは、次のコマンドを実行すると一覧表示されます。
CheckNetIsolation.exe LoopbackExempt -s
また、ループバックを特別に許可するアプリを CheckNetIsolation.exe ツールを使い手動で追加することもできます。
ループバックの制限からアプリを除外するには、パッケージのアプリ ID を指定する必要があります。たとえば、ループバックの制限からアプリを除外するには次のようにコマンドを入力します。
CheckNetIsolation.exe LoopbackExempt –a –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
特定のアプリについて、ループバックの制限が免除されている状態を取り消すこともできます。以下のコマンドは、先ほどと同じアプリについて、ループバックの免除を取り消しています。
CheckNetIsolation.exe LoopbackExempt –d –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
CheckNetIsolation.exe ツールでループバックの制限からアプリを除外するときの基準として、開発者はアプリ コンテナーの名前を使うこともできます。 たとえば、アプリ コンテナーの名前に基づいて、ループバックの制限からアプリを除外するには次のようにコマンドを入力します。
CheckNetIsolation.exe LoopbackExempt –a –n=stocks_mw26f2swbd5nr
.NET Framework を使って作成されたアプリについても、アプリ コンテナーの名前に基づいて、ループバックの制限が免除された状態を取り消すことができます。以下のコマンドは、先ほどと同じアプリについて、ループバックの免除を取り消しています。
CheckNetIsolation.exe LoopbackExempt –d –n=stocks_mw26f2swbd5nr
インストールされているすべてのアプリについて、ループバックの制限が免除されている状態を取り消すこともできます。以下のコマンドは、ローカル コンピューターにインストールされているすべてのアプリについて、ループバックの免除を取り消しています。
CheckNetIsolation.exe LoopbackExempt –c
ネットワーク分離の問題のデバッグ
アプリによって使われているネットワーク機能のレポートを生成するには、debug オプションを使います。
アプリ マニフェストで宣言されているすべての機能について、実際に使われているかどうかを調べる手段として、debug オプションを使うことができます。debug オプションを指定すると、宣言されている機能のうち、アプリで使われている機能と使われていない機能を追跡するよう、システムに命令として伝えられます。
debug オプションを使うには、まず、アプリをターゲット コンピューターに展開し、アプリ ID とアプリ名を調べます。次に、CMD ウィンドウを開きます。CMD ウィンドウは管理者特権で開いてください (管理者として実行)。次のコマンドは、特定のアプリ ID について debug オプションを設定する例です。
CheckNetIsolation.exe Debug –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
次のコマンド例では、アプリに対する debug オプションをアプリ コンテナーの名前に基づいて設定しています。
CheckNetIsolation.exe Debug –n=stocks_mw26f2swbd5nr
debug オプションを設定した後、管理者特権で開いた CMD ウィンドウから対象アプリを起動します。アプリは自分で実行する必要があります。そのアプリで実行する操作をテストしてください。テストが完了したら、Ctrl キーを押しながら C キーを押します。アプリは実行したままにしてください。ネットワーク機能のステータスを一覧にした要約レポートが CMD ウィンドウに表示されます。それぞれの機能のエントリは、その機能が宣言されているかどうか、また、実際に使われているかどうかを示しています。不使用の機能が宣言されていた場合、その旨が要約レポートには "Not Used and Insecure (不使用、安全性に問題あり)" として表示されます。さらに、ネットワーク アクセスに使われた送信元と送信先の IP アドレスが詳しいトラフィック レポートに表示されます。
次のテキストは、アプリの機能が必要以上に有効になっている場合の出力画面です。
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
InternetClient Not Used and Insecure
InternetClientServer Not Used and Insecure
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
InternetClient Not Used and Insecure
----------------------------------------------------------------------
InternetClientServer Not Used and Insecure
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78
次のテキストは、アプリの適切な機能が有効になっている場合の出力画面です。
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78