トポロジ
![](https://itinfranote.com/wp-content/uploads/image-4.png)
DHCPサーバの設定
DHCP サーバーを構成するための前提条件
Cisco機器ではフォルトでDHCPサービスは有効になっていますが、無効化になっている場合は有効にするため下記コマンドを実行します。
R3(config)#service dhcp
DHCPデータベースエージェントの設定
DHCPデータベースエージェントとは、DHCPサーバがクライアントに割り当てたIPアドレスやネットワーク構成情報をデータベースに記録して、必要に応じてデータベースから情報を取得する役割を果たす機能、またそのサーバのことです。CIscoでは以下のコマンドでDHCPデータベースエージェントのサーバを指定します。
R3(config)#ip dhcp database tftp:/192.168.1.1
オプションとしてtimeoutコマンドやwrite-delayコマンドを使用することができます。
timeoutはデータベースへの書き込みがタイムアウトするまでの時間を指定します。ネットワークの遅延により書き込みがの時間がかかりタイムアウトしてしまうような環境において、適切な値を設定することでタイムアウトしないように対処することが出来ます。
write-delayはDHCPデータベースにエントリを書き込む前に待機する時間を指定します。主にネットワークの負荷が高い場合やデータベースへの同時アクセスが競合する場合において、即座に書き込みを実施すると問題を引き起こす可能性があり、そのような事情を回避する手段となります。
どちらもcisco機器のデフォルトは300秒です。
R3(config)#ip dhcp database tftp:/192.168.1.1 ?
timeout Set the database transfer timeout
write-delay Set the database write delay
DHCPデータベースエージェントを設定しない場合は下記のように設定することが推奨されております。
R3(config)#no ip dhcp conflict logging
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アドレスを配布しない設定)
R3(config)#ip dhcp excluded-address 192.168.1.250 192.168.1.254
DHCPアドレスプールの作成
プール名を設定します。
R3(config)#ip dhcp pool test1
使用率の閾値の設定をします。highで設定された使用率を上回る、またはlowで設定された使用率を下回るとログメッセージが生成されます。
R3(dhcp-config)#utilization mark high 80 log
R3(dhcp-config)#utilization mark low 70 log
ネットワークアドレスの設定をします。マスクまたはプレフィックス長で設定できます。
R3(dhcp-config)#network 192.168.1.0 /24
ドメイン名の設定をします。
R3(dhcp-config)#domain-name test1.com
DNSサーバの設定をします。最大で8つ設定することができます。左に記載しているサーバから高い優先順位になります。
R3(dhcp-config)#dns-server 8.8.8.8
ブートファイル、ブートサーバの設定をします。クライアントがネットワークからのブート時に利用するTFTPサーバのIPアドレスとブートファイル名を設定します。
TFTPサーバは複数のIPアドレスを設定できます。
R3(dhcp-config)#bootfile test
R3(dhcp-config)#next-server 10.10.10.1
netbiosの設定をします。このコマンドはDHCPクライアントに対してNetBIOS(Network Basic Input/Output System)ネームサーバーのIPアドレスを提供します。NetBIOSは、Windowsネットワーク環境でコンピュータ名の解決やサービスの提供に使用されるプロトコルです。
R3(dhcp-config)#netbios-name-server 1.1.1.1
R3(dhcp-config)#netbios-node-type h-node
デフォルトゲートウェイの設定をします。
R3(dhcp-config)#default-router 192.168.1.254
リース期間の設定をします。デフォルトでは1日となっています。lease infiniteとすることで無制限にすることもできます。下記コマンドでは30日と設定しています。
R3(dhcp-config)#lease 30
セカンダリサブネットの構成をします。プライマリサブネットが枯渇すると、DHCPサーバはセカンダリサブネットのいずれかで使用可能なIPアドレスを自動的に検索します。
セカンダリサブネットを割り当てるときのデフォルトルータや閾値の設定もできます。
R3(dhcp-config)#network 192.168.10.0 /24 secondary
R3(config-dhcp-subnet-secondary)#override default-router 192.168.10.254
R3(config-dhcp-subnet-secondary)#override utilization high 60
R3(config-dhcp-subnet-secondary)#override utilization row 40
DHCPクライアントの確認
DHCPクライアントの設定を確認すると、指定したIPアドレスとドメイン、DNSサーバ、デフォルトゲートウェイが払い出されていることを確認できます
DHCP_Client_1:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:0c:eb:f6 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe0c:ebf6/64 scope link
valid_lft forever preferred_lft forever
DHCP_Client_1:~$ ip route
default via 192.168.1.254 dev eth0 metric 202
192.168.1.0/24 dev eth0 scope link src 192.168.1.1
DHCP_Client_1:~$ cat /etc/resolv.conf
search test1.com
nameserver 8.8.8.8
DHCP_Client_1:~$
手動バインドの構成
IPアドレスと機器のハードウェア情報を対応させてIPを払い出すことが出来ます。
DHCPサーバの設定
DHCPプール名を設定してDHCPコンフィギュレーションモードを開始します。
R3(config)#ip dhcp pool test1
クライアントに配布するIPアドレスとサブネットを指定します。excluded-addressで設定している範囲のIPアドレスは指定することが出来ません。
R3(dhcp-config)#host 192.168.1.249 /24
DHCPクライアントの識別子を指定します。
R3(dhcp-config)#client-identifier 0152.5400.0c83.45
クライアントがDHCPディスカバーで識別子ではなくハードウェアアドレスを送信する場合はhardware-addressコマンドを使用してハードウェアアドレスを指定します。今回は識別子を送信するのでこのコマンドは設定しません。(client-identifierとhardware-addressは両方設定することはできません。下記のように上書きされてしまいます。)
R3(dhcp-config)#do sh run | s dhcp
ip dhcp excluded-address 192.168.1.250 192.168.1.254
ip dhcp pool test2
host 192.168.1.249 255.255.255.0
client-identifier 0152.5400.1730.f4
client-name client2
R3(dhcp-config)#hardware-address 5254.0017.30f4 ethernet
R3(dhcp-config)#do sh run | s dhcp
ip dhcp excluded-address 192.168.1.250 192.168.1.254
ip dhcp pool test2
host 192.168.1.249 255.255.255.0
hardware-address 5254.0017.30f4
client-name client2
R3(dhcp-config)#
標準 ASCII 文字を使用してクライアントの名前を指定します。
R3(dhcp-config)#client-name client2
DHCPクライアントの確認
eth0をdown/upさせてDHCPディスカバーを送信してIPアドレスを取得しています。hostで指定した192.168.1.249が払い出されています。
DHCP_Client_2:~$ sudo ifdown eth0
DHCP_Client_2:~$ sudo ifup eth0
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.1.249, server 192.168.1.254
udhcpc: lease of 192.168.1.249 obtained from 192.168.1.254, lease time 86400
DHCP_Client_2:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:0c:83:45 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.249/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe0c:8345/64 scope link
valid_lft forever preferred_lft forever
DHCP_Client_2:~$
静的マッピングの構成
先ほどは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コンフィギュレーションモードを開始します。
R3(config)#ip dhcp pool test3
DHCPサーバがテキストファイルにアクセスするためのパスを記載します。tftpサーバとの通信が問題なければ以下のようにfileを取得することが出来ます。
ちなみにorigin fileコマンドはnetworkコマンドを共存することが出来ないので、別のプール名で設定する必要があります。
R3(dhcp-config)#origin file tftp://192.168.0.100/static-bindings.txt
Loading static-bindings.txt from 192.168.0.100 (via GigabitEthernet0/1): !
[OK – 173 bytes]
R3(dhcp-config)#
DHCPクライアントの確認
eth0をdown/upさせてDHCPディスカバーを送信してIPアドレスを取得しています。txtファイルに記載している通り192.168.1.253を取得できました。
DHCP_Client_3:~$ sudo ifdown eth0
DHCP_Client_3:~$ sudo ifup eth0
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.1.253, server 192.168.1.254
udhcpc: lease of 192.168.1.253 obtained from 192.168.1.254, lease time 86400
DHCP_Client_3:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:14:85:f9 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.253/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe14:85f9/64 scope link
valid_lft forever preferred_lft forever
DHCP_Client_3:~$
今回は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を送信しなくなります。
R3(config)#ip dhcp ping packets 5
プールアドレスからのping応答を待機する時間を指定します。
R3(config)#ip dhcp timeout 850
DHCP サーバーが受信した BOOTP 要求を選択的に無視し、応答しないことを許可します。
BOOTP(Bootstrap Protocol)とは、ネットワークデバイスがブート時にIPアドレスや他のネットワーク構成情報を取得するためのプロトコルです。BOOTPは主にネットワークブートプロセスで使用され、デバイスがネットワークからOSをロードするために必要な情報を取得するのに役立ちます。
R3(config)#ip dhcp bootp ignore
DHCPサーバオプションのインポート設定
DHCPサーバはほかのDHCPサーバからオプションの情報をインポートすることが出来ます。DHCPサーバーでオプションをインポートする主なメリットは、異なるDHCPプールやサーバーで共通の設定オプションを簡単かつ一貫して管理できることです。今回はR3びDNSサーバの情報をインポートさせたいと思います。
DHCPサーバの設定
R3(config)#ip dhcp pool test1
R3(dhcp-config)#network 192.168.1.0 /24
R3(dhcp-config)#dns-server 8.8.8.8 8.8.4.4
リモートデバイスの設定
R4をDHCPサーバとして構成します。その中で、import allコマンドを使用してDHCPサーバからオプションの情報を取得するようにしています。
R4(config)#ip dhcp pool test1
R4(dhcp-config)#network 192.168.2.0 /24
R4(dhcp-config)#import all
R4(dhcp-config)#exit
R4(dhcp-config)#int g0/0
R4(dhcp-config)#ip address dhcp
R4(dhcp-config)#end
設定確認
R3から取得したDNSサーバの情報がインポートされています。
R4#show ip dhcp import
Address Pool Name: test2
Domain Name Server(s): 8.8.8.8 8.8.4.4
オプション82の値によるクラス分け設定
オプション82とは
オプション82は、ネットワーク機器(通常はスイッチやルータ)がDHCPメッセージに追加情報を挿入するための標準化されたオプションです。このオプションは、DHCPリクエストとDHCP応答メッセージに特定の情報(サブネット、VLAN、ポート番号など)を含めることができます。
そのオプション82の情報を使用して、DHCPによるIPアドレスの割り当てをクラス化することが出来ます。
オプション82の有効化
R3(config)#ip dhcp use class
DHCPクラスとリレーエージェントの設定
DHCP クラスを定義し、DHCP クラス コンフィギュレーション モードを開始します。hexの値については後述します。
R3(config)#ip dhcp class test1
R3(config-dhcp-class)#relay agent information
R3(config-dhcp-class-relayinfo)#relay-information hex 020c020a0000c0a804fd01000000060454455354
R2でDHCPリレー設定を追記します。ip dhcp relay information optionコマンドを使用してオプション82を挿入できるようにします。
IFでip dhcp relay information option subscriber-idを設定することでオプション82にsubscriber-idを挿入することが出来ます。
R2(config-router)#int g0/1
R2(config-if)#ip helper-address 192.168.2.254
R2(config-if)#ip dhcp relay information option subscriber-id TEST
R2(config-if)#exit
R2(config)#ip dhcp relay information option
DHCPアドレスプールの定義
classコマンドで先ほど作成したtest1を指定してアドレスのレンジを指定します。
R3(config)#ip dhcp pool test1
R3(dhcp-config)#netw 192.168.4.0 255.255.255.0
R3(dhcp-config)#class test1
R3(config-dhcp-pool-class)#address range 192.168.4.100 192.168.4.100
R3(config-dhcp-pool-class)#end
R1のインターフェイスG0/2をshuw/no shutしてDHCPによるアドレスの取得を実行します。
指定通り192.168.1.100を割り当てることが出来ています。
R1(config)#int g0/2
R1(config-if)#no shutdown
R1(config-if)#shutdown
R1(config-if)#end
R1#sh ip int brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 unassigned YES unset administratively down down
GigabitEthernet0/1 unassigned YES manual administratively down down
GigabitEthernet0/2 192.168.4.100 YES DHCP up up
GigabitEthernet0/3 unassigned YES unset administratively down down
R1#
relay-information hexで指定するビット情報は各機器固有となります。今回はパケットキャプチャのオプション82の情報から確認しました。Option82フィールドのValueに記載されている値がhexで指定する値となります。
ちなみに、Option82フィールドにはAgent Remote IDやip dhcp relay information optionを設定した場合に追加されるsubscriber-idもあり、こちらの情報をhexで指定することもできます。
![](https://itinfranote.com/wp-content/uploads/image-3.png)
DHCPを通じた静的ルートの構成
DHCPサーバの設定
R3(config)#ip dhcp pool test1
R3(dhcp-config)#netw 192.168.1.0 /24
R3(dhcp-config)#default-router 192.168.1.254
DHCPクライアントの設定
ip route コマンドにdhcpをつけることでDHCPでアドレスを取得しているときのみルーティング情報を取得するようにしています。
ルータ上の複数のインターフェイスが DHCP サーバから IP アドレスを取得するように設定されている場合は、 インターフェイスを指定します。指定していないといずれかのインターフェイスがIPアドレスを取得するとルーティングテーブルに追加されます。
R4(config)#ip route 192.168.2.0 255.255.255.0 gi0/0 dhcp
R4(config)#end
R4#sh ip route | b Gateway
Gateway of last resort is not set
インターフェイスをUPさせてDHCPでアドレス情報を取得します。
R4#conf t
R4(config)#int g0/0
R4(config-if)#ip address dhcp
R4(config-if)#no shutdown
R4(config-if)#end
*Mar 11 13:37:50.554: %DHCP-6-ADDRESS_ASSIGN: Interface GigabitEthernet0/0 assigned DHCP address 192.168.1.7, mask 255.255.255.0, hostname R4
ルーティング情報の確認
DHCPでIPアドレスを取得できているので192.168.2.0/24のスタティックルートが追加されています。
R4#sh ip route | b Gateway
Gateway of last resort is 192.168.1.254 to network 0.0.0.0
S* 0.0.0.0/0 [254/0] via 192.168.1.254
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0
L 192.168.1.7/32 is directly connected, GigabitEthernet0/0
S 192.168.2.0/24 [1/0] via 192.168.1.254, GigabitEthernet0/0
R4#
DHCPサーバの変数のクリア
DHCP データベースからバインディングされたデータを削除します。
R3#clear ip dhcp binging *
DHCPデータベースから競合しているIPアドレスのデータを削除します。
R3#clear ip dhcp conflict *
参考文献
DHCP Configuration Guide
Configuring the Cisco IOS XE DHCP Server
DHCP でアドレスが配布されるブロードバンド回線への接続設定例