Cisco DHCPサーバ

トポロジ

DHCPサーバの設定

DHCP サーバーを構成するための前提条件

Cisco機器ではフォルトでDHCPサービスは有効になっていますが、無効化になっている場合は有効にするため下記コマンドを実行します。

DHCPデータベースエージェントの設定

DHCPデータベースエージェントとは、DHCPサーバがクライアントに割り当てたIPアドレスやネットワーク構成情報をデータベースに記録して、必要に応じてデータベースから情報を取得する役割を果たす機能、またそのサーバのことです。CIscoでは以下のコマンドでDHCPデータベースエージェントのサーバを指定します。

オプションとしてtimeoutコマンドやwrite-delayコマンドを使用することができます。
timeoutはデータベースへの書き込みがタイムアウトするまでの時間を指定します。ネットワークの遅延により書き込みがの時間がかかりタイムアウトしてしまうような環境において、適切な値を設定することでタイムアウトしないように対処することが出来ます。
write-delayはDHCPデータベースにエントリを書き込む前に待機する時間を指定します。主にネットワークの負荷が高い場合やデータベースへの同時アクセスが競合する場合において、即座に書き込みを実施すると問題を引き起こす可能性があり、そのような事情を回避する手段となります。
どちらもcisco機器のデフォルトは300秒です。

DHCPデータベースエージェントを設定しない場合は下記のように設定することが推奨されております。

Cisco公式ドキュメントで下記のように記載されています。

データベース エージェントを使用することを強くお勧めします。ただし、Cisco DHCP サーバはデータベース エージェントなしで実行できます。DHCP データベース エージェントを設定しない場合は、グローバル コンフィギュレーション モードで no ip dhcpconflictlogging コマンドを使用して、DHCP サーバ上の DHCP アドレス競合の記録 を無効にします。競合ログが存在するがデータベース エージェントが設定されていない場合、デバイスの再起動時にスイッチオーバー中のバインディングが失われます。誤った競合が発生し、アドレスがアドレス プールから削除される可能性があります。

DHCP データベース エージェントの構成または競合ログの無効化

除外アドレスの設定

一部のネットワーク機器に対して固定で払い出しをしているIPアドレスについてはDHCPサーバで配布しないように除外する必要があります。
IPアドレスはexcluded-addressコマンドを使用して範囲で設定します。(下記の場合は192.168.1.250から192.168.1.254までの5つのIPアドレスを配布しない設定)

DHCPアドレスプールの作成

プール名を設定します。

使用率の閾値の設定をします。highで設定された使用率を上回る、またはlowで設定された使用率を下回るとログメッセージが生成されます。

ネットワークアドレスの設定をします。マスクまたはプレフィックス長で設定できます。

ドメイン名の設定をします。

DNSサーバの設定をします。最大で8つ設定することができます。左に記載しているサーバから高い優先順位になります。

ブートファイル、ブートサーバの設定をします。クライアントがネットワークからのブート時に利用するTFTPサーバのIPアドレスとブートファイル名を設定します。
TFTPサーバは複数のIPアドレスを設定できます。

netbiosの設定をします。このコマンドはDHCPクライアントに対してNetBIOS(Network Basic Input/Output System)ネームサーバーのIPアドレスを提供します。NetBIOSは、Windowsネットワーク環境でコンピュータ名の解決やサービスの提供に使用されるプロトコルです。

デフォルトゲートウェイの設定をします。

リース期間の設定をします。デフォルトでは1日となっています。lease infiniteとすることで無制限にすることもできます。下記コマンドでは30日と設定しています。

セカンダリサブネットの構成をします。プライマリサブネットが枯渇すると、DHCPサーバはセカンダリサブネットのいずれかで使用可能なIPアドレスを自動的に検索します。
セカンダリサブネットを割り当てるときのデフォルトルータや閾値の設定もできます。

DHCPクライアントの確認

DHCPクライアントの設定を確認すると、指定したIPアドレスとドメイン、DNSサーバ、デフォルトゲートウェイが払い出されていることを確認できます

手動バインドの構成

IPアドレスと機器のハードウェア情報を対応させてIPを払い出すことが出来ます。

DHCPサーバの設定

DHCPプール名を設定してDHCPコンフィギュレーションモードを開始します。

クライアントに配布するIPアドレスとサブネットを指定します。excluded-addressで設定している範囲のIPアドレスは指定することが出来ません。

DHCPクライアントの識別子を指定します。

クライアントがDHCPディスカバーで識別子ではなくハードウェアアドレスを送信する場合はhardware-addressコマンドを使用してハードウェアアドレスを指定します。今回は識別子を送信するのでこのコマンドは設定しません。(client-identifierとhardware-addressは両方設定することはできません。下記のように上書きされてしまいます。)

標準 ASCII 文字を使用してクライアントの名前を指定します。

DHCPクライアントの確認

eth0をdown/upさせてDHCPディスカバーを送信してIPアドレスを取得しています。hostで指定した192.168.1.249が払い出されています。

静的マッピングの構成

先ほどはDHCPサーバ上でマッピングを設定しましたがTFTPサーバにtxtファイルを配置してその中にマッピング情報を記載してマッピングさせることもできます。

マッピングファイルの作成

ローカルのデスクトップにIPアドレスとMACアドレスをマッピングさせたtxtファイルを配置します。

*time Jan 21 2005 03:52 PM
*version* 2
!IP address Type Hardware address Lease expiration
192.168.1.253 /24 id 0152.5400.1485.f9 Infinite
*end

DHCPサーバの設定

DHCPプール名を設定してDHCPコンフィギュレーションモードを開始します。

DHCPサーバがテキストファイルにアクセスするためのパスを記載します。tftpサーバとの通信が問題なければ以下のようにfileを取得することが出来ます。
ちなみにorigin fileコマンドはnetworkコマンドを共存することが出来ないので、別のプール名で設定する必要があります。

DHCPクライアントの確認

eth0をdown/upさせてDHCPディスカバーを送信してIPアドレスを取得しています。txtファイルに記載している通り192.168.1.253を取得できました。

今回はLinuxのDHCPクライアント側からidでMACアドレス情報が送信されるのでtxtファイルのtypeはid、MACアドレスは先頭に01をつけたものを記載しています。
識別子とハードウェアアドレスについて詳しく確認したい方は下記を参照ください。

DHCP Static Mapping のトラブルシューティング方法

DHCPサーバのping設定

DHCPサーバはクライアントにIPアドレスを割り当てる前に、プールのアドレスに2回pingを実行します。pingに応答がなければそのIPアドレスが使用されていないことが想定されるので、クライアントにIPアドレスを割り当てます

DHCPサーバの設定

DHCPサーバがプールアドレスに送信するpingパケットの数を指定します。デフォルトは2です。0にするとpingを送信しなくなります。

プールアドレスからのping応答を待機する時間を指定します。

DHCP サーバーが受信した BOOTP 要求を選択的に無視し、応答しないことを許可します。

BOOTP(Bootstrap Protocol)とは、ネットワークデバイスがブート時にIPアドレスや他のネットワーク構成情報を取得するためのプロトコルです。BOOTPは主にネットワークブートプロセスで使用され、デバイスがネットワークからOSをロードするために必要な情報を取得するのに役立ちます。

DHCPサーバオプションのインポート設定

DHCPサーバはほかのDHCPサーバからオプションの情報をインポートすることが出来ます。DHCPサーバーでオプションをインポートする主なメリットは、異なるDHCPプールやサーバーで共通の設定オプションを簡単かつ一貫して管理できることです。今回はR3びDNSサーバの情報をインポートさせたいと思います。

DHCPサーバの設定

リモートデバイスの設定

R4をDHCPサーバとして構成します。その中で、import allコマンドを使用してDHCPサーバからオプションの情報を取得するようにしています。

設定確認

R3から取得したDNSサーバの情報がインポートされています。

オプション82の値によるクラス分け設定

オプション82とは

オプション82は、ネットワーク機器(通常はスイッチやルータ)がDHCPメッセージに追加情報を挿入するための標準化されたオプションです。このオプションは、DHCPリクエストとDHCP応答メッセージに特定の情報(サブネット、VLAN、ポート番号など)を含めることができます。

そのオプション82の情報を使用して、DHCPによるIPアドレスの割り当てをクラス化することが出来ます。

オプション82の有効化

DHCPクラスとリレーエージェントの設定

DHCP クラスを定義し、DHCP クラス コンフィギュレーション モードを開始します。hexの値については後述します。

R2でDHCPリレー設定を追記します。ip dhcp relay information optionコマンドを使用してオプション82を挿入できるようにします。
IFでip dhcp relay information option subscriber-idを設定することでオプション82にsubscriber-idを挿入することが出来ます。

DHCPアドレスプールの定義

classコマンドで先ほど作成したtest1を指定してアドレスのレンジを指定します。

R1のインターフェイスG0/2をshuw/no shutしてDHCPによるアドレスの取得を実行します。
指定通り192.168.1.100を割り当てることが出来ています。

relay-information hexで指定するビット情報は各機器固有となります。今回はパケットキャプチャのオプション82の情報から確認しました。Option82フィールドのValueに記載されている値がhexで指定する値となります。
ちなみに、Option82フィールドにはAgent Remote IDやip dhcp relay information optionを設定した場合に追加されるsubscriber-idもあり、こちらの情報をhexで指定することもできます。

DHCPを通じた静的ルートの構成

DHCPサーバの設定

DHCPクライアントの設定

ip route コマンドにdhcpをつけることでDHCPでアドレスを取得しているときのみルーティング情報を取得するようにしています。
ルータ上の複数のインターフェイスが DHCP サーバから IP アドレスを取得するように設定されている場合は、 インターフェイスを指定します。指定していないといずれかのインターフェイスがIPアドレスを取得するとルーティングテーブルに追加されます。

インターフェイスをUPさせてDHCPでアドレス情報を取得します。

ルーティング情報の確認

DHCPでIPアドレスを取得できているので192.168.2.0/24のスタティックルートが追加されています。

DHCPサーバの変数のクリア

DHCP データベースからバインディングされたデータを削除します。

DHCPデータベースから競合しているIPアドレスのデータを削除します。

参考文献

DHCP Configuration Guide
Configuring the Cisco IOS XE DHCP Server
DHCP でアドレスが配布されるブロードバンド回線への接続設定例