このページの本文へ

Windows Info 第139回

Windowsでネットワークの状況を識別するNetwork Location Awarenessとネットワークプロファイル

2018年09月02日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

現在のマシンがネットワークに繋がっているか
インターネットかローカルかの情報を提供するNLA

 Network Location Awareness(NLA)とは、LAN内のサーバーをアクセスするようなアプリケーションに対して、接続しているネットワークを識別して、どのネットワークに接続しているのかといった情報を提供する機能だ。

 そもそも、現在のようにクラウドサービスが一般的になる前(2000年台前半まで)、ネットワークといえば、企業などでローカルのサーバー(いわゆるオンプレミスのサーバー)がさまざまなサービスを提供するのが一般的だっだ。このとき、こうしたローカルサーバーをアクセスするアプリケーションは、接続しているネットワークを区別し、適切な動作をする必要がある。

 デスクトップPCが接続しているネットワークが変化することはほとんどないが、ノートPCなど持ち歩きができるPCでは、移動にともないネットワークから切断されることもあれば、全然違うネットワークに接続される可能性がある。また、有線だけでなく、無線LANやモデムによる通信、VPNなど複数のインターフェースを使い分けることもある。

 こうしたとき、たとえばネットワークに接続していないのに、アプリケーションが、サーバーをアクセスしようとすると、アクセスできないことが判明するまでに時間がかかっていた。相手と通信ができるかどうかを事前に知ることはできず、「通信できないこと」は、相手から応答がないことでしか判別ができない。そのためには、一定時間、応答がないことを確認するために待つ必要があるからだ。そして場合によっては、サーバーの負荷が重くて応答が遅れる可能性もある。

 また、ネットワークに接続していたとしても、別のネットワークなので、想定しているサーバーにアクセスできないかもしれない。あるいは、サーバーで動作しているサービスは同一でも、そのサーバーにアクセスする権利がないかもしれない。

 このため、ネットワークを利用するアプリケーションは、接続しているネットワークの状態や接続しているネットワークを識別する必要があった。インターネット側のサーバーを使うため、単にドメイン名を使って、IPアドレスを得れば、相手が止まっていない限り、必ずアクセスができる。クライアント側から見れば、オンプレミス(ローカルサーバー)にアクセスするよりも、クラウドにアクセスするほうが簡単なのである。

Windows 10ではネットワークの場所によって
ファイアウォールやプリンタ共有機能を切り替える

 そこでアプリがネットワークを判別するため、WindowsではXPで初めて簡単なネットワーク識別機能を持った。XPではアクティブディレクトリが動作している「ドメインネットワーク」と非ドメインネットワークを区別することができた。SP2になるとファイアウォールが導入され、このとき、接続しているネットワークによって、ファイアウォールのルールを切り替えることができるようになった。これを進めて、NLAとしたのがWindows Vistaである。

 NLAでは、ネットワークに接続しているかどうか(ネットワークの有無)、ドメインネットワークなのかどうか、単一のネットワークなのか、複数のネットワークに接続している状態なのかを区別できる。そして、その判別結果をもとにアプリケーションに対して、ネットワークからの離脱や接続、そしてどのネットワークに接続したのかを通知できるようになっている。

 Windows自身もこの機能を利用し、現在のWindows 10では、「ファイアウォールのルール切り替え」と「ファイル、プリンタ共有の有無」を接続しているネットワークによって切り替えできるようにしてある。いわゆる「ネットワークの場所」(プライベートネットワーク、パブリックネットワーク、ドメインネットワーク)は、NLAの機能を利用している。

NLAはプロファイルを作成して、
それによって同じネットワークかを識別

 NLAは具体的には、接続しているネットワークの「プロファイル」(以後、ネットワークプロファイルと表記する)を作成し、以後、同じネットワークなのかどうかを識別する。このネットワークプロファイルは、ネットワークの場所のほか、ネットワークの種類などの情報から構成されている。ただし、ネットワークプロファイル自体には、IPアドレスなどの変化する可能性のあるネットワーク情報は含まれていない。

 たとえば自宅のノートPCで、無線LANとイーサネットの両方で接続している場合、イーサネットで接続すると、接続ネットワークが無線LANのSSIDとして表示されるのを見たことがある方もいるだろう。これはなんらかのバグではなく、NLAによるネットワーク識別の機能によって、物理的な接続方法とは別に、両者が「同一のネットワーク」であるとWindowsが判断していることを示しているのだ。

ちなみにレジストリに登録されているネットワークプロファイルを編集することで、Windowsが表示するネットワークの名前を書き換えることができる

 このネットワークプロファイルは、レジストリに格納されている。場所は、

HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥NetworkList¥Profiles

にある。ここには、GUID形式のキーが登録され、それぞれがネットワークプロファイルとなっている。

プロファイルは、GUIDがキー名となっていて、最初に接続した日時や最後に接続した日時なども記録されている

 格納されている情報には、以下の表のものがある。ここで重要なのは、CategoryとNameType、ProfileNameだ。

 Categoryは、ネットワークの場所に対応する情報だ。このDWORD値(32bit整数)の値でパブリック=0、プライベート(ホーム)=1、ドメイン(ワーク)=2となっている。初期値は「パブリック」だが、ドメインネットワークに接続している場合には自動判別が可能で「ドメイン」となる。また、「パブリック」ネットワークに対して、ユーザーが「プライベート」を指定することができる(ユーザーが指定しない限り勝手にプライベートにはならない)。

 NameTypeは、接続の種類を表す。たとえば、イーサーネットなら6、無線LANなら71、モバイルブロードバンド(携帯電話ネットワーク)なら243という具合だ。

 これは、マイクロソフトが定義した値で、Windows SDKに含まれる「ipifcons.h」というファイルに定義が含まれている。

 単にネットワークと整数値を対応させたものなので、値自体には意味がない。しかし、この値を見ることで、ネットワークとイーサーネットで接続したときに作られたプロファイルなのか、無線LANで接続したときに作られたプロファイルなのかを区別できる。このほかに、プロファイルには最初に接続した日時(プロファイルが作られた日時)や最後に接続した日時などが記録されている

 ProfileNameは、接続しているネットワークを区別する名前となる。コントロールパネルのネットワークと共有センターの「接続」や、「設定アプリ」→「ネットワークとインターネット」→「状態」の「接続プロパティの変更」で表示されるのがProfileNameで、レジストリ内のこの値を書き換えると、表示を変えることができる。

 このネットワークプロファイルを区別するための情報は、シグネチャーと呼ばれる。非ドメインネットワークであれば、ネットワーク内のゲートウェイ(ルーター)のMACアドレスが登録される。同一のネットワークであれば、同一のルーターに接続していているはずで、無線LANでもイーサネットでも、同じネットワークであれば、ルーターは同じ機器になるはずだ。

 MACアドレスは、イーサネットや無線LANの物理的なハードウェアアドレスとなるもので、ハードウェアごとに固有の値が割り当てられていて、同じ値を持つネットワーク機器は存在しない。このため、MACアドレスが同一であれば、同一の物理的なルーターと判断できる。

 このシグネチャーは、

HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥NetworkList¥Signatures

以下に登録されている。

シグネチャーは、ネットワークを識別するための情報が格納されており、デフォルトゲートウェイ(ルーター)のMACアドレスやDNSサフィックスなどが記録されている。ここに対応するプロファイルのGUIDがある

 このシグネチャーには、ルーターのMACアドレスや前述のネットワークプロファイルが登録されているキー名(GUID形式)が登録されてる。

 NLAは、ルーターのMACアドレスなどから接続先ネットワークのシグネチャーを見つけ、そこに登録されてあるProfileGuidから、ネットワークプロファイルを特定する。このネットワークシグネチャーには、DNSサフィックスも登録されている。DNSサフィックスとは、DNS名を指定する場合に、ホスト名だけが指定されたときにデフォルトで補うドメイン名の後半部分である。

 DNSで名前解決をしている場合、ローカル環境で、ホスト名のみで相手を指定しているような場合に、これを正式なドメイン名(FQND。Fully Qualified Domain Name)にする場合に、ホスト名の後につける部分を「DNSサフィックス」という。一般的にはDHCPサーバーがこれを指定する。ネットワーク同士が、同一のDNSサフィックスを持っているということは、同じドメインのネットワークに所属していることになる。

 しかし、実際のネットワークでは、物理的なネットワークへの接続が必須。Windowsでは、ネットワーク接続に使う「インターフェース」ハードウェアに関する情報も別に管理している。しかし、ネットワークハードウェアが時間とともに発展してきたため、イーサネットや無線LAN、モバイルブロードバンドなどのインターフェースは、それぞれ別々に管理されている。

 たとえば無線LANは、イーサネットよりもあとからWindowsに取り込まれた。このため、無線LANの管理とイーサネットの管理は別になっている。次回はこちらの「プロファイル」について見ていくことにしよう。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン