Windows DHCP予約PCがアドレス取得できない問題


<<プロローグ>>


クライアントPC向けにDHCPを導入している環境で、たとえばファイアウォールにて特別に許可・拒否設定を入れるために予約機能を使って同じIPアドレスを払い出すことができるのはよく知られていますよね。

とあるユーザ様から、DHCP予約設定にした直後から、「通知領域にIPアドレスが重複しているというメッセージが出て通信ができなくなることがある」というお問い合わせがありました。

メッセージが出た瞬間にLANケーブルを外して頂き、別のPCから該当IPアドレスに Ping を打っても応答はないし、ARPテーブルにも何も出ない…。
遠隔地でユーザ様も特にPCに詳しいかたでもない上、現象が出たり出なかったりするので、なかなか初動が取れませんでした。ちなみにWindows7 SP1 (32bit)です。

<<現地で確認>>

ユーザ様にご協力をいただき、現地にお伺いさせて頂きました。もちろん、無線LANや不審なネットワークアダプタ、VPNソフトなどは存在しませんでした。ちょうどこの日に現象が発生していてOSのイベントログ等を確認すると、PC側が思っているIPアドレスの重複相手が判明。なんと、このPCから見たらデフォルトゲートウェイに相当するCisco の L3スイッチのMACアドレスでした。

イベントログの内容
ログの名前:         System
ソース:           Tcpip
日付:            20xx/xx/xx 10:39:19
イベント ID:       4199
タスクのカテゴリ:      なし
レベル:           エラー
キーワード:         クラシック
ユーザー:          N/A
コンピューター:       computername
説明:
IP アドレス 0.0.0.0 とシステムのネットワーク ハードウェア アドレス F0-7F-06-nn-n
n-nn が 重複しているのを、検出しました。このシステムのネットワーク操作は 無効に
なる可能性があります。

ん? IPアドレス 0.0.0.0 ? なんのこっちゃ…。

念のため、PC側でIPv6関連の仮想インタフェースも全部無効にしてみたが効果はなし。ただ、怪しいのはPCではなくL3スイッチなのでは?という疑いが濃くなりました。この日はこれで引き上げさせて頂きました。

<<各所で検討>>

DHCPサーバのログを確認し、BAD_ADDRESS になったログを調査したところ、他にもIPアドレスが重複したと報告を受けて別IPに遷移しているものがいくつかありました。厳密には発生した時点で調査する必要があるのですが、とりあえずその場で確認しても、実際にIP重複した形跡があるものは見つかりませんでした。ほとんどは別のIPアドレスをリースされて問題なかったのですがうち1台だけは予約設定が入ったPCで、問い合わせがあったユーザ様と同様の事象になっていました。このユーザ様対応の時にはDHCPに問題があるとは思いもよらなかったため、DHCP予約ではなく実際に固定IP設定にして頂いてご利用頂いていました。

要するに、普通のDHCPクライアントなら、欲しかったIPが取れなくても他に空きIPがあれば問題が表面化しないのですが、DHCP予約されていると他のIPをくれとDHCPサーバに言っても無駄なので通信できないようです。

また Cisco 側を調査すると、Technotes に以下の様な記事を発見しました。

'Troubleshoot "Duplicate IP Address 0.0.0.0" Error Messages'

結論から言うと、残念ながらこの情報では解決しなかったのですが、この話を聞いた関係者から「'nmsp attachment suppress' コマンドで回復するんじゃないか」という情報が寄せられました。

NMSP の説明はCiscoのサイトを見て頂くとして、要はWifiでローミングする機器の管理を行う機能らしいです。ユーザ様のネットワークではWifiは使用していないので、正直に言ってまったくいらんお世話というわけです。

<<試験&エピローグ>>

再度ユーザ様のご協力をいただき、実際にL3スイッチにこのコマンドを設定。しばらくテストを行って頂くとまったく事象が発生せず、DHCPサーバにも BAD_ADDRESS のログが発生しなくなりました。他の遠隔地のL3スイッチにも順次設定を実施し問題が発生しなくなりました。

どうやら、nmsp が有効になっていると、MSEなる管理ステーションに「こんな端末が繋がったよ〜」とかいう情報を流すのだが、通知のインターバルがデフォルトで30秒と長く、DHCPのアドレス払い出しシーケンスに衝突してしまった場合にDHCPクライアントがアドレス重複と判断したようです。なにせOS起動中に発生する事象なので、自分自身でパケットダンプも取れないため苦労しました。

Cisco 側にはいろいろ言い分(「うちが先に 0.0.0.0 を使う実装を公開したのに、後からMSが 0.0.0.0 を使った上にRFC化されちまったんだよ」的な話)があるようですが、今回に関しては Windows には罪はなさそうです。


(追記)

スイッチ側の設定はポート単位で行うことになっている。現在の状況は show ip devide track int インタフェース記号 で調べてくださいとのこと。Ciscoのサイト(https://quickview.cloudapps.cisco.com/quickview/bug/CSCuv19773)をご覧あれ。



目次へ戻る