HOME > コンテンツリスト > ラボ・シナリオ for CCNA > [ < 前へ 次へ > ]

DHCPリレーエージェントを構成する

DHCP クライアントが DHCP サーバーからIPアドレスを取得する時には、最初に DHCPDISCOVER メッセージ ( DHCP クライアントが DHCP サーバーを発見するためのメッセージ) を送出します。



DHCP クライアントは、DHCP サーバーのIPアドレスもMACアドレスも知らないので、このメッセージはブロードキャストで行われます。しかし、ブロードキャストである DHCP パケットはルータを超えることができません。では、次の構成図のように、ルータを挟んだネットワーク上にある DHCP クライアントにIPアドレスの割り当てを行いたい場合どうすればいいでしょうか?



もっとも簡単なのは、PC-A や PC-B があるネットワークセグメントに DHCP サーバーを移動させることですね。
しかし、もし PC が DHCP サーバーのあるネットワークセグメントにもあった場合どうすればいいでしょうか?



これは両方のネットワークセグメントに DHCP サーバーをそれぞれ設置すれば簡単に解決します。



しかし、DHCP サーバーを1台だけにしたい場合は DHCP リレーエージェントを使用します。



前のシナリオで行った通り、この構成の場合は、中央のルータで DHCP サーバーを設定すれば DHCP リレーエージェントは必要ありません。しかし、次の図のようにルータが2台あり、1台のルータだけに DHCP サーバーを設定する場合は DHCP リレーエージェントが必要です。


想定するネットワーク構成図
・RT-B を DHCP サーバーとして構成し、RT-A は PC-A、PC-B と DHCP サーバー (RT-B) のセグメントを分けるルータとして使用する。



ラボ・シナリオで使用するネットワーク構成図
・物理 PC の VirtualBox 上に、PC-A、PC-B、PC-C、PC-D の4つの仮想 PC を構成する。
・PC-A、PC-B は物理 PC に標準搭載している LAN ポートを使用するように VirtualBox を設定する。
・物理 PC に USB-LAN 変換ケーブルを2つ接続し、PC-C と PC-D でそれぞれを使用するように VirtualBox を設定する。
・物理 PC の全ての LAN ポートのプロパティで、[VirtualBox Bridged Networking Driver] 以外の全てのチェックを外す



まず、DHCP リレーエージェントを構成しない場合、ルータを挟んだネットワーク上にある PC にIPアドレスが割り当てられないことを確認します。
  1. RT-A をネットワーク構成図に示す通り設定し、適切なスタティックルートを構成しなさい。
  2. < RT-A >
    Router# conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    Router(config)# host RT-A
    RT-A(config)# int f0/0
    RT-A(config-if)# ip add 172.16.1.1 255.255.255.0
    RT-A(config-if)# no shut
    RT-A(config-if)# int s0/0/0
    RT-A(config-if)# ip add 172.16.2.1 255.255.255.0
    RT-A(config-if)# clock rate 64000
    RT-A(config-if)# no shut
    RT-A(config-if)# ip route 172.16.3.0 255.255.255.0 172.16.2.2
    RT-A(config)# ip route 172.16.4.0 255.255.255.0 172.16.2.2
    RT-A(config)# ^Z
    RT-A#
    
  3. RT-B をネットワーク構成図に示す通り設定し、適切なスタティックルートを構成しなさい。
  4. < RT-B >
    Router# conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    Router(config)# host RT-B
    RT-B(config)# int s0/0/0
    RT-B(config-if)# ip add 172.16.2.2 255.255.255.0
    RT-B(config-if)# no shut
    RT-B(config-if)# int f0/0
    RT-B(config-if)# ip add 172.16.3.1 255.255.255.0
    RT-B(config-if)# no shut
    RT-B(config-if)# int f0/1
    RT-B(config-if)# ip add 172.16.4.1 255.255.255.0
    RT-B(config-if)# no shut
    RT-B(config-if)# ip route 172.16.1.0 255.255.255.0 172.16.2.1
    RT-B(config)#
    
  5. 以下の情報を基に RT-B で DHCP サーバーを構成しなさい。
  6. プール名RT-A-F0/0
    割り当てるアドレスの範囲172.16.1.0/24
    除外アドレス172.16.1.1
    デフォルトゲートウェイ172.16.1.1
    ドメイン名jukenki.local
    DNSサーバーのIPアドレス8.8.8.8
    リース期間3日

    プール名RT-B-F0/0
    割り当てるアドレスの範囲172.16.3.0/24
    デフォルトゲートウェイ172.16.3.1
    ドメイン名jukenki.local
    DNSサーバーのIPアドレス8.8.8.8
    リース期間1日12時間

    プール名RT-B-F0/1
    割り当てるアドレスの範囲172.16.4.0/24
    デフォルトゲートウェイ172.16.4.1
    ドメイン名jukenki.local
    DNSサーバーのIPアドレス8.8.8.8
    リース期間6時間30分
    < RT-B >
    RT-B(config)# ip dhcp excluded-address 172.16.1.1  ← 除外アドレス
    RT-B(config)# ip dhcp pool RT-A-F0/0               ← 1つ目の DHCP アドレスプールの設定
    RT-B(dhcp-config)# network 172.16.1.0 255.255.255.0
    RT-B(dhcp-config)# default-router 172.16.1.1
    RT-B(dhcp-config)# domain-name jukenki.local
    RT-B(dhcp-config)# dns-server 8.8.8.8
    RT-B(dhcp-config)# lease 3
    RT-B(dhcp-config)# ip dhcp pool RT-B-F0/0          ← 2つ目の DHCP アドレスプールの設定
    RT-B(dhcp-config)# network 172.16.3.0 255.255.255.0
    RT-B(dhcp-config)# default-router 172.16.3.1
    RT-B(dhcp-config)# domain-name jukenki.local
    RT-B(dhcp-config)# dns-server 8.8.8.8
    RT-B(dhcp-config)# lease 1 12
    RT-B(dhcp-config)# ip dhcp pool RT-B-F0/1          ← 2つ目の DHCP アドレスプールの設定
    RT-B(dhcp-config)# network 172.16.4.0 255.255.255.0
    RT-B(dhcp-config)# default-router 172.16.4.1
    RT-B(dhcp-config)# domain-name jukenki.local
    RT-B(dhcp-config)# dns-server 8.8.8.8
    RT-B(dhcp-config)# lease 0 6 30
    RT-B(dhcp-config)# end
    RT-B#
    
    DHCP サーバーを構成している RT-B のインターフェイスに設定されているIPアドレスはアドレスプールから自動的に除外されますが、DHCP サーバーではない RT-A のインターフェイスに設定されているIPアドレスは自動的には除外されませんので、除外アドレスとして設定します。

    ただし、実際には、ルータのコンフリクト検出機能で 172.16.1.1 は使用済みであることが検出されますので、除外アドレスに設定しなくてもこのアドレスを DHCP クライアントに割り当てることはありません。しかし、通常は不要なパケットを抑えるために予め除外アドレスとして設定します。
    ■ 172.16.1.1を除外アドレスに設定していない場合

    debug ip dhcp server packet コマンドを実行することで確認できます。

    DHCP サーバーは、プールアドレスの中の 172.16.1.1 を DHCP クライアントに提供する前に ping を使って、ネットワーク内で 172.16.1.1 が使われていないかどうか確認します。172.16.1.1 が使われていると確認すると、次のIPアドレスである 172.16.1.2 を ping を使って使用済みかどうか確認します。使用済みでないとわかると、DHCP クライアントに 172.16.1.2 の提供の申し出を行います。
    RT-B# debug ip dhcp server packet
    DHCP server packet debugging is on.
    (略)
    Sep 11 21:12:05.766:  %DHCPD-4-PING_CONFLICT: DHCP address conflict: server pinged 172.16.1.1.
    Sep 11 21:12:05.766: DHCPD: Allocate an address without class information (172.16.1.0)
    Sep 11 21:12:07.770:  DHCPD: Sending DHCPOFFER to client 0100.9f31.0a00.00 (172.16.1.2).
    
    また show ip dhcp conflict コマンドでも conflict を検出したことを確認できます。
    RT-B# sh ip dhcp conflict 
    IP address        Detection method   Detection time          VRF
    172.16.1.1        ping               Sep 14 2013 08:46 PM
    
    ※ ping により 172.16.1.1 の conflict を検出

    ただし、これは RT-B で ip dhcp excluded-address 172.16.1.1 コマンドを実行していない場合ですので、このシナリオ通りの設定では 172.16.1.1 の conflict は発生しません。
  7. RT-C を DHCP クライアントに設定し、取得したIPアドレスを確認しなさい。
  8. < RT-C >
    C:\> netsh interface ipv4 set address "イーサネット" dhcp
    
    C:\> ipconfig
    
    Windows IP 構成
    
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .: jukenki.local
       IPv4 アドレス . . . . . . . . . . . .: 172.16.3.2
       サブネット マスク . . . . . . . . . .: 255.255.255.0
       デフォルト ゲートウェイ . . . . . . .: 172.16.3.1
    
    C:\>
    
    PC-C にはIPアドレス 172.16.3.2 が割り当てられています。
  9. RT-D を DHCP クライアントに設定し、取得したIPアドレスを確認しなさい。
  10. < RT-D >
    C:\> netsh interface ipv4 set address "イーサネット" dhcp
    
    C:\> ipconfig
    
    Windows IP 構成
    
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .: jukenki.local
       IPv4 アドレス . . . . . . . . . . . .: 172.16.4.2
       サブネット マスク . . . . . . . . . .: 255.255.255.0
       デフォルト ゲートウェイ . . . . . . .: 172.16.4.1
    
    C:\>
    
    RT-D にはIPアドレス 172.16.4.2 が割り当てられました。
  11. PC-A を DHCP クライアントに設定し、取得したIPアドレスを確認しなさい。
  12. < PC-A >
    C:\> netsh interface ipv4 set address "イーサネット" dhcp
    
    C:\> ipconfig
    
    Windows IP 構成
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .:
       IPv4 アドレス . . . . . . . . . . . .: 0.0.0.0
       サブネット マスク . . . . . . . . . .: 0.0.0.0
       デフォルト ゲートウェイ . . . . . . .:
    
    C:\>
    
    PC-C、PC-D にはIPアドレスが割り当てられていますが、PC-A にはIPアドレスは割り当てられていません。
    ※ もしくは APIPA 機能により、リンクローカルアドレス 169.254.0.0/16 が割り当てられています。
      APIPA は DHCP サーバーからアドレスを取得できなかった時に、リンクローカルアドレスを勝手に割り当てる機能です。

    ブロードキャストである DHCPDISCOVER メッセージはルータを超えることはできません。



    そのため、PC-A から送信された DHCPDISCOVER メッセージが DHCP サーバーである RT-B に届くことはありません。

    この DHCP パケットを、ルータを超えて転送するために使用するのが DHCP リレーエージェントです。

    DHCP リレーエージェントは、PC-A からブロードキャストで送られてきた DHCP メッセージを受け取り、それをユニキャストに変換して DHCP サーバーに転送します。こうすれば、ブロードキャストである DHCP メッセージもルータを超えることができます。ただし、このためには、あらかじめ DHCP サーバーのIPアドレスを RT-A に登録しておく必要があります。

  13. RT-A の F0/0 でDHCPリレーエージェントを構成しなさい。
  14. < RT-A >
    RT-A# conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    RT-A(config)# int f0/0
    RT-A(config-if)# ip helper-address 172.16.2.2
    RT-A(config-if)# ^Z
    RT-A#
    
    Cisco ルータで DHCP リレーエージェントを有効にするには、ブロードキャストである DHCP パケットを受け取るインターフェイスで次のコマンドを実行します。

    ip helper-address [転送先 (DHCP サーバー) のIPアドレス]

    これを設定したインターフェイスで、ブロードキャストパケットを受信すると、そのパケットの宛先を転送先IPアドレスに変更して (ユニキャストパケットに変えて) 、転送先IPアドレスを持つ機器 (DHCP サーバー) 向けにパケットを転送します。
    ip helper-addressを設定すると、DHCPパケットだけでなく、他のUDPブロードキャストパケットもユニキャストパケットに変換されて転送されます。転送されるUDPブロードキャストパケットには、デフォルトで以下のものがあります。
    ポート番号サービス名説明
    37time時刻サービス
    42nameserverホストネームサーバー (Windows関連)
    49tacacsTACACS
    53domainDNS
    67bootpsBOOTP/ DHCP サーバー
    68bootpcBOOTP/ DHCP クライアント
    69tftpTFTP
    137netbios-nsNetBIOSネームサービス (Windows関連)
    138netbios-dgmNetBIOSデータグラムサービス (Windows関連)
    もし不要なブロードキャストパケットの転送を防ぎたい時は、no ip forward protocol コマンドを使います。
    Router(config)# no ip forward-protocol udp tftp
    
  15. PC-A で ipconfig /renew を実行しなさい。
  16. < PC-A >
    C:\> ipconfig /renw
    
    Windows IP 構成
    
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .: jukenki.local
       IPv4 アドレス . . . . . . . . . . . .: 172.16.1.2
       サブネット マスク . . . . . . . . . .: 255.255.255.0
       デフォルト ゲートウェイ . . . . . . .: 172.16.1.1
    
    C:\>
    
    PC-A にもIPアドレスが割り当てられました。
  17. PC-B を DHCP クライアントに設定し、ipconfig を実行しなさい。
  18. < PC-B >
    C:\> netsh interface ipv4 set address "イーサネット" dhcp
    
    C:\> ipconfig
    
    Windows IP 構成
    
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .: jukenki.local
       IPv4 アドレス . . . . . . . . . . . .: 172.16.1.3
       サブネット マスク . . . . . . . . . .: 255.255.255.0
       デフォルト ゲートウェイ . . . . . . .: 172.16.1.1
    
    C:\>
    
  19. RT-B で、show ip dhcp binding コマンドを実行しなさい。
  20. < RT-B >
    RT-B# sh ip dhcp binding
    Bindings from all pools not associated with VRF:
    IP address          Client-ID/              Lease expiration        Type
                        Hardware address/
                        User name
    172.16.1.2          0100.9f31.0a00.00       Jan 18 2014 05:15 PM    Automatic
    172.16.1.3          0100.9f31.0b00.00       Jan 18 2014 05:16 PM    Automatic
    172.16.3.2          0100.9f31.0c00.00       Jan 17 2014 05:11 AM    Automatic
    172.16.4.2          0100.9f31.0d00.00       Jan 15 2014 11:41 PM    Automatic
    RT-B#
    
    4台の PC へIPアドレスが割り当てられています。