【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
Windows TIPS
[Network]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

不正なDHCPサーバを見付ける

解説をスキップして設定方法を読む

デジタルアドバンテージ
2003/03/15
 
対象OS
Windows 2000 Professional
Windows 2000 Server
Windows 2000 Advanced Server
Windows XP Professional
Windows XP Home Edition
クライアント・コンピュータのTCP/IPの設定を行うためには、現在ではDHCPサービスを使うのが一般的である。
管理者が意図しないDHCPサーバが稼働していると、さまざまなネットワーク・トラブルの原因となる。
不正なDHCPサーバを見付けるためには、dhcplocコマンドを使うか、ネットワーク・パケットをキャプチャして解析する。
 
解説

 TCP/IPネットワークの設定を行う場合、IPアドレスネット・マスクデフォルト・ゲートウェイDNSサーバなどのパラメータをホストごとに正確にセットする必要がある。Windowsクライアントなら、さらにWINSサーバや(DNSの)ドメイン名なども設定しなければならないかもしれない。このような作業を簡単に、そして確実に行うために、現在ではDHCPというネットワーク・プロトコルが開発され広く普及している。ネットワーク上にDHCPサーバを1台用意しておくと、クライアントとなるコンピュータは、起動時にDHCPサーバに問い合わせて自分自身のIPアドレスを決定し、さらに必要ならばDNSサーバやデフォルト・ゲートウェイ、WINSサーバなどのアドレス情報も自動的に取得して、TCP/IPプロトコル・スタックの設定を行う。どのクライアントにどのIPアドレスを割り当てるかといった細かいことを気にせずに、管理者はネットワーク上の各コンピュータの設定を済ませることができる。現在では、Windows 2000 ServerのようなサーバOSだけでなく、個人用の非常に安価なルータブロードバンド・ルータISDNダイヤルアップ・ルータ)でもこのDHCPサーバ機能を装備している。ルータだけでなく、Windows OSなどに用意されているネットワーク共有機能でも、DHCPによってクライアントにIPアドレスなどの情報を配布している。このように、現在ではDHCPなしのネットワーク運用は考えられないほど、あたりまえのように使われている。

 このように非常に便利なDHCP機能であるが、現在ではさまざまなOSやルータなどにDHCPサーバ機能が組み込まれているため、管理者が知らないうちに、誰かが別のDHCPサーバを稼働させてしまう可能性がある。このような、管理されていないサーバのことを「ローグ・サーバ(rogue server、rogueとは「ならず者」とか「ごろつき」などという意味)」と呼ぶことがあるが、ローグDHCPサーバによる影響は非常に深刻である。ほかの種類のサーバと違って、不正なDHCPサーバが稼働していると、クライアント・コンピュータに配布されるIPアドレス情報が間違ったものになり、インターネットや社内のさまざまな場所にあるサーバなどのリソースにアクセスできなくなってしまう可能性が非常に高いからだ。不正なDHCPサーバが稼働していることが分かったら(インターネットなどにアクセスできなくなるなどの症状が出てから初めて気が付くことが多い)、速やかにそのDHCPサーバを見付け、サービスを停止させるなどの処置を行う必要がある。

DHCPのメカニズム

 DHCPプロトコルにおけるパケットのやりとりの詳細については、Master of IP Networkフォーラムの「DHCP設定は正しいか?〜DHCP設定の確認と利用〜」などを参照していただきたいが、簡単にまとめると次のようになる。

  1. クライアントがブロードキャストを使ってDHCPDISCOVERパケットを送信する。このパケットの中には、クライアントのネットワーク・インターフェイスのMACアドレスが入っている。

  2. それを受信したDHCPサーバは、クライアントに割り当てるべきIPアドレスを1つ用意する。MACアドレス・ベースの割り当ての場合は、あらかじめ用意したIPアドレスを使う。そうでない場合は、DHCPの空き領域(DHCPプール)からIPアドレスを1つ選び、ARPリクエストをネットワークに送信して、そのIPアドレスを誰も使っていない(ARPに対する応答がない)ことを確認する。

  3. リースするIPアドレスが決まったら、そのIPアドレスをDHCPパケット中に埋め込んで、ブロードキャストでDHCPOFFERを送信する。この2と3の操作は、DHCPDISCOVERを受信したすべてDHCPサーバが行うので、DHCPOFFERは同時に複数のDHCPサーバから送信されることになる。

  4. クライアントは、(複数ある場合は)適当なDHCPOFFERを1つ選択し、その要求を使うことを、DHCPREQUESTパケットを使って特定のDHCPサーバに返信する(そのほかのDHCPサーバには応答しない)。DHCPのリース切れに対する更新の場合は、(1〜3を行なわずに)このDHCPREQUESTを送信する。

  5. DHCPサーバは、その要求を認める場合はDHCPACKを使ってクライアントに承認を返す。認めない場合は(リースに対する更新など)、DHCPNACKを返す。

 このように、DHCPクライアントとDHCPサーバ間では、幾つかのDHCPパケットのやりとりでIPアドレスが割り当てられる。ただしブロードキャスト通信だけでなく、OSや環境によってはユニキャスト通信が使われることもあるので、スイッチング・ハブなどを導入していると、そのやりとりのすべてを外部からキャプチャして観察することはできない。例えばWindows 2000では、4と5ではユニキャスト通信が使われている。


設定方法

dhcploc.exeによるDHCPサーバの検出

 Windows 2000のリソースキットに含まれるdhcploc.exeというツールを使うと、DHCPサーバ(が送信するパケット)を検出することができる。リソースキットとは、Windows 2000に対する技術情報などを網羅した書籍で、各種のツール類をまとめたCD-ROMが付属している(リソースキットについてはこちらの書評を参照)。Server版とWorkstation版のいずれのCD-ROMでもdhcploc.exeというツールが収録されている。

 Windows XP Professional/Home Editionの場合は、インストールCD-ROM中にあるサポート・ツール(\SUPPORT\TOOLSフォルダ参照)の1つとして用意されているので、これらのツール(Windows Support Tools)をインストールすればよい(ただし何度か実験したところ、手元のWindows XP上では動作が不安定なことがあった。幾つかのプラットフォーム上で実験して利用していただきたい)。

 dhcploc.exe(DHCP Server Locator Utility)は、DHCPサーバが送信するパケットをキャプチャして表示するためのコマンドである。ほかのクライアントが出すDHCP要求とそれに対するDHCPサーバの応答を表示するだけでなく、自分自身でダミーのDHCP要求を送信して、それに対するDHCPサーバの応答を表示させることもできる。

 このツールは、コマンド・プロンプト上で実行する。引数としては自分自身のコンピュータに付けられているIPアドレスを指定する(複数のインターフェイスを持つコンピュータにおいて、どのインターフェイス上で動作するかを限定させるためであろう)。

 このコマンドを実行すると、指定されたインターフェイス上でDHCPのパケットが受信されるのを待つ状態に入る。DHCPによる通信が行われなければ何も表示されないが、これは正常な動作である。ただし「d」と「q」の2文字のキー入力だけは受け付ける。もしそれ以外のキー(スペース・キーなど)を押すと、非常に簡単なヘルプ・メッセージが表示される。

 「d」キーを押すとDHCPのダミー要求が送信され、「q」キーを押すとプログラムが終了する。

 コマンドの動作中は、以下のように、DHCPの通信を受信した時間とその内容が表示される。

C:\>dhcploc 192.168.2.104 ……引数には自ホストのIPアドレスを指定
Type d - to discover; q - to quit; h - for help. ……ヘルプ・メッセージ
18:38:39    OFFER (IP)192.168.2.180   (S)192.168.2.59    *** ……受信したDHCPパケット
18:38:39      ACK (IP)192.168.2.180   (S)192.168.2.59    ***
18:42:09      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
18:49:17      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
18:49:21    OFFER (IP)192.168.2.117   (S)192.168.2.11    ***
18:49:21      ACK (IP)192.168.2.117   (S)192.168.2.11    ***
18:49:33      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
18:49:41      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
18:50:07    OFFER (IP)192.168.2.181   (S)192.168.2.59    ***
18:50:07      ACK (IP)192.168.2.181   (S)192.168.2.59    ***
18:50:07    OFFER (IP)192.168.2.129   (S)192.168.2.11    ***
19:53:07      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
19:53:23      ACK (IP)0.0.0.0         (S)192.168.2.59    ***
19:54:41      ACK (IP)192.168.2.187   (S)192.168.2.59    ***
19:54:41     NACK (IP)0.0.0.0         (S)192.168.2.11    ***
19:54:41      ACK (IP)192.168.2.182   (S)192.168.2.59    ***
19:54:41     NACK (IP)0.0.0.0         (S)192.168.2.11    ***
……最後にqキーを押すと終了する

 表示されている各行の内容は、左から順番に、DHCPメッセージを受信した時刻、DHCPのメッセージの種類、DHCPクライアントのIPアドレス、DHCPサーバのIPアドレスなどとなっている。

 OFFERやACK、NACKなどは、DHCPでやりとりされるメッセージの種類である。ただし、すべてのDHCPのやりとりが表示されるわけでもないし(DHCPの一番最初のクライアント側からの要求や、DHCPのリースの更新などは見えない)、最近ではスイッチング・ハブなどの普及により、ほかのホストとDHCPサーバ間のやりとりがすべて見えるわけでもないので(ブロードキャスト・アドレスあてのパケットのみが見える)、あまり気にすることはないだろう。

 クライアント側のIPアドレスは、DHCPで割り当てられる前は不定なので0.0.0.0と表示されることもある。

 前出の例では、「(S)192.168.2.11」とか「(S)192.168.2.59」などと表示されているのが、これらはDHCPサーバのIPアドレスである。DHCPサーバを見付けるためには、これに注目する。つまり、このネットワークには、「192.168.2.11」と「192.168.2.59」という2台のDHCPサーバが存在しているということが分かる。

 IPアドレスが分かれば、あとはDNSの逆引きやtelnet、「TIPS―IPアドレスからホスト名を見付ける方法」などの手法を駆使して実際のDHCPサーバとなっているホストを見付ければよいだろう。

 なお、ここで表示されるDHCPサーバのIPアドレスは、DHCPパケットの中のサーバIPアドレス・フィールドに含まれるデータを表示しているようである。実際には、このDHCPパケットは下位のUDPパケットのペイロード(データ部分)として送信されており、そのUDPは、さらに下位のIPパケットのペイロードとして送信されている。送信元のサーバのIPアドレスは、このIPパケットのヘッダ中にも含まれているので、DHCPサーバのコンフィグレーションが間違っていたりすると、この2つの「サーバIPアドレス」が不一致となる可能性がある。このような場合は、表示されたIPアドレスのコンピュータを調べてみても、DHCPサービスが動作していない可能性がある。この場合は、次の方法を使って、より正確にDHCPパケットの内容を調べなければならない。

パケットのキャプチャによるDHCPサーバの検出

 DHCPプロトコルによるパケットのやりとりは、(一部を除き)ブロードキャストが使われているので、たとえスイッチング・ハブなどが使われている環境でも、パケットをキャプチャして解析することができる。Windows 2000 Serverに用意されているネットワーク・モニタを使えばよいだろう。

 ただしネットワーク・モニタでは、先のdhcploc.exeのように、DHCPのパケットを生成して送信することはできないので、少々手順が異なる。だれかがDHCPパケットを送信するまでずっとキャプチャし続けるか、手っ取り早くは、どこかのWindowsコンピュータ上で「ipconfig /release」と「ipconfig /renew」を実行してDHCPパケットを生成させればよい。「ipconfig /renew」だけだと、(Windowsの場合は)DHCPクライアントとDHCPサーバ間のユニキャスト通信になるので、スイッチング・ハブが導入されていると、キャプチャすることができない。必ずいったんIPアドレスを解放(/release)してから、再割り当て(/renew)させよう。

 ネットワーク・モニタによるDHCPパケットの解析は、慣れてくれば非常に便利で手っ取り早い。パケットの構造などもよく分かるし、どのようなパケットがやりとりされているかも簡単に見ることができる(DHCPで配布するIPアドレスが重複しないように、ARPプロトコルが使われているが、そのパケットもキャプチャできる)。

 また、DHCPパケットの中にあるサーバIPアドレスと、IPパケットの送信元IPアドレスの両方を見ることができるので、この方法なら、両者が一致していないというような、非常にやっかいなトラブルも見付けることができる。End of Article

関連記事(Windows Server Insider)
  Windows TIPS―IPアドレスからホスト名を見付ける方法
     
この記事と関連性の高い別のWindows TIPS
DHCPリレー・エージェントを使う
DHCPサーバを冗長構成で運用する方法
DHCPによる未許可クライアントへのIP割り当てを禁止する
DHCPサーバのスコープ・オプションを追加定義する
DHCPによるIPアドレスの切り替え時は、いったん解放してから再割り当てする
破損したDHCPデータベースを復元する(Windows Server 2003編)
Hyper-Vの内部ネットワークでDHCPを利用する
DHCPサーバで固定IPアドレスを割り当てる
DHCPサーバの構成情報をバックアップ/移行する
ノートPCのTCP/IP設定を簡単に切り替える方法
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「Windows TIPS」

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?