DHCPv6
IPv6のアドレスやプレフィックス、DNSサーバの情報などをサーバから配布するためのプロトコル。アドレスなどの割当てを管理するステートフルDHCPv6と、アドレス以外の設定情報だけを配るステートレスDHCPv6としての使い方がある。
イマシルちゃんの解説
IPv6で通信する機器にも、自分のアドレスや名前を調べるDNSサーバーの情報などを設定する必要があるよ。
こうした情報をサーバーから受け取るためのプロトコルがDHCPv6なんだ。
アドレスを配る使い方では、機器からの要求に応じてサーバーが使ってよいアドレスを知らせ、割当てを管理するよ。
一方、アドレスは機器側で別の方法で用意して、DNSサーバーなどの情報だけを受け取る使い方もあるんだ。
すべての機器へ人が設定を書き込まなくても、必要な情報を配れるのが便利なところだよ。
この解説はわかりやすかったですか?
より深い解説
定義
DHCPv6は、RFC 8415で定められた、IPv6用のDHCPである。UDPを使い、クライアントはポート546番、サーバ(とリレーエージェント)はポート547番で待ち受ける。
アドレスの決め方は3通り
| 方式 | アドレス | DNSサーバなどの情報 | ルータ広告のフラグ |
|---|---|---|---|
| SLAACのみ | ルータ広告のプレフィックスから自分で作る | ルータ広告で受け取る(RDNSS) | M=0、O=0 |
| SLAAC+ステートレスDHCPv6 | 自分で作る | DHCPv6から受け取る | M=0、O=1 |
| ステートフルDHCPv6 | DHCPv6サーバから割り当ててもらう | DHCPv6から受け取る | M=1 |
「ステートフル」は、サーバがどのアドレスを誰に貸したかという状態(state)を管理することを指す。
サーバの見つけ方
クライアントは、DHCPv6サーバのアドレスを知らなくてもよい。リンク上のすべてのDHCPv6サーバとリレーエージェントが参加するマルチキャストアドレスff02::1:2宛てに要求を送れば、サーバ(またはリレーエージェント)が応答する。DHCPv6サーバのアドレスは、近隣探索ではなくDHCPv6自身のやり取りで見つかる。
メッセージの流れ(ステートフルの場合)
| 順番 | メッセージ | 送る側 |
|---|---|---|
| 1 | Solicit | クライアント(マルチキャスト)。「サーバはいますか」 |
| 2 | Advertise | サーバ。「ここにいます。このアドレスを貸せます」 |
| 3 | Request | クライアント。「そのアドレスをください」 |
| 4 | Reply | サーバ。「どうぞ」 |
IPv4のDHCP(DISCOVER、OFFER、REQUEST、ACK)と同じく4回のやり取りである。Rapid Commitを使うと、SolicitとReplyの2回で済ませることもできる。
IPv4のDHCPとの違い
| DHCP(IPv4) | DHCPv6 | |
|---|---|---|
| ポート番号 | 67(サーバ)、68(クライアント) | 547(サーバ)、546(クライアント) |
| 最初の要求の送り方 | ブロードキャスト | マルチキャスト(ff02::1:2) |
| デフォルトゲートウェイの通知 | DHCPで配る | 配らない。ルータ広告で知る |
| 機器の識別 | 主にMACアドレス | DUID(DHCP固有の識別子) |
プレフィックス委譲(DHCPv6-PD)
DHCPv6-PDは、アドレス1つではなく、プレフィックス(/56や/60など)をまとめてルータに割り当てる仕組みである。家庭用ルータがプロバイダからプレフィックスを受け取り、家の中のネットワークに分けて使うのに使われる。