俺#

新潟市でIT業を営むおっさんのブログ。

Windows 8で固定IPアドレスを使用する場合のAPIPA問題

太古の昔から、WindowsにはDHCPIPアドレスが取れない時に、自動的にIPアドレスを割り振ってくれる機能がある。同一セグメント内のマシン同士が「とりあえず通信できる状態」を構築する「APIPA」という機構だ。これ、別にMicrosoftが気を利かせた訳ではなくMacOSXなど他のOSの実装もあって、割り振られるIPアドレスは「グローバル」でも「プライベート」でもない「リンクローカル」と定義されたそれ用の空間のものだ。役立った試しないけど。

以上前置き。ここからが今回ハマったトラブルの話。固定IPを1個だけ借り受けた環境で、2台目のマシンからもWebを見たい状況になったので、以下のような構成を試したのだった。

インフラ側
 |
[aaa.bbb.ccc.ddd]
固定IPのWinXP機(Proxy稼働)
[192.168.234.100]
 |
[192.168.234.200]
2台目のWin8機(Proxy使用)

まず固定IPaaa.bbb.ccc.dddを貰っているPC上でHTTP Proxyを動かす。2個目のNICに固定プライベートIP192.168.234.100を振る。そのNICWin8マシンを直結し、192.168.234.200を振る。Win8マシンからは、Proxyを経由してWebを閲覧するので、GWもDNSも設定していない。Proxyの動作確認なども兼ねた諸々の事情なので「ICS使えよ」というツッコミはナシで。

おっと、Proxy云々はどうでもよろしい。要はDHCPなしGWなしの固定プライベートIPで運用する、単純なローカル空間を作ったという話なのだ。だがこの単純極まりない環境において、192.168.234.100から192.168.234.200へ全く疎通しない。pingも通らず、当然Proxyにも接続できない。もちろん設定ミスでもない。何故じゃ?

設定を5度ほど見直し、ケーブルを3度ほど抜き差しした後、困った時の「ipconfig /all」を実行してみると...なんと!固定IPを明示的に振ってあるにも関わらず、APIPAが割り当てたと思わしきリンクローカルのアドレスが振られているじゃありませんか!

自動構成 IPv4 アドレス : 169.254.107.103(優先)
IPv4 アドレス : 192.168.234.200

この様に2個のIPアドレスが振られ、しかも「(優先)」てなんだオイ。このようになってしまう原因はさっぱり判らず。GWが設定されていないからなのか、単に外に出られないからなのか、とにかく何らかの判断ミス(つまりバグ)によってAPIPAが必要だと誤解しているようだ。ちなみにProxy動かした側のOSはWindows XPでこの現象は起こっていなかった。

その場はどうにもならず諦めたのだが、レジストリ変更によりAPIPAを無効にする方法があった。

http://www.atmarkit.co.jp/fpc/pctips/019disableapipa2k/disableapipa2k.html

Windows 2000用の古い記事だが、Windows 8(64bit)でも有効だった。すべからく、Vistaや7でも有効であろう。こんなものはGUIで設定できてしかるべきである。手軽さというAPIPAの思想を鑑みればデフォルト有効の理由も解らなくないが、ほとんどの場合は要らないもの。まぁ、殺せないのはともかく余計な事すんなって話だね。バグだよヤッパシ。もしかしてVistaや7でも同じ現象がある?と思ったけど未確認。

ちなみに、レジストリ変更でAPIPAを無効にしてもipconfigの出力に含まれる自動構成有効無効の情報は「はい」のまま変わらない。ipconfigがバグってるのか、無効にされない前提で固定文言を吐くウンコな実装なのであろう。ipconfigの表示だけの問題であって、もちろんAPIPAはちゃんと止まっている。