タイトル: DHCP
SEOタイトル: DHCP プロトコル完全ガイド(DORA 4-way / リース / IPv6 SLAAC)
| この記事の要点 |
|
DHCP とは
DHCP (Dynamic Host Configuration Protocol) は、ネットワークに接続したクライアントに対し、IP アドレス / サブネットマスク / デフォルトゲートウェイ / DNS サーバなどのネットワーク設定を自動で配布するプロトコルです。RFC 2131 / 2132 で標準化されています。
静的 IP (Static IP) を 1 台ずつ手動設定するのは管理コストが高く、引っ越し / 出張先 / Wi-Fi 切替で値が変わる端末では現実的でないため、ほぼ全ての LAN / Wi-Fi で DHCP が使われています。
動作: DORA 4-way ハンドシェイク
クライアントが起動 / NIC リンクアップしたタイミングで、以下の 4 メッセージが交換されます:
| 段階 | メッセージ | 送信元 → 宛先 | 内容 |
|---|---|---|---|
| 1. D | DHCPDISCOVER | Client (0.0.0.0:68) → Broadcast (255.255.255.255:67) | 「DHCP サーバいる?」 |
| 2. O | DHCPOFFER | Server:67 → Broadcast:68 | 「この IP どう?」(候補提示) |
| 3. R | DHCPREQUEST | Client → Broadcast | 「その IP もらいます」 |
| 4. A | DHCPACK | Server → Client | 「確定。リース X 秒」 |
ブロードキャストで開始する理由は、クライアントがまだ IP を持っておらず誰がサーバか分からないから。複数 DHCP サーバがある場合は最初に応答した OFFER を採用するのが一般的です。
パケットを Wireshark で観察
Frame 1: DHCP Discover - Transaction ID 0x12345678
Src: 00:0c:29:ab:cd:ef (Client MAC), Dst: ff:ff:ff:ff:ff:ff (broadcast)
IPv4: 0.0.0.0 -> 255.255.255.255
UDP : 68 -> 67
BOOTP: op=1 (BOOTREQUEST)
Option 53: DHCP Message Type = Discover (1)
Option 55: Parameter Request List (subnet, router, DNS, ...)
Frame 2: DHCP Offer
Src: 192.168.1.1, Dst: 255.255.255.255
Option 53: Offer (2)
Option 1 : Subnet Mask 255.255.255.0
Option 3 : Router 192.168.1.1
Option 6 : DNS 8.8.8.8, 8.8.4.4
Option 51: Lease Time 86400 (24h)
yiaddr : 192.168.1.123 ← 提示 IP
ポート 67 / 68
| ポート | 用途 |
|---|---|
| UDP 67 | DHCP Server が待ち受け |
| UDP 68 | DHCP Client が待ち受け |
| UDP 547 / 546 | DHCPv6 (Server / Client) |
BOOTP (古い IP 自動配布プロトコル) と同じポートを使用しており、後方互換性があります。
リース時間 (Lease Time)
DHCP で配布された IP には有効期限があり、期限切れ前にクライアントが更新します:
- T1 (50%): クライアントは元のサーバに更新リクエスト (Renewing)
- T2 (87.5%): 別のサーバにブロードキャストでリクエスト (Rebinding)
- 期限切れ: IP 解放、DISCOVER から再開
典型的なリース時間: 家庭 Wi-Fi 24h、企業 LAN 8h、ゲスト Wi-Fi 1h、ホットスポット 15分。
Windows / Linux からの操作
# Windows
ipconfig /all # 現在の DHCP リース確認
ipconfig /release # IP 解放
ipconfig /renew # 再取得 (REQUEST -> ACK)
ipconfig /flushdns # DNS Cache クリア(DHCP とは別)
# PowerShell
Get-NetIPConfiguration
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 # サーバ側、要 RSAT# Linux (NetworkManager)
nmcli con show
nmcli con up eth0
# 直接 dhclient
sudo dhclient -r eth0 # 解放
sudo dhclient eth0 # 取得
cat /var/lib/dhcp/dhclient.leases
# systemd-networkd 環境
networkctl status eth0
DHCP Server の構築 (Linux)
Linux で DHCP Server を立てる代表実装は ISC dhcpd と Kea (ISC が ISC dhcpd 後継として開発):
# /etc/dhcp/dhcpd.conf (ISC dhcpd)
default-lease-time 86400;
max-lease-time 604800;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option broadcast-address 192.168.1.255;
option ntp-servers ntp.nict.jp;
}
# MAC アドレス固定割当
host printer {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.50;
}
Static IP との比較
| 項目 | DHCP | Static IP |
|---|---|---|
| 設定の手間 | 不要(自動) | 1 台ずつ手入力 |
| IP の変更 | リース毎に変動可 | 固定 |
| サーバ / プリンタ用途 | ★ DHCP 予約推奨 | ★ 安定 (但し管理大変) |
| IP 競合 | サーバが回避 | 手動で重複設定すると衝突 |
| 大規模 LAN | ★ 必須 | 非現実的 |
複数 DHCP Server の競合
同一 LAN セグメントに DHCP サーバが 2 台以上あると、DISCOVER に対し両方が OFFER を返し、クライアントは早い方を採用します。結果として:
- 意図しないサブネットの IP が配布される
- 家庭ルータと社内 AP が衝突して接続不安定
- 悪意ある不正 DHCP (Rogue DHCP) で MITM 攻撃
対策: DHCP Snooping をスイッチで有効化し、信頼ポート (Trusted) からの OFFER のみ通す。
DHCP Relay Agent
DHCP はブロードキャストで動くため、原則 L3 (ルータ) を越えられません。複数 VLAN / サブネットで 1 台の DHCP サーバを共有するときは DHCP Relay Agent (ip helper-address) をルータに設定します:
# Cisco IOS
interface Vlan10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.1.10 # DHCP Server の IP
# 動作:
# Client (VLAN10) -> Broadcast DISCOVER
# Router -> Unicast でリレー -> DHCP Server (VLAN1 の 192.168.1.10)
# Server -> Unicast OFFER -> Router -> Broadcast に戻す
IPv6: SLAAC と DHCPv6
IPv6 では IP 自動取得の主役が変わります:
| 方式 | 仕組み | 用途 |
|---|---|---|
| SLAAC | ルータが送る RA (Router Advertisement) から自分で IP 生成 | 家庭 / 多くの企業 |
| DHCPv6 (Stateful) | IPv4 DHCP と同じ。サーバが割当管理 | 企業で IP 固定管理したい場合 |
| DHCPv6 (Stateless) | IP は SLAAC、DNS / NTP だけ DHCPv6 で配布 | SLAAC 補完 |
家庭で利用される IPv6 IPoE はほぼ SLAAC のみ。Android が長らく DHCPv6 を実装しなかったのは「SLAAC で十分」という思想の表れ。
主要な DHCP オプション
| Option | 意味 |
|---|---|
| 1 | Subnet Mask |
| 3 | Default Gateway |
| 6 | DNS Server |
| 15 | Domain Name |
| 42 | NTP Server |
| 43 | Vendor Specific (Wi-Fi コントローラ自動検出など) |
| 51 | Lease Time |
| 53 | DHCP Message Type |
| 66 / 67 | TFTP Server / Boot File (PXE Boot) |
| 119 | Domain Search List |
トラブルシュート
| 症状 | 原因 | 対処 |
|---|---|---|
IP が 169.254.x.x になる | DHCP 失敗 (APIPA) | サーバ稼働確認、配線、VLAN |
| たまに IP 取れない | リースプール枯渇 | レンジ拡張、リース時間短縮 |
| 固定したいのに変わる | 予約未設定 | MAC 予約 (host 句) |
| 不審な DNS / ゲートウェイ | Rogue DHCP | DHCP Snooping |
| 無線で取れず有線で取れる | AP 側 DHCP リレー設定漏れ | VLAN / Relay 確認 |
FAQ
Q: なぜブロードキャストで開始するのか
A: クライアントは IP もサーバアドレスも持っていないので、ユニキャストできません。L2 ブロードキャスト (FF:FF:FF:FF:FF:FF) で「いる人手挙げて」と聞きます。
Q: スマホで「IP アドレスの取得に失敗」
A: 端末側の Wi-Fi プロファイル削除 → 再接続。AP 側 DHCP プール枯渇も多いので AP 再起動も有効。
Q: DHCP リースが期限切れの瞬間ネットが切れる?
A: 通常 T1 (50%) で更新済なので切れません。サーバ停止中に T2 を過ぎると IP 失効しブロードキャストに戻ります。
Q: 自宅で固定 IP にしたい
A: ルータの DHCP 予約機能 (MAC アドレス → 固定 IP) を使うのが楽。端末側で静的 IP を打つと、ルータの DHCP 範囲とぶつかると衝突します。