【図解】初心者にも分かるDHCPの仕組み (シーケンス、UDPを使う理由、実装例、設定例)

DHCPとは

DHCP とは、[Dynamic Host Configuration Protocol] の略で、ネットワーク接続や IP 通信をするために必要な情報自動で取得できるプロトコルです。例えば IP アドレスやサブネットマスク、デフォルトゲートウェイ、DNS サーバ等の情報が取得できます。

DHCP はクライアントが IP を持っていない状態でIP通信ができる、数少ないプロトコルの 1 つです。クライアントは送信元 0.0.0.0 の IP アドレスで、宛先リミテッドブロードキャスト(255.255.255.255)で、DHCP サーバに IP アドレス等の情報を要求します。

IP の上位層プロトコルは UDP で、クライアントからサーバへの通信は、{送信元 UDP ポート 68 番, 宛先 UDP ポート 67 番}、サーバからクライアントの通信は、{送信元 UDP ポート 67 番, 宛先 UDP ポート 68 番}となります。

TCP ではなく UDP を使う理由は、下記シーケンスにある通り、送信元 IP と宛先 IP が往路と復路で変わるためです(TCP コネクションを張るためには最初に両者の IP で固定して 3way Handshake をする必要がある)。

DHCPパケットのシーケンス

DHCP のネットワーク情報取得までのパケットシーケンスは以下の通りです。

  1. クライアントがリミテッドブロードキャストDHCP 探索をする (DHCP-Discovery)
  2. 要求を受け取った DHCP サーバは全員、クライアントに対して提案 IP を添えて DHCP 提案をする (DHCP-Offer)
  3. クライアントは、一番早く DHCP 応答をくれたサーバに対して、提案を受けた IP の払い出しをしてもらうよう、DHCP 要求をする (DHCP-Request)
  4. サーバは要求に対し、IP 払い出しの DHCP 承認をする (DHCP-Acknowledge)

DHCPの実装パターン

DHCP の実装パターンには大まかに分けて 3パターンあります。以下にその概要を示します。

パターン 3 では、可用性 (Availability) のために DHCP サーバを 2 台設置して冗長構成にしてありますが、必須ではありません。また、パターン 1 や 2 でも 2 台での冗長構成は可能です。同様に早く応答があるほうが有効とされます。

なお、リレーエージェントの設定をしたルータや L3 スイッチでは、DHCP の UDP ポート(ポート番号:67, 68) の 2 つだけを DHCP サーバに転送するように設定するのが通常です。

例えば Cisco のルータや L3 スイッチでは DHCP リレーの設定は以下になります。

(config-if)# ip helper-address [dhcp-server-ip-address]

しかしこのとき、実は DHCP だけでなく以下の UDP サービスもデフォルトでブロードキャストからユニキャストへ変換されてしまいます

  • time service (port 37)
  • IEN-116 name service (port 42)
  • TACACS (port 49)
  • DNS (port 53)
  • DHCP client and server datagrams (port 67 and 68)
  • TFTP (port 69)
  • NetBIOS name server (port 137)
  • NetBIOS datagram server (port 138)

なので以下コマンドにより DHCP 以外の転送を無効化します。

(config)# no ip forward-protocol udp time
(config)# no ip forward-protocol udp nameserver
(config)# no ip forward-protocol udp tacacs
(config)# no ip forward-protocol udp domain
(config)# no ip forward-protocol udp tftp
(config)# no ip forward-protocol udp netbios-ns
(config)# no ip forward-protocol udp netbios-dgm

DHCP リレーの詳細については以下を参照下さい。

【図解】DHCPリレーの仕組み~パケットキャプチャの比較, Option82について
【図解】DHCPリレーの仕組み~パケットキャプチャの比較, Option82について
DHCP リレーとは DHCP クライアントはブロードキャストで DHCP サ...

DHCPのオプション

DHCP は IP アドレスを取得するのがメインですが、オプションとして色々な情報を取得できます。 取得できる情報の例は、以下の通りです。

  • サブネットマスク (option 1)
  • デフォルとゲートウェイ (option 3)
  • DNS サーバ (option 6)
  • DNS ドメイン (option 15)
  • NIS ドメイン (option 40)
  • NIS サーバ (option 41)
  • NTP サーバ (option 42)
  • PXE ブートサーバ (option 66)
  • PXE ブートファイル名 (option 67)
  • LDAP サーバ (option 95)
  • WPAD [Proxy PACファイルのURI] (option 252)

DHCP サーバには、クライアントが取得できる IP アドレスの範囲(レンジ)を設定しておきます。「特定の MAC アドレスからの要求には特定のIPアドレスを応答する」、という MAC アドレス予約の設定もできます。

なお、DNS ドメイン(option 15)とは、クライアントが所属するドメインのことです。例えば example.co.jp というドメインがクライアントに配布されたとき、クライアントはコマンドプロンプトやブラウザなどで『test』と打つだけで、test.example.co.jp の名前解決を実行してくれます。つまり、Suffix として利用できるようになります。

DHCPサーバの実装例

企業などで DHCP サーバを構築する場合、主な実装方法は2通りあります。

1. Windows/Linuxサーバ

Windows Server に DHCP の役割をインストールし、GUI での設定を入れるだけで比較的簡単できます。

Windows Server 2008 までは 2 台の冗長構成にする場合、各々のサーバで、払い出す IP アドレスの範囲 (スコープ) が被らないように 設定する必要がありました。しかし Windows Server 2012 以降からはフェイルオーバークラスタ機能により、Linux と同じように アクティブ・アクティブの冗長構成を組むことができるようになりました。

また、Linux サーバの場合も ISC (Internet Systems Consortium) の開発した ISC-DHCP をインストールし、コンフィグファイルを作成し保存します。

Linux に慣れている人であれば簡単に設定はできますが、Windows サーバのほうが GUI で簡単に構築できます。

しかし Windows の唯一の弱点は CAL (ライセンス) です。例えば社外の人が持ち込み PC で無線に繋ぐ場合などは その PC の分 (Device CAL) もしくは社外の人の分 (User CAL) のライセンスを買って保有している必要があります。

Server OS のバージョンが上がった場合は買いなおしが必要になる、など、Microsoft の CAL はややこしくて漏れがちなので気をつけましょう。

2. アプライアンス機器

Infoblox や NetAttest、RadiusGuard など、DHCP 単体ではなく複合的な機能を持ったアプライアンス製品が多いです。いずれも GUI で DNSRadiusCA、セキュリティ、IP アドレス管理などの高機能なサービスが付加価値として提供されています。