TCP/IPネットワークでは,各ノードに一意なIPアドレスが必要になる。設問のようにほかのコンピュータと通信できないケースでは,何よりもまずTCP/IPの設定を確認することが大切だ。これには,先ほど紹介したipconfigコマンドを利用するのが簡単である。

 ipconfigコマンドは管理者に対して,TCP/IP ネットワーク構成に関連した診断情報を提供する。設問ではipconfigを実行した結果,問題が発生しているコンピュータのIPアドレスとして「169.254.29.18」が割り当てられていることが分かる。実はこの「169.254.29.18」というIPアドレスが,トラブルシューティングのポイントとなるのである。

 IPアドレスの割り当てにDHCP(動的ホスト構成プロトコル)サーバーを使用している環境の場合,クライアント・コンピュータは起動時にDHCPサーバーからIPアドレスを取得して自分に割り当てる。しかし,何らかの原因でこれに失敗した場合,Windowsクライアントの多くはDHCPサーバーの助けを借りずに自分自身に対してサブネット上で一意なIPアドレスを割り当てようとする。このときに利用する仕組みがAPIPA(自動プライベートIPアドレス指定)である。

 APIPAを利用できるコンピュータは,最初に自分に割り当てるIPアドレスを「169.254.0.1~169.254.255.254」の範囲内からランダムに1つ選択する(図2)。そして,ARP(アドレス解決プロトコル)要求をネットワークにブロードキャストすることによって,そのIPアドレスをほかのコンピュータが既に使用しているかどうかを調べる。ほかのコンピュータがARP応答を返した場合には,そのIPアドレスは使用中であるとみなし,別のIPアドレスを選んで再試行する。このような流れで未使用のIPアドレスを検索し,それを自分自身に割り当てることによって,IPアドレスがサブネット上で重複しないことを保証しているのである。

図2●APIPAでIPアドレスを割り当てる仕組み
まずIPアドレスをランダムに生成してARP要求をブロードキャストする。ほかのノードがARP応答を返したときは,そのアドレスは使用中なので別のアドレスで同じことを繰り返す。使用中でないアドレスが見つかったらそれを自分に割り当てる。

 「169.254.x.x」というIPアドレスは,外部と接続されていない単一のネットワーク・セグメントだけで利用できるアドレス空間としてIANA(Internet Assigned Number Authority)が予約している。これらのアドレスは,LINKLOCALアドレスと呼ばれ,グローバルIPアドレスともプライベートIPアドレスとも異なる。厳密に言えば,APIPAが割り当てるのはプライベートIPアドレスではなく,このLINKLOCALアドレスである。

 WindowsではWindows 98で初めてAPIPAをサポートし,その後登場したWindows 98 Second Edition,Windows Me,Windows 2000,Windows XPでも標準機能として実装している。SOHO(小規模オフィス/ホーム・オフィス)などの環境でDHCPサーバーを運用せずにネットワークを構築する際に,IPアドレスを手作業で割り当てなくても通信できるのはこの仕組みのおかげだ。

 ただ,ネットワーク管理者の視点でとらえてみると,APIPAが有効なコンピュータはトラブルシューティングを妨げる要因になりかねない。DHCPサーバーからIPアドレスを取得できなかった場合でも,一見するとIPアドレスが正しく割り当てられているように見えるためだ。このような理由から,あえてクライアント・コンピュータのAPIPAを無効にすることも少なくない。

 APIPAを無効にするにはWindowsのバージョンに応じて以下の作業をする。なお,以下の作業ではレジストリを直接操作するため,誤って不正な値を書き込んでしまうと,システムに重大な障害を及ぼす可能性がある。自己責任のもとで細心の注意を払って操作することをお願いしたい。

●Windows 98/Meの場合
 Windowsフォルダにあるレジストリ・エディタ(regedit.exe)を起動して,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VxD\DHCPを開く。このキーの下に「IPAutoconfigurationEnabled」という名前でDWORD型のエントリを新規に作成し,値を「0」に設定する。

●Windows 2000の場合
 WINNTフォルダにあるレジストリ・エディタ(regedit.exe)を起動してHKEY_LOCAL_MACHINE\SYSTEM\
CurrentControlSet\Services\Tcpip\Parametersを開く。このキーの下に「IPAutoconfigurationEnabled」という名前でDWORD型のエントリを新規に作成し,値を「0」に設定する。

●Windows XPの場合
 コントロール・パネルなどから[ネットワーク接続]を開き,対象となるネットワーク接続のアイコンを右クリックしてメニューの[プロパティ]を選択する。「<接続名>のプロパティ」ダイアログが表示されたら,[全般]タブ上で,[インターネットプロトコル(TCP/IP)]を選択して[プロパティ]ボタンをクリックする。すると図3のようなダイアログが表示されるので,[代替の構成]タブ上で[ユーザー構成]を選択し,ほかのコンピュータと重複しないIPアドレスを指定する。

図3●Windows XPでAPIPAを無効に設定する方法
[インターネット プロトコル(TCP/IP)のプロパティ]ダイアログの[代替の構成]タブを開き,[ユーザー構成]を選択してからIPアドレスなどを設定する。

日経Windowsプロ2005年5月号掲載