IPv6 では、管理者の手間を減らすために、アドレス割り当ての自動化が仕様に取り込まれています。これは、IPv4 における DHCP は IPv4 の後付けとして仕様化された仕組みだからかと思っています(正確ではないかもしれません)。
とはいえ、IPv6 アドレスの自動割り当ての方法は、今も仕様が二転三転しており、後述の SLAAC, DHCPv6 のように似たような仕組みの棲み分けも微妙なので、更なる仕様の成熟は必要だと思っています。
本稿では、このようにややこしい IPv6 アドレスの自動割り当てについて、自分の理解の整理を含めてまとめていこうと思います。
アドレス割り当ての種類
SLAAC ( Stateless Address Autoconfiguration ):
- ルーターは、RA ( Router Advertisement ) を使用して IPv6 アドレスの前半部分であるプレフィックスをクライアントに配布します。クライアントは、インターフェース ID を使用して後半部分のアドレスを自動で生成します。インターフェース ID の詳細は後述します。
- DNS 情報の配布には、RDNSS ( Router Advertisement DNS Server ) と呼ばれるオプション仕様が使われます。この RDNSS は初期の RA には存在していなかったのですが、おそらく DNS 情報の配布ができないのは不便すぎるので、要望があって追加されたものと推察しています。
DHCPv6:
- DHCPv4 と同様に、128bit の IPv6 アドレス全体と DNS サーバーの IP アドレスを配布します。
- DHCPv6 サーバーが IPv6 アドレスの状態を保持しない場合はステートレス DHCPv6、保持する場合はステートフル DHCPv6 と呼ばれます。
- DHCPv6 はゲートウェイアドレスの配布ができません。これは経路情報の配布は RA に委ねるべきという思想に基づいています。
インターフェース ID
IPv6 アドレスのインターフェース ID は、ネットワークインターフェースを一意に識別するためのユニークな識別子です。インターフェース ID は IPv6 アドレスの後半 64bit を構成します。
インターフェース ID は、一般的に EUI-64 ( Extended Unique Identifier ) を使用して生成されます。EUI-64 は以下のように、MAC アドレスをベースに生成されます。
- まず、MAC アドレスを明確にします。MAC アドレスは 48bit です。つまり、2 進数の 0, 1 が 48 個並んだ数字です。この 48 個のビット列を 8 個(オクテット)ずつ 6 つに分け、16 進数で表記します。
- MAC アドレスは 00:1A:2B:3C:4D:5E を例とします。
- 00:1A:2B:3C:4D:5E の MAC アドレスを 24bit に分割します。つまり、00:1A:2B, 3C:4D:5E となります。
- その間に 16bit の FFFE を追加します。つまり、00:1A:2B:FF:FE:3C:4D:5E となります。これで 48bit + 16bit で 64bit のアドレスが生成されます。
- 先頭のオクテットを 2 進数に変換します。今回は 00:1A:2B:FF:FE:3C:4D:5E なので 00 です。これを 2 進数にすると 00000000 です。
- その 2 進数の 7bit 目を反転させます。0 なら 1、1 なら 0 にします。 今回は 00000010 になります。
- 00000010 を 16 進数に戻します。今回は 02 になります。
- 最終的に 02:1A:2B:FF:FE:3C:4D:5E がインターフェイス ID となり、SLAAC などにおいて、このインターフェイス ID が IPv6 アドレスの後半 64bit になります。
EUI-64 は、ネットワーク インターフェースの一意性を確保するために広く使用されていますが、MAC アドレスから IP アドレスを推測可能であるため、プライバシーが問題視されることがあります。一方では、サーバーや特定のネットワークデバイスでは逆に推測したい場合もありますので、環境によって判断しましょう。
セキュリティを考慮したランダムなインターフェイス ID の生成は、RFC 7217 で規定されています。この方法は、ネットワークインターフェイスに関連付けられたプレフィックスと一意のシークレットを使用して、一意のインターフェイス ID を生成します。この手法により、インターフェイス ID の生成にランダム性とセキュリティが追加されます。
また、EUI-48 も存在しています。この場合、MAC アドレスの 48bit をそのまま使用できるので、EUI-64 のような生成プロセスは必要ありません。
SLAAC と DHCPv6 のメリットとデメリット
SLAAC のメリット:
- SLAAC はルーターによる RA メッセージの配布を介してアドレスを自動構成するため、追加のサーバーが必要ありません。ネットワークの設定が簡単です。
- SLAAC は、IPv6 でネイティブにサポートされており、ネットワークの冗長性を高めることができます。これは、DHCP のようにアドレス全体を管理するのではなく、インターフェイス ID を使用するため、RA が複数存在しても問題にならないと言うことです。いつか検証してみたいと思っていますが、HSRP のようなゲートウェイ冗長化の仕組みも不要になるかもしれません。
SLAAC のデメリット:
- 当初は DNS の割り当てを DHCPv6 に依存していたため、SLAAC では DNS 情報を配布することが不可でしたが、RDNSS により解決されています。古いネットワークデバイスは RDNSS に対応していない可能性もあります。
- プリフィックス、経路情報、DNS 情報(RDNSS)以外の割り当てはできません。例えば、NTP の IP アドレスは DHCPv6 で配布する必要があります。
- インターフェイス ID の生成に MAC アドレスを使用するため、ユーザーのプライバシーに懸念がありますが、必要に応じてランダムなインターフェイス ID の生成で解決できます。
DHCPv6 のメリット:
- DHCPv6 は IPv6 アドレスだけでなく、DNS 情報やその他のネットワーク設定情報を配布できます。
- 部分的な違いはありますが、IPv4 の DHCP 機能が継承されているため、PXE などの特殊な用途にも対応できます。
- ステートフル DHCPv6 では、インターフェイス ID の生成にランダム化が適用されるため、プライバシーを向上させることができます。
DHCPv6 のデメリット:
- DHCPv6 を使用するには、ネットワークデバイス以外に専用のサーバーが必要となる場合があります。一般的に、RA は標準的に搭載されていることが多いと思います。
- DHCPv6 によるアドレス割り当ては、SLAAC に比べてネットワークの冗長性が低下する可能性があります。
- DHCPv6 は経路情報の配布には使用されず、RA メッセージを使用する必要があります。
SLAAC と DHCPv6 の組み合わせ
SLAAC と DHCPv6 を組み合わせて運用することも可能です。単体での使用を含めると、基本的な組み合わせは以下の 4 種類があります。
- SLAAC 単体: ルーターが IPv6 のプレフィックスとDNS 情報を配布する方法です。DHCPv6 特有の機能が必要なければ、この方法が最もシンプルです。
- ステートレス DHCPv6: ルーターが SLAAC でプレフィックスを配布し、DNS 情報のみを DHCPv6 を配布する方法です。これは RDNSS が登場したため、最新の状況では無意味であり、SLAAC 単体で対応できます。
- ステートフル DHCPv6: DHCPv6 単体の構成です。この方法では経路情報が配布できないため、適用する環境は限られます。
- SLAAC + DHCPv6: プリフィックス、アドレスを含む、配布可能な情報を両方を使用して配布する方法です。ステートレス DHCPv6 と言って良いかもしれませんが、DNS 情報以外の配布も可能ですし、従来の DHCP と同様に MAC アドレスをベースとして固定 IP アドレスを配布することもできます。未検証ですが、この構成の場合、SLAAC では経路情報のみを配布するようにしないとあまりメリットがないように感じています。
最後に
できるだけ、わかりやすくまとめたつもりですが、SLAAC と DHCPv6 のメリットとデメリット、組み合わせなど、もう少し自分の理解を深める必要があるかと思っています。