Cisco IOS IPサービス – DHCP Option 82の設定

スポンサーリンク

DCHP Option 82はdhcp relayに関する情報が格納されるフィールドです。Cisco IOSはOption 82の情報に基づいたアドレス割当を行う事もできます。

コマンド一覧

このシナリオで重要なコマンド一覧は以下の通りです。

Router(config)# ip dhcp relay information option
Router(config-if)#  ip dhcp relay information option subscriber-id <value>
Router(config)# ip dhcp class <class_name>
Router(config-dhcp-class)# relay agent information
Router(config-dhcp-class-relayinfo)# relay-information hex <hex_dump>
Router(config)# ip dhcp pool <pool_name>
Router(dhcp-config)# network <addr> <mask>
Router(dhcp-config)# class <class_name>
Router(config-dhcp-pool-class)#  address range <lower_addr> <higher_addr>

構成図

以下の環境で動作確認を行います。R1がDHCP server、R2がDHCP relay agent、R3がDHCP clientとします。

         e0/0    e0/1      e0/0    e0/1
 +--------+.1    .2+--------+.2  dhcp+--------+
 |   R1   +--------+   R2   +--------+   R3   |
 +--------+        +--------+        +--------+
        192.168.12.0/24   192.168.23.0/24
 DHCP server       DHCP relay        DHCP client

 R1 Loopback0     R2 Loopback0     R3 Loopback0
 10.1.1.1/32      10.2.2.2/32      10.3.3.3/32
 [R1]
interface Loopback0
 ip address 10.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0

 [R2]
interface Loopback0
 ip address 10.2.2.2 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.23.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.12.2 255.255.255.0

設定全文は下記ファイルです。ルーティングなどの詳細設定は下記を参照ください。

R1
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R2
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.2.2.2 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.23.2 255.255.255.0
 shutdown
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.12.2 255.255.255.0
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R3
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/1
 no ip address
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

Subscriber id

仕様説明

DHCPにはOption82と呼ばれるDHCP relayに関する情報を格納するフィールドがあります。以下のコマンドを入力する事でDHCP Option82をinsertしたりremoveしたりする事ができるようになります。

Router(config)# ip dhcp relay information option

ip helper-addressコマンドでDHCP discoverを転送する事ができますが、その際に以下コマンドを併用するとsubscriber-idを付与する事ができます。

Router(config-if)#  ip dhcp relay information option subscriber-id <value>

動作確認

R2において、DHCP Option82のsubscriber-idとしてVLAN23を付与します。

 [R2]
ip dhcp relay information option
!
interface Ethernet0/0
 ip helper-address 10.1.1.1
 ip dhcp relay information option subscriber-id VLAN23

Option82を確認する適当なshowコマンド, debugコマンドはありませんので、packet dumpより動作確認を行います。bootpsのみのpacket dumpを出力するよう以下debugコマンドを入力します。(なお、debug ip packet dumpコマンドは入力補完が効かない隠しコマンドです。)

 [R1]
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#access-list 100 permit udp any any eq bootps
R1(config)#exit
R1#
*Mar  1 00:06:32.811: %SYS-5-CONFIG_I: Configured from console by console
R1#
R1#debug ip packet 100 dump
IP packet debugging is on (dump) for access list 100
R1#

R3において、DHCPによるアドレス割り当てを試みます。その後、packet dumpによりOption 82に想定通りのフィールドが挿入された事を確認します。

 [R3]
R3(config)#int e0/1
R3(config-if)#no shut
R3(config-if)#
*Mar  1 00:05:46.483: %LINK-3-UPDOWN: Interface Ethernet0/1, changed state to up
*Mar  1 00:05:47.483: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to up
R3(config-if)#ip address dhcp
R3(config-if)#

 [R1]
R1#debug ip packet 100 dump
IP packet debugging is on (dump) for access list 100
R1#
*Mar  1 00:07:16.739: IP: tableid=0, s=192.168.23.2 (Ethernet0/0), d=10.1.1.1 (Loopback0), routed via RIB
*Mar  1 00:07:16.743: IP: s=192.168.23.2 (Ethernet0/0), d=10.1.1.1, len 343, rcvd 4
07BB66E0:                       CC00 01CC0000            L..L..
07BB66F0: CC0101CC 00010800 45000157 00040000  L..L....E..W....
07BB6700: FE11D8E5 C0A81702 0A010101 00430043  ~.Xe@(.......C.C
07BB6710: 01434675 01010601 00001420 00008000  .CFu....... ....
07BB6720: 00000000 00000000 00000000 C0A81702  ............@(..
07BB6730: CC0201CC 00010000 00000000 00000000  L..L............
07BB6740: 00000000 00000000 00000000 00000000  ................
07BB6750: 00000000 00000000 00000000 00000000  ................
07BB6760: 00000000 00000000 00000000 00000000  ................
07BB6770: 00000000 00000000 00000000 00000000  ................
07BB6780: 00000000 00000000 00000000 00000000  ................
07BB6790: 00000000 00000000 00000000 00000000  ................
07BB67A0: 00000000 00000000 00000000 00000000  ................
07BB67B0: 00000000 00000000 00000000 00000000  ................
07BB67C0: 00000000 00000000 00000000 00000000  ................
07BB67D0: 00000000 00000000 00000000 00000000  ................
07BB67E0: 00000000 00000000 00000000 00000000  ................
07BB67F0: 00000000 00000000 00000000 00000000  ................
07BB6800: 63825363 35010139 0204803D 1B006369  c.Sc5..9...=..ci
07BB6810: 73636F2D 63633032 2E303163 632E3030  sco-cc02.01cc.00
07BB6820: 30312D45 74302F31 0C025233 37080106  01-Et0/1..R37...
07BB6830: 0F2C0321 962B5216 020C020A 0000C0A8  .,.!.+R.......@(
07BB6840: 17020000 00000606 564C414E 3233FF    ........VLAN23.

DHCP classによるアドレス割り当て

仕様説明

DHCP Option82の各フィールドの仕様はベンダー毎プラットフォーム毎に様々です。ですので、Cisco IOSは各フィールドに対する設定ではなくOption82が指定したhex dumpに一致するかどうかを判定する設定を提供しています。以下のようなコマンドで、指定したhex dumpに一致するかどうかを判定するdhcp classを作成します。

Router(config)# ip dhcp class <class_name>
Router(config-dhcp-class)# relay agent information
Router(config-dhcp-class-relayinfo)# relay-information hex <hex_dump>

dhcp classに対して割り当てるIPアドレスの範囲を指定します。

Router(config)# ip dhcp pool <pool_name>
Router(dhcp-config)# network <addr> <mask>
Router(dhcp-config)# class <class_name>
Router(config-dhcp-pool-class)#  address range <lower_addr> <higher_addr>

Option 82 観察

まずはDHCP Option82の仕様を理解しましょう。以下はDHCP discoverをキャプチャした結果です。DHCPには様々はOptionがあり、各Optionは”Option”, “Length”, “Value”の順で値が格納されている事が分かります。

Frame 1: 357 bytes on wire (2856 bits), 357 bytes captured (2856 bits)
Ethernet II, Src: cc:01:01:cc:00:01 (cc:01:01:cc:00:01), Dst: cc:00:01:cc:00:00 (cc:00:01:cc:00:00)
Internet Protocol Version 4, Src: 192.168.23.2 (192.168.23.2), Dst: 10.1.1.1 (10.1.1.1)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootps (67)
Bootstrap Protocol
    Message type: Boot Request (1)
    Hardware type: Ethernet
    Hardware address length: 6
    Hops: 1
    Transaction ID: 0x000003fc
    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: 192.168.23.2 (192.168.23.2)
    Client MAC address: cc:02:01:cc:00:01 (cc:02:01:cc:00:01)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    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 = "R3"
    Option: (t=55,l=8) Parameter Request List
    Option: (t=82,l=22) Agent Information Option
        Option: (82) Agent Information Option
        Length: 22
        Value: 020c020a0000c0a81702000000000606564c414e3233
        Agent Remote ID: 020a0000c0a8170200000000
        Subscriber ID: 564c414e3233
    End Option

DHCP classとしてどのようなhex dumpを設定すべきかを判断するために、packet dumpを観察します。まずは、Option82の82に相当する部分を探します。82は16進数で0x52ですので、52と書かれている部分を探します。52の次の1byteはlengthを表しますので、0x16(10進数で22)byteがOption82に格納された値と分かります。

07BB6820: 30312D45 74302F31 0C025233 37080106  01-Et0/1..R37...
07BB6830: 0F2C0321 962B5216 020C020A 0000C0A8  .,.!.+R.......@(
07BB6840: 17020000 00000606 564C414E 3233FF    ........VLAN23.
field value
Option 52
length 16
value 020C020A0000C0A81702000000000606564C414E3233

動作確認

R1に以下設定を投入し、DCHP classによるアドレス割り当てを行います。

 [R1]
ip dhcp class OPTION82
 relay agent information
  relay-information hex 020C020A0000C0A81702000000000606564C414E3233
!
ip dhcp pool VLAN23
 network 192.168.23.0 /24
 class OPTION82
  address range 192.168.23.3 192.168.23.3

動作確認のため、以下debugを予め有効にしておきます。

 [R1]
R1#debug ip dhcp server class
DHCP server class debugging is on.
R1#

R3 e0/1をshut, no shutし、DHCPによるアドレス再割り当てを行います。

 [R3]
R3(config)#int e0/1
R3(config-if)#shut
R3(config-if)#no shut
*Mar  1 00:27:16.007: %LINK-5-CHANGED: Interface Ethernet0/1, changed state to administratively down
*Mar  1 00:27:17.007: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to down
R3(config-if)#
*Mar  1 00:27:19.979: %LINK-3-UPDOWN: Interface Ethernet0/1, changed state to up
*Mar  1 00:27:20.979: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to up
*Mar  1 00:27:21.403: %DHCP-6-ADDRESS_ASSIGN: Interface Ethernet0/1 assigned DHCP address 192.168.23.3, mask 255.255.255.0, hostname R3

R3(config-if)#

デバッグメッセージおよびshowコマンドから想定通りのアドレスが割り当てられた事を確認します。

 [R1]
R1#debug ip dhcp server class
DHCP server class debugging is on.
R1#
*Mar  1 00:27:41.547: DHCPD: Class 'OPTION82' matched by default
*Mar  1 00:27:41.547: DHCPD: Searching for a match to 'relay-information 020c020a0000c0a81702000000000606564c414e3233' in class OPTION82
*Mar  1 00:27:41.551: DHCPD: input pattern 'relay-information 020c020a0000c0a81702000000000606564c414e3233' matches class OPTION82
*Mar  1 00:27:41.555: DHCPD: input matches class OPTION82
R1#
R1#
R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address          Client-ID/              Lease expiration        Type
                    Hardware address/
                    User name
192.168.23.3        0063.6973.636f.2d63.    Mar 02 2002 12:28 AM    Automatic
                    6330.322e.3062.3063.
                    2e30.3030.312d.4574.
                    302f.31
R1#

Option82 補足説明

正確な説明をすると、Option82にはSubscriber-id以外にAgent Remote IDというフィールドも含まれています。Agent Remote IDはDHCPをrelayしたルータのMACアドレスを表します。各フィールドの値は以下の通りです。もし、Subscriber-idにのみ基づいてDHCP classを作成したいのならば、”relay-information hex 564C414E3233″として下さい。

field value
Option 52
length 16
Agent Remote ID 020C020A0000C0A8170200000000
Subscriber-id 564C414E3233
タイトルとURLをコピーしました