ややこしいIPv6アドレス自動設定の話

   このエントリをはてなブックマークに登録    2017/1/10-1

IPv6の大きな特徴として、IPアドレスの自動設定機能がIPv6の根本的な仕組みとして組み込まれている点があげられます。

IPv4が誕生した当初はIPアドレスの自動設定のための手法が存在していませんでした。 IPアドレス自動設定のためのDHCP(Dynamic Host Configuration Protocol)を規定したRFC 1531が発行されたのは1993年です。

IPv4におけるIPアドレスの自動設定は、後から作られたDHCPを使うというものでしたが、IPv6では最初からIPアドレス自動設定が議論されています。

ただし、その議論の結果生み出されたものが非常にややこしくなっています。 IPv6には最初からIPアドレス自動機能が備わっているものの、IPv6用のDHCPであるDHCPv6も同時に存在しており、非常にややこしいのです。 この文章を執筆している時点では、IPv6におけるIPアドレス自動設定に関連する議論が完全に収束したとは必ずしも言い切れない点もややこしさに拍車をかけています。

3種類あるIPアドレス自動設定

IPv6には、IPアドレスを自動設定する手法として、ルータが告知するRA(Router Advertisement)を利用する手法と、DHCPv6を利用する手法が存在しています。さらに、DHCPv6もDHCPv6サーバがクライアントのIPv6アドレスを把握するステートフルな方式と、把握しないステートレスな方式の2種類あります。

このような複雑さが発生しているのは、クライアントがIPv6アドレスそのものを設定する手法というよりは、クライアントが利用するキャッシュDNSサーバに関する情報をどのように通知するのかという部分です。

一般的に、インターネットを利用するにはIPアドレスの設定だけではなく、名前解決を行うためのキャッシュDNSサーバのIPアドレスも必要になります。IPv4では、DHCPによってIPv4アドレスの割り当てとキャッシュDNSサーバのIPアドレス通知が同時に行われます。

一方、IPv6においてIPアドレスとキャッシュDNSサーバ情報を自動設定する方法が以下の3種類になります。

  • RA+ステートレスDHCPv6
  • ステートフルDHCPv6
  • RFC 6106で定義されたRA(SLAAC/RDNSS)

RA+ステートレスDHCPv6では、クライアントはRAを使ってIPv6アドレスを自動生成しつつ、DHCPv6サーバからキャッシュDNSサーバに関する情報を受け取ります。

ステートフルDHCPv6では、IPv4と同様にDHCPv6サーバから割り当てられたIPv6アドレスをクライアントが使うと同時に、DHCPv6サーバから受け取ったキャッシュDNSサーバ情報を利用します。

ステートフルなDHCPv6では、DHCPv6サーバが個々のクライアントが利用しているIPv6アドレスを把握したり、クライアントのMACアドレスに応じてIPv6アドレスを割り当てるかどうかを判断することができます。 ステートレスなDHCPv6では、DHCPv6サーバはキャッシュDNSサーバに関する情報などを通知するだけで、クライアントのIPv6アドレスに関しては感知しないという違いがあります。

RFC 6106

2000年頃に調べたのを最後にIPv6を追ってなかった人が陥りがちな勘違いの代表的なものとして、「RAは仕様上DNS情報を送れない」というものがあげられます。

確かに昔はそうでした。そういった背景があるからこそ、ステートレスなDHCPv6が存在するのです。 IPv6設計当初は、RAを利用してDNS情報を付加できない仕様となっており、DNS情報はDHCPv6(RFC 3315)を利用して別途配布することになっていました。 IP層の機能であるRAを利用して、上位層で利用するためのDNS情報を配送することがレイヤーバイオレーションであり、プロトコルとして美しくないという理由でそのような設計になっていました。

しかし、RAにDNS情報を付加する仕様がその後できました。 2007年にRFC 5006で実験的RFC(Experimental)としてRAにDNS情報を加える方法が文書化されました。 その後、2010年に RFC 6106で標準である「PROPOSED STANDARD」になりました。

しかし、RFCが発行されることと、それが広く実装されることは同義ではありません。 RFC 6106が実装されていない機器も非常に多いのです。 このような「仕様と実際の違い」というのも、ややこしいです。

AndroidはDHCPv6未対応

一般ユーザ向けのIPv6環境を整えるときに面倒臭いと言われがちなのが、AndroidがDHCPv6を実装しておらずRFC 6106によるキャッシュDNSサーバ情報通知を必要としているという点です。

たとえば「ステートレスなDHCPv6とRAでIPv6アドレス自動設定できるようにしよう」というネットワーク環境だと、Androidに対してキャッシュDNSサーバに関する情報を提供できないのです。

現時点では、RFC 6106に対応していない機器もあるので、より多くの機器がIPv6環境での通信を快適に行えるようにするには、IPv6ネットワークの運用者がDHCPv6とRFC 6106の両方を同時に運用することが求められることもあります。 3種類あるうちのひとつだけを選んで準備すれば良いというわけではない場合もあるのです。

ただし、たとえば、OS X 10.11以降でRFC 6106がサポートされるようになるなど、RFC 6106実装も増えているので、数年後に状況が多少変わっている可能性もあります。

ISPからユーザへのIPv6アドレス割り当て

ここで紹介したIPv6アドレス自動設定は、末端ノードがIPv6アドレスを設定する方法です。

ISPからユーザに割り当てられるIPv6アドレスプレフィックスはDHCPv6-PD(Prefix Delegation)が利用されるので、また別の話になります。 そこら辺もIPv4とIPv6の大きな違いのひとつと言えますが、今回は割愛します。

まだ色々変わるかも

IPv6関連で話がややこしいのは、IPv6そのものがいまだ発展途上なプロトコルであるとも言える点です。

非常にややこしい状態になってしまっているIPv6アドレス自動設定に関しても、今後何かが変わる可能性があります。

   このエントリをはてなブックマークに登録