Tips

DHCP トラブル後編 no ip dhcp conflict logging

前回、DHCPの設定ミスにより、私自身が起こしてしまったトラブルの事例を紹介しました。
結論からするとタイトル部分のコマンドを入力していないために発生したものとなっています。
このコマンドを入力するとどうなるのかを説明するために軽くDHCPサーバの動作を説明します。

DHCPサーバはクライアントにIPアドレスを配布する際、ICMPパケットを使用して配布しようとしているアドレスが
使用されているかどうかを確認します。応答がなければそのままクライアントからの要求にそのアドレスを配布します。
逆にICMPの応答が返ってくるということは使用しているということになるため、配布用に用意しているアドレスから
余っている別のアドレスを選び出します。
これにより同じIPアドレスを配布してしまうことを予防しているわけです。

では、この使用されていると判明したアドレスは、このあとどんな扱いをされるのでしょうか。
CiscoルータではIPアドレスの競合(コンフリクト)が起きたアドレスはルータ内に記録されます。
そしてこの記録されたアドレスは次からは配布対象とされなくなります。つまりプールから除外される形となります。
仮に100個のアドレスを配布できるようにプールを作成しても50個のアドレスでコンフリクトが起きると、
今後使用できるのは残りの50個だけとなってしまいます。

前回書いたのような状況を再現するためにちょっとした検証環境を作ってみました。
CiscoルータをDHCPサーバとします。アドレスが割り当てれらない状況を手っ取り早く再現するために、プールする
アドレスを5つだけにしておきます。PCは4台存在することとします。

4台のPCを起動すると4つのアドレスが配布されました。以下のようになっています。※MACアドレスは一部消しています。

固定で使用するアドレスを増やすために1つのアドレス「192.168.100.105」を除外対象にします。まだIPアドレスは足りてますね。POOLの次に配布するアドレスは192.168.100.105になっています。※「show ip dhcp pool」から抜粋


ここで「clear ip dhcp binding *」で前回のトラブル事例と同様に一度バインディング情報を削除します。
そのあと「192.168.100.103」のPCはシャットダウンしました。これには特に意味はありません。

さてここで「192.168.100.104」のアドレスを持っていた端末で再起動をかけるとどうなるでしょうか。
バインディングの情報があれば、再度同じアドレスが割り当てられたと思いますが、消えているため新しく割り振ろうとします。
DHCPサーバは、次に配布する予定だった「192.168.100.105」は使えないので、最初に戻って割り当てようとします。
しかし「192.168.100.101」「192.168.100.102」はすでに使用されているため、コンフリクトのリストに登録されてしまい
ました。そこでどのPCも使用していない「192.168.100.103」が割り当てられることになります。

 

さらに「192.168.100.102」のPCを再起動すると「192.168.100.104」が割り当てられました。バインディングの情報があれば、再度同じアドレスが割り当てられたと思いますが、消されている上にコンフリクト情報として登録されているため、このアドレスとなったようです。

ここでシャットダウンしていたPCを起動させましたがIPが取れません。コンフリクトに2つ登録されているから配るものがない状態です。


さらに「192.168.100.101」のアドレスを取得していたPCで一度「ipconfig /release」「ipconfig /renew」を行うとIPが取れません。バインディング情報を消す前から持っていたアドレスなので返すまでは使えていましたが、コンフリクトとして登録はされていたので
返してしまうと再度配られることがなくなってしまったからです。前回、途中でアドレスが取れなくなったという端末がありましたが、
おそらく同じ状況となったのでしょう。
103はバインディング情報が登録されているので解放しても再度取得することができます。

 

今回はコマンドによりバインディング情報を消したためこうなりましたが、再起動等でも同じような状況となります。
そこでコンフリクトが起きてもその情報をルータに保存させないようにするのが表題のコマンドとなります。
(config)#no ip dhcp conflict logging

実際に起こってしまった場合は「clear ip dhcp conflict *」コマンドでコンフリクト情報を消せば、再度アドレスが配布されるようになります。

推奨はバインディングの情報などを別サーバに保存する設定のようです。
例えば「192.168.100.232」のTFTPサーバに「dhcpdb」というファイル名で保存するには以下のようにします。
(config)#ip dhcp database tftp://192.168.100.232/dhcpdb

まだまだ勉強が足りないなと実感しました。

Recent News

Recent Tips

Tag Search