Windows Server DHCP Serverがまだ空き有なのにIP枯渇を主張するバグの解消

投稿者: | 2021年1月16日

近頃はスマートフォンやスマートウォッチ、スマートスピーカなど、ユーザの消費するIPアドレスは爆発的増加の一途。それでもうちのオフィスは人口密度は低い方だと思うので、あまり目くじら立てずにいますが、ふとあるサブネットのリースの集計値を確認すると、配布可能IPが枯渇とありますが、しかしリース詳細リストはどうみても使い切っているようには見えません。

Windows Server 2012 で運用されているDHCP Serverサービスは、フロア毎にサブネットを区切っていて、その末尾範囲を概ね次の要領で使い分けています(192.168.26.0/24の例)。

  •  21〜 99 : DHCP Serverのランダム配布用IPプール範囲 ←【ココが枯渇】
  • 100〜199 : 据え置きPC向けにDHCP Serverがを予約IP配布
  • 200〜254 : プリンタやAP、スイッチなどネットワーク機器が固定IPで使用
図1.IPプール枯渇もリストにはまだ空き有

図1.IPプール枯渇もリストにはまだ空き有

図2.IPプール枯渇を報じる警告イベント連発

図2.IPプール枯渇を報じる警告イベント連発

MMCコンソールから手動で現在のリース(プール範囲)を削除すると、消した分が余剰に上積みされるだけで、つじつまの合わない状態に変わりはありません(全部消したのに35個使用中扱いのまま)。サービスを再起動させても、OSの再起動でも解消されず。

図3.MMCコンソール上でIPリース削除

図3.MMCコンソール上でIPリース削除

同じような現象が無いか調べてみると、海外でちらほら見受けられますが、決定的な解決策は見つからないものの、こちらのQ&Aサイトの回答を見たときに、昔自分でやった対処法を思い出しました。

それはおかしくなったスコープをExportの後に削除、そしてExportしたスコープを元通りImportするというもの。netsh dhcp serverで行うその処理は、昔はスコープ単位での処理は出来ずに丸ごと処理せざるをえなかったものの、Windows Server 2008になった辺りで IPv4 / IPv6 に細分化されてからは、スコープ処理が可能となりました。

保存されるのはスコープのプロパティ、ReservationやScope Optionなどの他、そのスコープの状態(アクティブor非アクティブ)も保存され、復元時に即反映されるので、稼働中のDHCP Serverに対して実行する際は注意が必要でしょう。

PowerShellでは次のように行います。

PowerShellの方が明示的で細かな指定が可能になっています。生成されるファイルもnetshが.dbと言う拡張子のバイナリファイルなのに対し、こちらはXMLなので中身を容易に確認可能ですが、ファイルサイズもその分大きくなります。そしてImport時には必ず、データベースのバックアップ先を必須で指定する必要があります。

 

Reconcile(整合性)機能による修復

稼働中のスコープへ対処したい場合など、より安全な方法で解決する方法は、DHCP Server MMC上でスコープを右クリックすると出て来る「Reconcile(整合性)」機能を使う方法です。以前よりこの項目は目にしていたものの、何に使うのかずっと判らずにいましたが、使ってみてようやく理解。

図4.スコープのサブメニューにあるReconcile

図4.スコープのサブメニューにあるReconcile

Reconcileを押すと次のような小窓が開くので、Verifyしてデータベースとレジストリの差異を表示し、Reconcileします。

図5.スコープのReconcileを実行

図5.スコープのReconcileを実行

正直これだけなので、いまいち何がどうなったかわかりにくいのですが、リース中アドレス一覧を再更新すると飛び番になっていたIPアドレスが浮かび上がってきました。

図6.Reconcileによりゴミエントリが表示される

図6.Reconcileによりゴミエントリが表示される

Unique IDなどでうまくソートしてひとまとめに選択、さくっと削除してしまいます(よく見るとリース期限がReconcileした時間から再設定されているので、何もしなくても期限を過ぎれば自動的に消えて利用可能な状態になります)。

図7.ゴミエントリの削除

図7.ゴミエントリの削除

削除後、集計値を参照すると、合計、使用中、空きアドレスの値のつじつまが合う状態に戻りました。

図8.整合性のとれたスコープ集計値

図8.整合性のとれたスコープ集計値

このReconcile機能はPowershellにも用意されているので、これをタスクスケジューラと組み合わせ、定期的にIPリースのゴミ掃除を仕込むことも可能です(但し、Windows Server 2012 R2以降でのみ対応)。


 
 
せっかくDHCP Serverに手をつけたので、次回はバックアップと復元について、ずっと使い続けているnetshベースのバッチをPowershell化して使いやすくしようと思います。
 
 
参考)

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA