読者です 読者をやめる 読者になる 読者になる

DHCPサーバからIPアドレスが発行されない

ASCII.jp:DHCPサーバからIPアドレスが発行されない (1/2)|サーバトラブル解決のセオリーよりメモとして残しておく。

----------
TCP/IPのネットワークに接続する機器(コンピュータやルータなど)は、使用するIPアドレスサブネットマスクデフォルトゲートウェイなどを適切に設定する必要がある。この設定を個別に行なうのは面倒な作業となる。そこで活躍するのがDHCPサーバだ。

DHCPサーバの役割

 DHCP(Dynamic Host Configuration Protocolサーバはネットワークに参加するクライアントに対し、あらかじめ用意してあるIPアドレスの中から、他のクライアントが使用しているものとは重複しない適切なIPアドレスを割り当てる。同時にデフォルトゲートウェイDNS(Domain Name System)サーバのIPアドレスなどもクライアントに通知する。

DHCPサーバが割り当てるIPアドレス

 DHCPサーバがクライアントにIPアドレスを割り当てる方法には、動的割り当てと静的割り当ての2種類がある。動的割り当ては、あらかじめ確保したIPアドレス範囲(アドレスプール)の中から未割り当てのIPアドレスをクライアントに一定期間割り当てるというものだ。一方の静的割り当てでは、あらかじめMACアドレス(Media Access Control Address)をDHCPサーバに登録しておき、それに対応するIPアドレスを固定的に割り当てる。

 一般に、IPアドレスが変動しないほうがよいサーバやネットワーク機器は静的割り当てを行なうか、DHCPサーバが管理しないIPアドレスをローカルで設定する。どちらの方法を採用するかは管理ポリシーによるが、静的割り当てを行なうとIPアドレスの一元管理が可能になる代わりにDHCPサーバが停止したときにサーバもダウンしてしまうおそれがある。

クライアントにIPアドレスが発行されない

 DHCPサーバが動作しているにもかかわらずクライアントにIPアドレスを発行しない場合、いくつかの原因が考えられる。

アドレスプールの不足

 動的割り当てのために用意したアドレスプールを超える数のクライアントが同時にネットワークに接続されると、割り当てるIPアドレスが足りなくなる。接続されているクライアントの数とアドレスプールの範囲を確認し、不足している場合はアドレスプールを増やそう。またIPアドレスのリース期間(有効期限)があまりにも長すぎると、使われなくなったクライアントにIPアドレスを貸したままという状態に陥りやすい。リース期間の設定を短くすることも検討する。

 Windows Server内のDHCPサーバで動的に割り当てているIPアドレスを確認するには、DHCPの管理画面の[アドレスのリース]を開く(画面1、2)。
f:id:nonbei:20160504042124j:plain
画面1 Windows Server 2003DHCPサーバ設定

 静的割り当てをする場合はDHCPサーバにMACアドレスを登録し、IPアドレスを固定的に割り当てるようにする。画面1の例には表示されていないが、動的割り当てをしたクライアントとIPアドレスもここに表示される。
f:id:nonbei:20160504042142j:plain
画面2 DHCPによるIPアドレス割り当てをしない範囲

 画面2のDHCPサーバには192.168.3.16~192.168.3.240を管轄するスコープを設定してあり、192.168.3.1~192.168.3.15は管轄しない。また、192.168.3.224~192.168.3.240の範囲を除外設定しているため、この範囲のIPアドレスもクライアントに割り当てられない。

 UNIX系OSで一般的に使われているISC dhcpdでは、dhcpd.leasesというファイルの内容を確認する(画面3)。OSの種類によってこのファイルが置かれているディレクトリは異なる。たとえばRed Hat Enterprise Linuxの場合は、/var/lib/dhcpディレクトリに置かれている。
f:id:nonbei:20160504042157j:plain
画面3 dhcpd.leasesの内容

 dhcpd.leasesファイルには動的割り当てを行なったIPアドレスとリース(割り当て)期間、クライアントの情報が記録される。画面3の例では、192.168.3.218が2008/11/03 16:49:07~22:49:07までの期間限定で割り当てられ、すでに解放(binding statusがfree)されている。また、192.168.3.215はbinding statusがactiveなので割り当て中であることを示している。なお、日付時刻はすべてUTCとなっている。
複数のDHCPサーバが競合している

 DHCPのリクエストとレスポンスにはブロードキャストが用いられる。基本的には同一のブロードキャストドメインにはDHCPサーバを1台だけ設置して運用する。DHCPサーバは割り当てたIPアドレスとそのリース期間を管理する必要があるが、管轄するアドレスプールのIPアドレスをほかのDHCPサーバが割り当ててしまうと、これらの情報を把握できなくなってしまう。その結果、不適切なIPアドレスが割り当てられてネットワーク障害を起こす可能性がある。

 ブロードバンドルータにはDHCPサーバ機能を持つものが多いので注意が必要だ。

 競合の原因となっているDHCPサーバを見つけるには、Windows Support ToolsやWindows Server 2003 Resource Kit Toolsに含まれるdhcploc.exeというコマンドを利用するか、ネットワークモニタでDHCPパケットをキャプチャして調べる。これらのツールはマイクロソフトのダウンロードセンターサイトからダウンロードできる。

IPアドレスの手動設定による競合

 DHCPの動的割り当てをする範囲のIPアドレスをローカル設定で固定的に利用しているノードがあると、IPアドレスが競合してネットワークに接続できないクライアントが発生する可能性がある。Windowsではイベントログに競合ノードのMACアドレスが記録されるので、これを基に原因を突き止める。また、Linuxではarpingコマンドで原因ノードのMACアドレスを調べられる。

DHCPサーバを安全に冗長化するには

 同一のネットワークに複数のDHCPサーバが存在し、これらが競合するとネットワークトラブルの原因になる。しかし、DHCPサーバは重要な機能を持つため、耐障害性を向上させるためにも冗長化は行ないたい。

 簡単な解決法は、動的割り当てをするIPアドレスの範囲が重ならないように各DHCPサーバのアドレスプールを設定するというものだ。それぞれのDHCPサーバは自身が管轄するアドレスプールの管理を行ない、他のDHCPサーバが管轄するアドレスプールにはかかわらない。クライアントから見れば、どのDHCPサーバがIPアドレスやネットワーク接続情報を配布してくれてもかまわない。そのため、最低1台のDHCPサーバが稼働していればよい。しかしこの方法には、IPアドレスの利用効率が低下してしまうという欠点もある。

 もう1つの解決法として、ISC dhcpd 3.0以降で実装されたDHCPフェイルオーバー機能を利用することが挙げられる。これは2台のDHCPサーバが管理しているIPアドレス情報を交換して協調動作できるようにする仕組みだ。現在のところ利用可能なのはISC dhcpdだけであること、3台以上のDHCPサーバでは利用できないことが制限となるが、2台のDHCPサーバで同一のアドレスプールを管轄できるのでIPアドレスの利用効率が低下しないという利点がある。
----------