DHCPv6対SLAAC:デバイスがIPv6アドレスを取得する方法
デバイスがIPv6アドレスを取得する2つの方法を理解します:SLAACはルーターアナウンスメントを使用し、DHCPv6はサーバーを使用します。それぞれを使用するタイミングを学びます。
デバイスがIPv6ネットワークに参加すると、アドレスが必要になります。DHCPが標準的なアプローチであるIPv4とは異なり、IPv6は2つのメカニズムを提供します:SLAAC(ステートレスアドレス自動設定)とDHCPv6。それぞれを使用するタイミングを理解することは、ネットワークエンジニアにとって不可欠です。
SLAAC:ステートレスアドレス自動設定#
SLAACにより、デバイスはネットワーク上で状態を維持することなく自己設定できます。ルーターは、ネットワークプレフィックスを含むルーターアドバタイズメント(RA)メッセージを定期的に送信し、デバイスは独自のアドレスを生成します。
ルーターアドバタイズメントの仕組み#
ルーターは、デフォルトで200秒ごとにRAメッセージをff02::1(全ノードマルチキャスト)にマルチキャストします。デバイスは、ff02::2(全ルーターマルチキャスト)にルーター要請(RS)を送信することで、RAをすぐにリクエストすることもできます。
RAには以下が含まれます:
- ネットワークプレフィックス(例:
2001:db8::/64) - デフォルトゲートウェイアドレス
- プレフィックス有効期間(有効および優先)
- MとOフラグ(以下で説明)
デバイスは、アドバタイズされたプレフィックスと自己生成された64ビットインターフェイスIDを組み合わせてアドレスを作成します。
インターフェイスID生成#
2つの一般的な方法があります:
EUI-64(修正拡張一意識別子)
MACアドレスからインターフェイスIDを導出します。MAC 00:11:22:33:44:55の場合:
- 中央に
ff:feを挿入:00:11:22:ff:fe:33:44:55 - 7番目のビットを反転:
02:11:22:ff:fe:33:44:55 - 結果:
2001:db8::211:22ff:fe33:4455
これは決定論的ですが、ハードウェアIDを明らかにし、プライバシーの懸念を引き起こします。
プライバシー拡張(RFC 4941) ランダムなインターフェイスIDを生成します。最新のオペレーティングシステムは、定期的に変更される一時アドレスを作成します(ほとんどのシステムで毎日)。デバイスは、安定したアドレス(着信接続用)と一時アドレス(発信接続用)の両方を維持します。
# Linux:アドレスタイプを表示
ip -6 addr show eth0
# スコープglobalは安定したアドレスに表示されます
# スコープglobal temporaryはプライバシーアドレスに表示されますSLAACが提供するもの#
SLAACは以下を処理します:
- IPv6アドレス割り当て
- デフォルトゲートウェイ
- プレフィックス長
デフォルトでは提供しないもの:
- DNSサーバー
- ドメイン検索リスト
- NTPサーバー
RDNSS(再帰的DNSサーバー)オプション RFC 8106により、ルーターはRAメッセージでDNSサーバーをアドバタイズできます。ほとんどの最新システムはこれをサポートしており、シンプルなネットワークでDHCPv6の必要性を排除します。
DHCPv6:管理された設定#
DHCPv6はDHCPv4と同様に機能します:クライアントはサーバーに設定を要求します。2つのモードで動作します。
ステートフルDHCPv6#
サーバーはアドレスを割り当て、どのクライアントがどのアドレスを持っているかを追跡します。クライアントは4つのメッセージ交換を実行します:
- Solicit:クライアントが設定を要求
- Advertise:サーバーがアドレスを提供
- Request:クライアントがオファーを受け入れ
- Reply:サーバーが割り当てを確認
アドレスは、優先および有効な有効期間でリースされ、更新が必要です。
ステートレスDHCPv6#
デバイスはアドレスにSLAACを使用しますが、DNSサーバー、ドメイン名、NTPサーバーなどの追加オプションについてDHCPv6をクエリします。サーバーはアドレスを追跡しないため、「ステートレス」です。
MとOフラグ#
ルーターアドバタイズメントには2つの重要なフラグが含まれています:
Mフラグ(管理されたアドレス設定) 1に設定されている場合、デバイスはDHCPv6を使用してアドレスを取得する必要があります。SLAACアドレスは、プレフィックス情報のAフラグに応じて引き続き生成される可能性があります。
Oフラグ(その他の設定) 1に設定されている場合、デバイスはDHCPv6を使用して追加オプション(DNS、NTPなど)を取得する必要がありますが、アドレスは取得しません。
フラグの組み合わせ:
M=0、O=0:SLAACのみ(DNSにRDNSSを使用)M=0、O=1:SLAAC + ステートレスDHCPv6M=1、O=0:アドレスにDHCPv6(まれな設定)M=1、O=1:アドレスとオプションにDHCPv6
SLAAC対DHCPv6の比較#
| 機能 | SLAAC | DHCPv6 |
|---|---|---|
| アドレス割り当て | 自動(プレフィックス + インターフェイスID) | サーバー割り当て |
| サーバー上の状態 | なし | ステートフルはバインディングを追跡 |
| DNS設定 | RAのRDNSS(RFC 8106) | オプション23(DNSサーバー) |
| アドレス追跡 | 不可能 | 完全な可視性 |
| クライアントの複雑さ | 最小限 | DHCPv6クライアントが必要 |
| 障害モード | 引き続き動作 | 単一障害点 |
| プレフィックス委任 | サポートされていない | サポート(DHCPv6-PD) |
一般的な設定#
SLAACのみ(RDNSSあり)#
アドレス追跡が不要なシンプルなネットワークに最適です。Linuxのradvd.confの例:
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
AdvRDNSSLifetime 300;
};
};この設定は、DHCPv6なしでほとんどのクライアントが必要とするすべてを提供します。
SLAAC + ステートレスDHCPv6#
RDNSSがサポートされていない場合、または追加のオプションが必要な場合に使用します。radvdでOフラグを設定します:
interface eth0 {
AdvSendAdvert on;
AdvOtherConfigFlag on; # O=1
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};DHCPv6サーバーはDNSおよびその他のオプションを提供しますが、アドレスは割り当てません。
DHCPv6のみ(管理)#
企業は、説明責任とアクセス制御のためにこれを好むことがよくあります。Mフラグを設定します:
interface eth0 {
AdvSendAdvert on;
AdvManagedFlag on; # M=1
AdvOtherConfigFlag on; # O=1
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous off; # SLAACを使用しない
};
};注:一部のクライアントは、AdvAutonomous offにもかかわらず、リンクローカルアドレスを生成し、SLAACアドレスを作成する可能性があります。ネットワークセキュリティポリシーは、SLAACの無効化のみに依存すべきではありません。
いつどちらを使用するか#
SLAACを使用する場合:
- 中小規模のネットワーク
- デバイスが信頼されている
- アドレス追跡が不要
- シンプルさが優先される
- すべてのクライアントがRDNSSをサポート
DHCPv6を使用する場合:
- 集中アドレス管理が必要
- コンプライアンスにアドレスログが必要
- プレフィックス委任が必要(ISPから顧客ルーターへ)
- DNS以外の複雑なオプションを提供する必要がある
- Windowsネットワーク(歴史的により良いDHCPv6サポート)
ハイブリッドアプローチ(SLAAC + ステートレスDHCPv6):
- 多くのネットワークに適した妥協案
- 回復力がある(DHCPv6が失敗してもSLAACが機能)
- 追加オプションの柔軟性を提供
アドレス割り当てのトラブルシューティング#
デバイスがリンクローカルのみ(fe80::/10)
ルーターアドバタイズメントが受信されていません。確認:
# Linux:RAをキャプチャ
tcpdump -i eth0 'icmp6 && ip6[40] == 134'
# ルーターがRAを送信していることを確認
radvdumpデバイスにSLAACアドレスがあるがDNSがない ルーターがRDNSSを送信していないか、クライアントがそれをサポートしていません。RAの内容を確認:
radvdump | grep RDNSS欠落している場合は、ルーター設定にRDNSSを追加するか、ステートレスDHCPv6を有効にします。
DHCPv6が動作しない RAでMまたはOフラグが設定されていることを確認:
radvdump | grep -E "M flag|O flag"DHCPv6サーバーが実行中でUDPポート547で到達可能であることを確認:
# サーバー側
ss -ulnp | grep 547
# クライアント側
tcpdump -i eth0 port 547インターフェイス上の複数のアドレス これは正常です。次のものが表示される可能性があります:
- リンクローカルアドレス(常に存在)
- SLAAC安定アドレス(EUI-64)
- SLAAC一時アドレス(プライバシー拡張)
- DHCPv6アドレス(ステートフルDHCPv6を使用している場合)
すべて有効です。OSはRFC 6724に基づいて適切な送信元アドレスを選択します。
関連記事#
- Windows、macOS、Linux、ルーターでIPv6を有効にする方法 - さまざまなオペレーティングシステムとデバイスでSLAACおよびDHCPv6設定を含むIPv6を有効化および設定します。
- IPv6プライバシー拡張:アドレス追跡を停止 - プライバシー拡張を使用してIPv6アドレスの追跡から保護する方法を学びます。
ほとんどの最新ネットワークは、シンプルさのためにSLAAC + RDNSSで、または広範な互換性のためにSLAAC + ステートレスDHCPv6でうまく機能します。特定のコンプライアンスまたはログ要件がある環境には、完全に管理されたDHCPv6を予約してください。どちらを選択しても、決定を文書化し、ネットワーク全体で一貫して設定してください。