ping6.net
基礎

DHCPv6対SLAAC:デバイスがIPv6アドレスを取得する方法

デバイスがIPv6アドレスを取得する2つの方法を理解します:SLAACはルーターアナウンスメントを使用し、DHCPv6はサーバーを使用します。それぞれを使用するタイミングを学びます。

ping6.net2024年12月14日2 min read
IPv6DHCPv6SLAAC自動設定ルーターアドバタイズメント

デバイスがIPv6ネットワークに参加すると、アドレスが必要になります。DHCPが標準的なアプローチであるIPv4とは異なり、IPv6は2つのメカニズムを提供します:SLAAC(ステートレスアドレス自動設定)とDHCPv6。それぞれを使用するタイミングを理解することは、ネットワークエンジニアにとって不可欠です。

TL;DR - 要点まとめ

重要ポイント:

  • SLAACはステートレスで、ルーターアドバタイズメント経由で自動 — サーバー不要
  • DHCPv6はDHCPv4のような集中制御とアドレス追跡を提供
  • ルーターアドバタイズメントのMとOフラグがどちらの方法を使用するかを制御

ジャンプ: 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の場合:

  1. 中央にff:feを挿入:00:11:22:ff:fe:33:44:55
  2. 7番目のビットを反転:02:11:22:ff:fe:33:44:55
  3. 結果: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つのメッセージ交換を実行します:

  1. Solicit:クライアントが設定を要求
  2. Advertise:サーバーがアドレスを提供
  3. Request:クライアントがオファーを受け入れ
  4. 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 + ステートレスDHCPv6
  • M=1、O=0:アドレスにDHCPv6(まれな設定)
  • M=1、O=1:アドレスとオプションにDHCPv6

SLAAC対DHCPv6の比較#

機能SLAACDHCPv6
アドレス割り当て自動(プレフィックス + インターフェイス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に基づいて適切な送信元アドレスを選択します。

関連記事#

ほとんどの最新ネットワークは、シンプルさのためにSLAAC + RDNSSで、または広範な互換性のためにSLAAC + ステートレスDHCPv6でうまく機能します。特定のコンプライアンスまたはログ要件がある環境には、完全に管理されたDHCPv6を予約してください。どちらを選択しても、決定を文書化し、ネットワーク全体で一貫して設定してください。