【図解】初心者にも分かる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は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 2012に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でDNSやRadius、CA、セキュリティ、IPアドレス管理などの高機能なサービスが付加価値として提供されています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする