現行のIPバージョン4(IPv4)に代わる新たなプロトコルとして,IPバージョン6(IPv6)が制定されています。IPv6は,IPv4にあったさまざまな問題を解決するプロトコルです。今回はIPv6アドレスと,IPv6の特徴について勉強しましょう。

IPv6アドレス

 IPv6の特徴としてあげられるのは次の項目です。

  • 広大なIPアドレス空間
  • 動的設定やモバイルなどに対応した多機能のアドレス設定
  • インターネットで簡単に集約できるアドレス体系
  • NAT/NAPTなしのエンドツーエンド接続
  • IPsecに標準対応
  • 改良されたヘッダ
  • IPv4とIPv6への変換,トンネリング

 特にIPv6の特徴として語られることが多いのは,その広大で使いやすいアドレスです。まず,IPv6アドレスを理解しましょう。

 IPv6アドレスは128ビットで,16進数32桁で表記されます。2オクテット(16ビット)ごとに「:(コロン)」を入れます。ただし,このまま32桁を表記すると長いため,ゼロの省略ができるようになっています。例えば,「FFEC:0001:0000:0000:0000:0A12:0000:aa00」は「FFEC:1::A12:0:aa00」と省略できます(図1)。

図1●IPv6アドレスの記述
図1●IPv6アドレスの記述

 IPv6アドレスでは次の3つのタイプがあります。

  • ユニキャスト…通常の1対1の通信に使われるアドレス
    • グローバルユニキャスト…IPv4のグローバルアドレスに相当する,インターネットでユニークなアドレス
    • ユニークローカルユニキャスト…IPv4のプライベートアドレス相当する,組織内でユニークなアドレス
    • リンクローカルユニキャスト…IPv6からの新しいアドレスで,同一リンク(LANセグメント)でユニークなアドレス
  • エニーキャスト…IPv6からの新しいアドレスタイプで,複数台で同一のIPアドレスを共有することができる。エニーキャストあてで送信すると最も近いホストとの通信になる
  • マルチキャスト…IPv4のマルチキャストと同等

 この中でも特にグローバルユニキャストアドレスが重要です。グローバルユニキャストアドレスはIPv4のグローバルアドレスに相当するアドレスで,ルーティングの容易さなどからアドレス集約(ルーティング編 第3回「ルート集約を押さえよう」参照)が簡単にできるように作られています。

 グローバルユニキャストアドレスの先頭3ビットはグローバルユニキャストを表わす001です。なので,グローバルユニキャストアドレスの先頭は16進数で必ず2か3になります。現在のインターネットでは,先頭16ビットが2001のアドレスを利用するようになっており,次の7ビットがRIR(地域レジストリ:ARINやAPNIC)を表します。さらに,次の9ビットがISPを表します。そして,ISPが各企業・組織に割り振るため16ビットを使用します。次の16ビットが組織内のサブネットになります。残りの64ビットがホストをあらわす「インタフェースID」です。IPv6ではCIDR表記でプレフィックス長を表します。よって,グローバルユニキャスト全体を表わす場合,2000::/3のように記述します(IPv4同様ネットワークを表わす場合,プレフィックス以外のビットは0で記述する)(図2)。

図2●グローバルユニキャストアドレス
図2●グローバルユニキャストアドレス

 先頭から48ビットはIPv4グローバルIPアドレスのネットワーク部に相当し,「グローバルルーティングプレフィックス」と呼ばれます。そして,16ビットのサブネットプレフィックスを挟み,後半64ビットがホスト部に相当するインタフェースIDです。インタフェースIDは任意で割り振ってもかまいませんが,MACアドレスから生成するEUI-64フォーマットという方式で自動生成も可能です(図3)。

図3●EUI-64フォーマット

 リンクローカルユニキャストアドレスは,そのリンク上,つまりサブネットだけで通用するアドレスです。リンクローカルユニキャストアドレスは基本的にIPv6が有効なインタフェースで自動生成され,グローバルユニキャストアドレスがない状態でも使用できます。それにより,ネットワークに接続するだけで同一サブネット上の機器と通信が可能になります。これを使って,後述のステートレス自動設定などを行います。

 また,IPv6ではブロードキャストアドレスがなくなり,すべてマルチキャストアドレスとして運用されます。たとえば,ローカルブロードキャスト(サブネット内へのブロードキャスト)と同じ扱いのリンク上すべてのノード宛のFF02::1があります。他にもリンク上すべてのルータ(FF02::2),RIP2のアップデート(FF02::9)などがあります。

IPv6アドレスの割り当て

 IPv6アドレスの割り当てには,IPv4同様にスタティックとダイナミックの2種類が存在する。スタティックは手動で割り当てる方式であり,これにはグローバルルーティングプレフィックスのみ設定してインタフェースIDはEUI-64フォーマットで生成する方式と,グローバルルーティングプレフィックスとインタフェースID双方を手動で設定する方式があります。

 一方のダイナミックなアドレスの割り当てには,DHCPv6を使う方式と,ステートレス自動設定を使用する方式の2種類がある。ステートレス自動設定はIPv6からの新しい方式で,NDP(Network Discovery Protocol)を使用します(図4)。

図4●ステートレス自動設定

 これにより,情報家電やモバイル機器などで容易にIPアドレスが自動設定されます。ただし情報家電などでは問題ありませんが,通常のホストに使用すると,IPアドレス,デフォルトゲートウェイアドレスは入手できますが,ネットワーク設定で重要なDNSサーバのアドレスやその他の設定が入手できません。そのため,IPv4で使われていたDHCPをIPv6で使えるようにしたDHCPv6で,IPv4のDHCPと同じようにIPアドレスと各種設定を取得することができます。

 このIPv4と同様にIPアドレスとネットワーク設定を割り当てる方式のDHCPは「ステートフルDHCP」と呼ばれます。ステートレス自動設定でも,DNSサーバアドレスなどを設定する方法があり,ここで使われるのは「ステートレスDHCP」と呼ばれます。ステートレスDHCPはステートレス自動設定でデフォルトゲートウェイなどを通知する際に,ステートレスDHCPサーバのアドレスを通知します。クライアントはIPアドレス取得後,ステートレスDHCPサーバに要求を出し,ネットワーク設定を受け取るという形になります。ステートレス(+自動設定)とステートフルのDHCPサーバは,割り当てたIPアドレスの管理がステートレスではできないが,ステートフルではできるなどの点で異なります。

IPv6とIPv4を併用する

 IPv6とIPv4は互換性がないため,現在利用しているIPv4から容易にIPv6へ移行するということができません。IPv6を導入しても,IPv4のネットワークを間に挟む必要があったり,あて先がIPv4だけだったりということがありえます。そのため,IPv4とIPv6を併用し,段階的に移行していくことになります。IPv4とIPv6の併用としては,3種類の方法があります。「デュアルスタック」「トンネリング」「NAT-PT」です。

 デュアルスタックは,IPv4とIPv6を両方使用する方式です。ホストやルータIPv6,IPv4を利用でき,それぞれのアドレスを持ちます。そしてあて先がIPv4アドレスをもつホストならばIPv4を使い,IPv6のアドレスを持つならばIPv6を使うという方式です。

 トンネリングはIPv4ネットワークを間に挟んだIPv6ネットワークで使われる方式です。IPv6からIPv4へ境界でIPv6パケットをIPv4パケット内に含めてIPv4ネットワークを通り,IPv4からIPv6へ境界で元に戻すことにより,IPv4ネットワークを通過します(図5)。

図5●トンネリング

 トンネリングには方式が複数あります。

  • 手動設定トンネル(Manually Configured Tunnels:MCT) … IPv4/IPv6の境界にあるルータで手動によりトンネルの始点と終点にIPv4アドレスを割り当てる
  • 自動設定トンネル … トンネルの始点と終点が自動的に設定される
  • ISATAP(Intra-Site Automatic Tunnel Addressing Protocol) … IPv4プライベートネットワークでトンネリングを自動化する。IPv4のNATは使用できない
  • Teredo … デュアルスタックのホスト同士がIPv4ネットワークを介してつながっている場合に使われる

 トンネリングは,IPv6を使えるネットワークやホストの間を,IPv4ネットワークが「挟んで」いる状態で使われます。IPv6ホストからIPv4ホストへのデータ転送には使用できません。その場合は,NAT-PT(Network Address Translation/Protocol Translation)が使われます。NAT-PTはその名前が示す通り,IPv6からIPv4へのアドレスの変換とヘッダの変換が実行されます(図6)。

図6●NAT-PT
図6●NAT-PT

■変更履歴
「IPv6アドレスの割り当て」以下の段落で「ステートフル」と「ステートレス」の表記に誤りがありました。また、図4の画面2で「Router Solication」としていましたが、「Router Solicitation」の誤りです。お詫びして訂正します。いずれも本文は修正済みです。 [2010/09/30 12:27]