DHCPと動的自動設定
DHCP(Dynamic Host Configuration Protocol)は名前の示すとおり、動的/自動的にホストの設定を行うためのプロトコルだ。主にクライアントのブート時など、自身のIPアドレスを自動設定するために、DHCPサーバから取得する際に用いられる。
DHCPはもともとBOOTP(BOOTstrap Protocol:RFC951)RFC951)が基になっており、メッセージ構造などはほぼそのままだ。BOOTPでは単にクライアントに使用させたいIPアドレスを通知するだけだったのに対し、DHCPでは拡張部分を利用して、割り当てられたIPアドレスに利用可能期間(リース期間)を設けたり、クライアントに使用させたいDNSサーバやデフォルト・ゲートウェイのIPアドレスといった設定値も自動設定できるよう、汎用的に定義し直している。これらは、RFC2131とRFC2132で規定されている。
DHCPの最も端的なメリットは、クライアント機のネットワーク設定の自動化だ。DHCPサーバで値さえ設定しておけば、後はクライアント自身が必要に応じて自動的に設定値を読み取り設定してくれる。いちいちすべてのクライアントに対して、個々にIPアドレスを割り振ったり管理する必要がなくなる。
Windowsでは、コントロールパネルの「ネットワークとダイヤルアップ接続」プロパティなどの「TCP/IP」設定において、手動でIPアドレスを取得するのではなく、「自動的に取得する」を選択しておくだけだ。または、ipconfigコマンドによって手動で実行することもできる。
管理者は、DHCPサーバにおいて、まず割り当てるIPアドレスの範囲を決定できる。これがIPアドレスのプールだ。この範囲で、DHCPサーバは個々のクライアントにユニークとなるようにIPアドレスを順に割り当ててくれる。この範囲外の割り当ては拒否されるので、限りあるIPアドレスを、実際に使用する分だけ効率的に活用できる。通常、どのホストにどのアドレスが割り当てられるかはサーバが自動的に決定するが、特定のMACアドレスのクライアントに対して特定のIPアドレスを割り当てるよう設定できる場合もある。
また、リース期間を設けることで、定期的にIPアドレスを再割り当てできる。このリース期間を過ぎると、DHCPクライアントは現在割り当てられているIPアドレスを破棄し、再びDHCPサーバに再割り当てを要求する。また、クライアントはリース期間前に利用を終了し、割り当てられたIPアドレスを返却(リリース)することもできる。これらの機能により、常に必要最小限度のIPアドレスでの運用が可能になる。
一般には、このようにIPアドレスの自動「貸し出し」機能としてとらえられるDHCPだが、IPアドレスの取得機能自体はBOOTPですでに対応している機能にすぎない。IPアドレスに限らず、実際のネットワーク設定では、さらにサブネット・マスク・アドレスやデフォルト・ゲートウェイ・アドレス、DNSサーバ・アドレスなどの設定をする必要があるが、それらさまざまな「オプション」の自動設定にも対応しているのが、DHCPの大きな特徴となっている。
DHCPメッセージ
以下は、DHCPで用いられる「メッセージ」のデータ構造図だ。クライアント?サーバ間では、こうしたメッセージのやりとりにより、IPアドレスなどのデータがクライアントにより取得される。
DHCPメッセージはUDPによって送信される。ポート番号は、サーバ側は67、クライアント側では68が使用されることになっている。
BOOTPとメッセージ構造は同じだ。クライアントIPアドレスは最終的にクライアントへ割り当てられたIPアドレス、サーバIPアドレスは割り当てたDHCPサーバのアドレスで、BOOTPと共通している。ただし、DHCPではオプション部分にタグ番号で示されるさまざまな種類のデータを設定して、より詳細なオプション・データを通知できる。
タグ値(10進) | タグ名 | サイズ(オクテット) | 意味 |
---|---|---|---|
1 | Subnet Mask | 4 | サブネット・マスク・アドレス |
3 | Router | 可変 | デフォルト・ゲートウェイ・アドレス |
6 | Domain Server | 可変 | DNSサーバ・アドレス |
12 | Hostname | 可変 | クライアントのホスト名 |
15 | Domain Name | 可変 | DNSドメイン名 |
50 | Address Request | 4 | クライアントがリクエストするIPアドレス |
51 | Address Time | 4 | IPアドレス・リース期間 |
53 | DHCP Msg Type | 1 | DHCPメッセージ・タイプ |
54 | DHCP Server Id | 4 | DHCPサーバ・アドレス |
56 | DHCP Message | 可変 | DHCPエラーメッセージ |
58 | Renewal Time | 4 | クライアントがアドレスを取得してからRenewal(リースの再延長要求)するまでの期間(秒) |
59 | Rebinding Time | 4 | クライアントがアドレスを取得してからRebindingするまでの期間(秒) |
表1 DHCPオプションの一覧(一部抜粋。こちらをクリックすると表全体を表示します) |
実際のDHCPメッセージでのメインの情報となるのがオプション部分だ。これらのオプション・データは、オプション部分に複数設定される「レコード」データだと思えばよい。
タグ「53」のデータは、「DHCPメッセージ・タイプ」と呼ばれる。DHCPにおけるクライアントからサーバへの要求やデータの通知など、DHCPメッセージとしての主要な意味を伝えるのに使用される。次のような種類が定義されている。
値 | メッセージ名 | 意味 |
---|---|---|
1 | DHCPDISCOVER | クライアントがサーバを「発見」するためのメッセージ |
2 | DHCPOFFER | サーバからクライアントへの設定値「候補」を通知するメッセージ |
3 | DHCPREQUEST | クライアントが決定したサーバへの取得依頼メッセージ |
4 | DHCPDECLINE | クライアントからサーバへの拒否(エラー)メッセージ |
5 | DHCPACK | サーバからクライアントへの取得正常終了メッセージ |
6 | DHCPNAK | サーバからクライアントへの取得拒否(エラー)メッセージ |
7 | DHCPRELEASE | クライアントからサーバへのリリース要求メッセージ |
8 | DHCPINFORM | IPアドレス取得は行わず、オプション取得のみ行う場合にクライアントから送られるメッセージ |
9 | DHCPFORCERENEW | サーバからクライアントへの再構成要求。サーバから能動的に再設定を指示できる。RFC3203で定義されている。ただし対応するサーバ製品はまだないようだ |
表2 DHCPメッセージ種類 |
サブネット・マスク・アドレス、デフォルト・ゲートウェイ・アドレスなどの設定値はオプションで示される。大変数多く定義されているが、すべてのDHCPクライアントが、これら設定値を完全に解釈して設定できるとは限らない。例えばWindowsのDHCPクライアントでは、サブネット・マスク・アドレス、デフォルト・ゲートウェイ・アドレス、DNSサーバ名、DNSドメイン名のほか、WINSサーバ・アドレス、ノード・タイプなどに限られる。また、これらRFCなどで定義された標準値以外にも、ベンダなどが独自に定義できる「クラス」も表現可能だ。
なお、どのようなオプションやメッセージ種類が定義されているかは、RFC2132またはIANAのサイトにある「DHCP and BOOTP Parameters」で確認することができる。
DHCPの処理フロー
リース時
図3 リース時の動作。DHCPサーバがDISCOVERメッセージを受信すると、自身で割り当てられるIPアドレスやオプションをOFFERメッセージで返答する。DHCPサーバがクライアントからREQUESTメッセージを受け取ると、要求されたIPアドレスに問題がなければ、プールされているアドレスから貸し出す(図版をクリックすると拡大表示します)
クライアントがサーバに対してIPアドレスなどの取得を行いたい場合には、まずDHCPDISCOVERメッセージをサブネット全体に対して送出する。つまりブロードキャストだ。イーサネット・フレームの送信先MACアドレスは「FF:FF:FF:FF:FF:FF」、IPパケットの送信先IPアドレスは「255.255.255.255」(サブネット・マスクが「255.255.255.0」の場合)となっている。つまり、クライアントはあらかじめどのホストがDHCPサーバなのかさえも知っている必要がない。そのため、ネットワーク全体に対して問い合わせするわけだ。これは、最大限クライアントでの設定変更を省くために有効だ。クライアントも、まだ自身のIPアドレスを持っていないため、送信元IPアドレスは「0.0.0.0」としている。
DHCPサーバがDHCPDISCOVERメッセージを発見すると、次にDHCPOFFERメッセージを返答する。これは、候補とするIPアドレスをクライアントへ通知するメッセージだ。また、DHCPサーバが自身であることを通知するメッセージでもある。このIPアドレスで問題ないとクライアントが判断した場合には、正式な取得要求であるDHCPREQUESTメッセージが送信される。これを受け、サーバはDHCPACKメッセージによってIPアドレスやそのほかオプションを通知、クライアントで設定が行われることになる。
なお、DHCPOFFERメッセージによって受信したIPアドレスが、ほかのホストによってすでに使用されており、それをクライアントが発見した場合などには、DHCPDECLINEメッセージがサーバへ送られ、再度DHCPDISCOVERが行われる。またDHCPREQUESTメッセージ受信後、何らかの問題でそのIPアドレスをリースできないとサーバが判断した場合には(すでにリースされてしまった場合など)、DHCPACKメッセージではなく、DHCPNAKメッセージがクライアントへ通知され、やはり再度DHCPDISCOVERからやり直される。
これらの通信はすべて、ブロードキャストでのみ実行されることに注意しよう。つまり、実際には複数のDHCPサーバがサブネット内に設置されている可能性もある。その場合には、複数のDHCPサーバからDHCPOFFERメッセージが返信されるかもしれない。クライアントはその中から特定のサーバを選択してDHCPREQUESTを行うが、ほかのサーバがすべてそうした通信も把握できるようにするために、通信はすべてブロードキャストでなければならないのだ。また、実際に割り当てられるIPアドレスはサーバの決定次第だが、以前に使用していたIPアドレスがある場合は、DHCPDISCOVERメッセージでそれを要求する場合もある(Rebindの動作)。
リース延長
DHCPACKメッセージで通知されるリース期間として、実際のリース期間のほか、Renewing期間、Rebinding期間も通知されることがある。Renewing期間を過ぎると、同じDHCPサーバへリースの延長(Renew)を求めなければならない。またRebinding期間が過ぎると、どのサーバでもいいのでDHCPDISCOVERメッセージで再度IPアドレスの再取得(Rebind)を行わなければならない。リース期間はIPアドレスを使用できる最大期間で、この期間を過ぎると、サーバ側で現在のIPアドレスがほかのクライアントへ再割り当てされるかもしれないので、クライアントがそのIPアドレスを利用し続けてはならない。一般に、次の順番で期間が長くなる。
Renewing期間 < Rebinding期間 < リース期間
リース延長要求は特定のDHCPサーバに対して行われるため、ブロードキャストではなくユニキャストで行われる。延長要求なので、現在使用しているIPアドレスが必ず指定されるが、それ以外はリース時と同様の動作だ。これは、Windowsのipconfigコマンドなど、ユーザーが手動でRenewingを行うことも可能だ。
リリース
DHCPクライアントからIPアドレスのリリース(返却/解放)が行われると、サーバはリリースされたIPアドレスを再びプールして、ほかのクライアントからの要求に再利用できるようになる。リリースでは、単にクライアントからサーバへ通知すれば処理は終了だ。
追加設定の問い合わせ
DHCPINFORMメッセージはIPアドレスの割り当ては行わず、使用するオプションのみを問い合わせるメッセージだ。受け取ったサーバはDHCPACKメッセージによってオプションのみを通知する。
DHCPを使用する際のヒント
1つのサブネットには原則1つのDHCPサーバ
DHCPDISCOVERメッセージの例のように、クライアントはサブネット全体へのブロードキャストによってDHCPサーバを「発見」する。ブロードキャストはサブネットを越えないので、通常はクライアントと同一のサブネット内のDHCPサーバしか使用できないことになる。
逆に、1つのサブネットに複数のDHCPサーバを配置することも理論上は問題ない。すでに説明したように、DHCPサーバはやりとりされるブロードキャスト・メッセージを追跡するので特に誤動作はないものの、実運用上あまり意味はないかもしれない。
DHCPリレー・エージェント
とはいえ、すべてのサブネットごとにDHCPサーバを配置してそれぞれ管理するのは煩雑な作業だ。そこで、ほかのサブネット上のDHCPサーバへDHCPメッセージを仲介する「DHCPリレー・エージェント」と呼ぶ仕組みがある。
DHCPリレー・エージェントはサブネット内のDHCPメッセージを発見すると、自身の把握しているほかのサブネットのDHCPサーバへメッセージを転送するとともに、クライアントとの通信を中継する。例えば、ダイヤルアップ接続してきたクライアントとDHCPサーバを仲介する、などの利用が行われる。つまり、DHCPクライアントが接続されるサブネットでは、DHCPサーバかDHCPリレー・エージェントを配置すればよい。
ルータなどでサポートしている例もあるほか、Windows 2000では「ルーティングとリモートアクセス」サービス、LinuxではdhcrelayコマンドなどでDHCPリレー・エージェントを構成できる。
リース期間の設定に注意
多くのWindowsクライアントでもそうだが、DHCPクライアントとして構成されたホストが、シャット・ダウン時に必ずしもIPアドレスをリリースするとは限らない点に注意しよう。ほとんどの場合、リース期間が訪れるまではリリースせず、起動時にリース期間を過ぎていたらリース延長要求を行うだけだ。リリースという行為自体、あまり頻繁には行われない。
例えば、モバイルで使用しているクライアントが多い場合、実際に使用していないクライアントが多いにもかかわらず、ほとんどのIPアドレスがリースされっ放しで、IPアドレスが足りなくなってしまうことがある。これは、リリースが行われずにネットワークから離れるホストが多い場合によく見受けられる現象だ。十分なIPアドレスが確保できている場合には問題ないが、少ないIPアドレスを順に使い回すつもりだと、予想に反して慌ててしまうこともある。
こうした場合には、リース期間を見直して短くしてみよう。通常、リース期間はデフォルト値だと1週間程度となっているはずだが、これを1日?数時間としてみる。こうすることで、サーバでプールに戻されるIPアドレスの割合が上がり、効率的な割り当ても可能になる。あまり短すぎても、DHCPアクセスが頻繁に起こる結果となるだけなので、このときは適度な期間を見つけ出すしかない。
Copyright © ITmedia, Inc. All Rights Reserved.