Cisco IOSはDHCPサーバとしての機能も備えています。このページではDHCPサーバの基本的な設定方法についてまとめます。
DHCP sequence
各メッセージ概要
DHCPが使用するメッセージが以下の通りです概要をまとめると以下の通りです。
| メッセージ | |
|---|---|
| Discover | DHCP clientからDHCP serverに対してIPアドレスを割り当ててもらうよう要求します。 |
| Offer | DHCP serverがDHCP clientに割り当てるIPアドレスを通知します。 |
| Request | DHCP clientが実際に使用するIPアドレスをDHCP Serverに通知します。 |
| ACK | DHCP serverがDHCP clientにDHCP Requestで要求されたIPアドレスが使用可能である事を通知します。 |
| NACK | DHCP serverがDHCP clientにDHCP Requestで要求されたIPアドレスが使用不可である事を通知します。 |
| Release | DHCP clientがDHCP serverに割り当られたIPアドレスを使用しなくなった事を通知します。 |
DHCP Discover
DHCP DiscoverはDHCP clientがDHCP serverに対してIPアドレスを割り当ててもらうよう要求するメッセージです。DHCP clientは、まだIPアドレスが割り当てられていない状態なので、broadcast宛てにメッセージを送信します。
Ethernet II, Src: cc:00:07:30:00:00 (cc:00:07:30:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 299
Checksum: 0x3536 [validation disabled]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0x00001866
Seconds elapsed: 0
Bootp flags: 0x8000 (Broadcast)
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: cc:00:07:30:00:00 (cc:00:07:30:00:00)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Discover
Option: (t=57,l=2) Maximum DHCP Message Size = 1152
Option: (t=61,l=27) Client identifier
Option: (t=12,l=2) Host Name = "R1"
Option: (t=55,l=8) Parameter Request List
End Option
DHCP Offer
DHCP ServerはDiscoverに対する返答として、Offerを返します。OfferはClientに割り当てるIPアドレスやリース期間、DHCP ServerのIPアドレスなどが含まれています。
Ethernet II, Src: cc:01:07:30:00:00 (cc:01:07:30:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol, Src: 192.168.12.2 (192.168.12.2), Dst: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)
Source port: bootps (67)
Destination port: bootpc (68)
Length: 308
Checksum: 0xad60 [validation disabled]
Bootstrap Protocol
Message type: Boot Reply (2)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0x00001866
Seconds elapsed: 0
Bootp flags: 0x8000 (Broadcast)
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 192.168.12.1 (192.168.12.1)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: cc:00:07:30:00:00 (cc:00:07:30:00:00)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Offer
Option: (t=54,l=4) DHCP Server Identifier = 192.168.12.2
Option: (t=51,l=4) IP Address Lease Time = 1 day
Option: (t=58,l=4) Renewal Time Value = 12 hours
Option: (t=59,l=4) Rebinding Time Value = 21 hours
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
End Option
Padding
DHCP Request
DHCP ServerはOfferに対する返答として、Requestを返します。
DHCP Serverが冗長化されている構成では、Clientは複数のサーバからOfferを受け取ります。ClientはどのサーバからのOfferを採用するかを通知するために、DHCP ServerのIPアドレスなどが含まれたメッセージをbroadcast宛てでDHCP Serverに返します。
Ethernet II, Src: cc:00:07:30:00:00 (cc:00:07:30:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 317
Checksum: 0xad2f [validation disabled]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0x00001866
Seconds elapsed: 0
Bootp flags: 0x8000 (Broadcast)
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: cc:00:07:30:00:00 (cc:00:07:30:00:00)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Request
Option: (t=57,l=2) Maximum DHCP Message Size = 1152
Option: (t=61,l=27) Client identifier
Option: (t=54,l=4) DHCP Server Identifier = 192.168.12.2
Option: (t=50,l=4) Requested IP Address = 192.168.12.1
Option: (t=51,l=4) IP Address Lease Time = 1 day
Option: (t=12,l=2) Host Name = "R1"
Option: (t=55,l=8) Parameter Request List
End Option
DHCP ACK, NACK
DHCP ServerはRequestに対する返答として、ACKまたはNACKを返します。Requestで要求されたIPアドレスが使用可能である場合はACKを、使用不能である場合はNACKを返します。
Ethernet II, Src: cc:01:07:30:00:00 (cc:01:07:30:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol, Src: 192.168.12.2 (192.168.12.2), Dst: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)
Source port: bootps (67)
Destination port: bootpc (68)
Length: 308
Checksum: 0xaa60 [validation disabled]
Bootstrap Protocol
Message type: Boot Reply (2)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0x00001866
Seconds elapsed: 0
Bootp flags: 0x8000 (Broadcast)
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 192.168.12.1 (192.168.12.1)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: cc:00:07:30:00:00 (cc:00:07:30:00:00)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP ACK
Option: (t=54,l=4) DHCP Server Identifier = 192.168.12.2
Option: (t=51,l=4) IP Address Lease Time = 1 day
Option: (t=58,l=4) Renewal Time Value = 12 hours
Option: (t=59,l=4) Rebinding Time Value = 21 hours
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
End Option
Padding
gratuitous ARP
DHCP serverによって取得したアドレスを実際に使用する前に、自身が使用する予定のIPアドレスが他のホストに使用されていないか
最終確認の意味を込めてARP requestを送信します。このARPは、gratuitous ARPと呼ばれ、自分自身のIPアドレスを宛先IPアドレスとし、ARPに対するresponseがない事によって”IPアドレスの重複がない”と判断します。
Ethernet II, Src: cc:00:07:30:00:00 (cc:00:07:30:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (reply/gratuitous ARP)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (0x0002)
[Is gratuitous: True]
Sender MAC address: cc:00:07:30:00:00 (cc:00:07:30:00:00)
Sender IP address: 192.168.12.1 (192.168.12.1)
Target MAC address: Broadcast (ff:ff:ff:ff:ff:ff)
Target IP address: 192.168.12.1 (192.168.12.1)
DHCP configuration
DHCP Server 必須設定
DHCPによって割り当てるアドレスを定義します。
Router(config)# ip dhcp pool <pool> Router(dhcp-config)# network <addr> <mask>
DHCP割当アドレスの中から、除外すべきアドレスを定義します。例えばDHCPサーバやWebサーバなど固定アドレスを付与すべきサーバが除外対象として挙げられます。
Router(config)# ip dhcp exclude-address <low_addr> <high_addr>
DHCP Server 任意設定
DHCPによってIPアドレスだけではなく、デフォルトゲートウェイ・DNSサーバ・リース期間
Router(config)# ip dhcp pool <pool>
Router(dhcp-config)#dns-server <primary_addr> [ <secondary_addr> ]
Router(dhcp-config)#default-router <primary_addr> [ <secondary_addr> ]
Router(dhcp-config)#domain-name <domain_name>
Router(dhcp-config)#lease { infinity | <days> [ <hours> [ <minute> ] ] }
DHCP Client 必須設定
以下のコマンドでDHCPによるアドレス取得が可能です。client-idは別の機会に説明します。
Router(config-if)# ip address dhcp [ client-id <interface> ]
動作確認
以下の環境で動作確認を行います。R1をDHCP Clientとして、R2をDHCP Serverとして設定します。
f0/0 f0/0
+------+dhcp .2+------+
| R1 +----------+ R2 |
+------+ +------+
192.168.12.0/24
[R1] interface FastEthernet0/0 ip address dhcp [R2] ip dhcp excluded-address 192.168.12.2 ! ip dhcp pool POOL_VLAN_12 network 192.168.12.0 255.255.255.0 ! interface FastEthernet0/0 ip address 192.168.12.2 255.255.255.0
なお、設定全文は下記ファイルです。
DHCPによってIPアドレスが付与されると、以下のようなメッセージがコンソールに表示されます。
R1# *Mar 1 00:00:18.175: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 192.168.12.1, mask 255.255.255.0, hostname R1 R1#
付与されたIPアドレスは、show ip interface briefなどで確認する事ができます。
R1#show ip interface brief Interface IP-Address OK? Method Status Protocol FastEthernet0/0 192.168.12.1 YES DHCP up up R1#
