検索
連載

第4回 IPv6アドレスを割り当てるWindows管理者のためのIPv6入門(2/2 ページ)

128bitもあるIPv6アドレスを手動で各ノードに割り当てるのは簡単ではない。アドレス割り当てを自動化するステートレス設定とは?

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

ステートレスの自動設定

 次はIPv6アドレスの自動設定方法のうち、ステートレス設定について見てみよう。

 IPv4と比較すると、この「ステートレス設定」というのは新しい機能である。第1回の「3.Windows OSでIPv6を使ってみる」では、Windows OSを起動すると自動的に「fe80::〜」というリンクローカル・ユニキャスト・アドレスが割り当てられている例を示したが、これがステートレス設定によって割り当てられたIPv6アドレスの一例である。

 128bitのIPv6アドレスは、上位64bitの「プリフィックス」と下位64bitの「インターフェイスID」に分けられることは第1回で説明した。ステートレス設定では、近隣のルータから送信されたプリフィックス情報と、自ノードで作成したインターフェイスID情報を組み合わせて128bitのIPv6アドレスを合成し、これを自分自身のIPv6アドレスとしている。

bit数 用途 意味
64bit プリフィックス アドレスの種類やプリフィックス、サブネットIDなど
64bit インターフェイスID インターフェイスごとのID。通常はOSが自動的に付与する
IPv6アドレスの構造

 プリフィックス情報を送信することを「Router Advertisement(RA)」といい、第3回で説明したICMPv6のRAコマンド(134番)が利用される。またRAの送信を要求することを「Router Solicitation(RS)」といい、ICMPv6のRSコマンド(133番)が使われる。

 ステートレス設定におけるIPv6アドレスの設定手順は次のようになる。

  1. インターフェイスに設定するリンク・ローカル・アドレスを(自ノードのMACアドレスをベースに)作成する。
  2. 1.で作成したアドレスが重複していないかどうかを、前述のアドレス衝突検出の手順で確認する。衝突がなければリンク・ローカル・アドレスを有効にする。
  3. リンク・ローカル・アドレスをIPv6パケットの送信元として、RSコマンドを送信し、RAを要求する。
  4. RAを受信してそのネットワーク・インターフェイスにおけるプレフィックス情報(複数の場合あり)を入手する。RAの応答がなければ、アドレス設定処理は終了。
  5. 4.で入手したプリフィックスと、自ノードのMACアドレスをベースにしたインターフェイスIDから、128bitのIPv6アドレスを作成する。
  6. 5.で作成したIPv6アドレスが重複していないかを、前述のアドレス衝突検出の手順で確認する。衝突がなければそのIPv6アドレスを有効にする。
  7. 5.と6.の手順を、入手したすべてのプリフィックスについて行う。

 まとめると、「RAで入手したプレフィックス情報に、MACアドレスをベースにしたインターフェイスIDを組み合わせて、自動的にIPv6アドレスを作成する」ということである。MACアドレスは(基本的には)全世界でユニークな値になっているため、これをベースにして64bitのインターフェイスIDを作成すれば、ほかのどのノードとも重複しない数値になるはずである(コラム「MACアドレスからインターフェイスIDを作る」参照)。これに適切なプリフィックスを付ければ、ユニークなIPv6アドレスが作成できるというわけだ。インターフェイスIDは重複していないことが重要であり、ほかのノードと連続している必要はない。だからこのような方法でも問題はないだろう。

 だがプリフィックスはネットワークのルーティングに利用するため、ランダムな値を付けるわけにはいかない。そこでプリフィックスの情報だけは、RAという手順(プロトコル)を使って、プリフィックス情報を管理しているノードから入手することにしている。

 RAは、通常はルータが送信するような情報であるが、ルータが存在しないような小規模なネットワークの場合は、例えばクライアントのWindows 7で設定を変更すればRAを送信できる。

 RAを送信するノードは、クライアントからの要求(RS)に応じてRAを送信するだけでなく、定期的にRAをマルチキャスト送信している。各クライアントはこのRAも受信して、プリフィックス情報が変更されたら元のIPv6アドレスを廃止して、新しいIPv6アドレスを割り当てることになっている。このような仕組みにより、IPv6ネットワークに接続すれば各ノードはすぐに使えるようになるし、接続するネットワークに変更があっても、自動的に新しいIPv6アドレスに更新されるようになっている。

【コラム】MACアドレスからインターフェイスIDを作る

 MACアドレスからインターフェイスIDを作成するには、6bytes(48bit)のMACアドレスを前半と後半の3bytesずつに分け、その間に16進数の「ff:fe」を並べて、全部で8bytesの数値列にするのが標準的な方法である(ただしMACアドレスの先頭バイトの下から2bit目は反転させる。これはMACアドレスとIPv6でこのビットの意味が逆なためである)。これをEUI-64方式という(元の48bitのMACアドレスはEUI-48という)。例えば元のMACアドレスが「12:34:56:78:9a:bc」なら「10:34:56:ff:fe:78:9a:bc」となる。

 ところでこの方式でIPv6アドレスを作成すると、元のMACアドレス情報がほぼそのまま残ることになる。もしこれをグローバル接続したネットワークで利用すると、通信相手には送信元が誰であるか、過去に通信したことのある相手であるかどうか、などがすぐに分かってしまう。このような事態を避けるため、EUI-64ではなく、ランダムな数値になるように加工して利用することも少なくない。Windows OSのデフォルト設定では、ランダムなインターフェイスIDを使うようになっているが、netshで設定を変更してランダム化を無効にもできる。

  • ランダム化を無効にする場合
    netsh interface ipv6 set global randomizeidentifiers=disabled
  • ランダム化を有効にする場合
    netsh interface ipv6 set global randomizeidentifiers=enabled

Windows OSにおけるIPv6アドレスの自動設定

 それでは実際にIPv6アドレスのステートレス設定を試してみよう。まずWindows 7のPCを2台用意し、それらをネットワークで接続する。これ以外にはルータなどは用意せず、単に2台のPCを接続するだけとする。

 この状態では、RAを送信する(ルート情報を「発行する」)ノードがいないため、2台のPCにはデフォルトのリンク・ローカル・アドレスが設定されるだけである。今までのサンプルはすべてこの状態のものである。

 ここでPC1のIPv6の設定を変更して、RA情報を送信するようにしてみよう。そのためにはまず管理者権限のあるコマンド・プロンプトを開き、netshを起動して以下の設定を行う。

  1. IPv6のネットワーク・インターフェイスで「advertise」属性を「enabled」に設定する。これでRAパケットの送信が有効になる(デフォルトでは無効)
  2. IPv6のルート情報を新しく追加し、その「publish」属性を「yes」にする(デフォルトは「no」)

 以上の操作により、PC1から新しいルート情報がアドバタイズ(発行)されるようになり、そこに接続されているノードでは、指定されたプリフィックスのIPv6アドレスが自動的に設定されるようになる。Windows OSではデフォルトでRSの送信とRAの受信を行うので、これだけで設定が完了する。

 なおPC1には事前にIPv6アドレスを割り当てる必要はない。自分自身がアドバタイズするRA情報を使って、自ノードのIPv6アドレスが設定されるからだ。

 まずPC1で、RAのアドバタイズを有効にしてみよう。

C:\>netsh ……netshを起動する。管理者権限のあるコマンド・プロンプト上で起動すること
netsh>interface ……interfaceコンテキストへ切り替える
netsh interface>ipv6 ……IPv6コンテキストへ切り替える
netsh interface ipv6>show interface ……インターフェイスの一覧

Idx  Met         MTU          状態                 名前
---  ----  ----------  ------------  ---------------------------
  1    50  4294967295  connected     Loopback Pseudo-Interface 1
 12    50        1280  disconnected  isatap.{821AD8F5-5F2F-4800-86E0-9FEB30F498BA}
 13     5        1500  connected     ローカル エリア接続 2 ……このインターフェイス番号「13」を以下で指定すること

netsh interface ipv6>show interface 13 ……インターフェイスの詳細を見る

インターフェイス ローカル エリア接続 2 パラメーター
----------------------------------------------
IfLuid                             : ethernet_7
IfIndex                            : 13
状態                               : connected
メトリック                         : 5
リンク MTU                         : 1500 バイト
到達可能な時間                     : 21000 ミリ秒
基本の到達可能な時間               : 30000 ミリ秒
再転送間隔                         : 1000 ミリ秒
DAD 転送                           : 1
サイト プレフィックスの長さ        : 64
サイト ID                          : 1
転送                               : disabled
アドバタイズ                       : disabled ……これを有効にすること
近隣探索                           : enabled
近隣到達不可能性検出               : enabled
ルーター発見                       : enabled
管理されたアドレス構成             : enabled
その他のステートフル構成           : enabled
脆弱なホストによる送信             : disabled
脆弱なホストによる受信             : disabled
自動メトリックの使用               : enabled
既定ルートを無視                   : disabled
アドバタイズされたルーターの有効期間: 1800 秒
既定ルートのアドバタイズ           : disabled
現在のホップ制限                   : 0
ARPND スリープ解除パターンの強制   : disabled
指定の MAC スリープ解除パターン    : disabled

netsh interface ipv6>set interface 13 advertise=enabled ……アドバタイズを有効にする
OK

netsh interface ipv6>show interface 13 ……確認する

インターフェイス ローカル エリア接続 2 パラメーター
----------------------------------------------
IfLuid                             : ethernet_7
IfIndex                            : 13
状態                               : connected
メトリック                         : 5
リンク MTU                         : 1500 バイト
到達可能な時間                     : 21000 ミリ秒
基本の到達可能な時間               : 30000 ミリ秒
再転送間隔                         : 1000 ミリ秒
DAD 転送                           : 1
サイト プレフィックスの長さ        : 64
サイト ID                          : 1
転送                               : disabled
アドバタイズ                       : enabled ……変更されている
…(以下省略)…

 次はPC1側で、新しいIPv6ルート情報を追加してみよう。追加するプリフィックスは「2001:db8:dead:beef::/64」とする。

netsh interface ipv6>show route ……ルート情報の確認

発行     種類   Met  プレフィックス            Idx ゲートウェイ/インターフェイス名
------  ------  ---  ------------------------  ---  ------------------------
いいえ  Manual  256  ::1/128                     1  Loopback Pseudo-Interface 1
いいえ  Manual  256  fe80::/64                  13  ローカル エリア接続 2
いいえ  Manual  256  fe80::5efe:169.254.105.126/128   12  isatap.{821AD8F5-5F2F-4800-86E0-9FEB30F498BA}
いいえ  Manual  256  fe80::84da:8a48:bbe7:697e/128   13  ローカル エリア接続 2
いいえ  Manual  256  ff00::/8                    1  Loopback Pseudo-Interface 1
いいえ  Manual  256  ff00::/8                   13  ローカル エリア接続 2

netsh interface ipv6>add route 2001:db8:dead:beef::/64 13 publish=yes ……新ルートを追加
OK

netsh interface ipv6>show route ……確認

発行     種類   Met  プレフィックス            Idx ゲートウェイ/インターフェイス名
------  ------  ---  ------------------------  ---  ------------------------
いいえ  Manual  256  ::1/128                     1  Loopback Pseudo-Interface 1
はい    Manual  256  2001:db8:dead:beef::/64    13  ローカル エリア接続 2 ……追加ルート
いいえ  Manual  256  2001:db8:dead:beef::/128   13  ローカル エリア接続 2
いいえ  Manual  256  2001:db8:dead:beef:84da:8a48:bbe7:697e/128   13  ローカル エリア接続 2
いいえ  Manual  256  2001:db8:dead:beef:ac4e:8053:8cc7:5053/128   13  ローカル エリア接続 2
いいえ  Manual  256  fe80::/64                  13  ローカル エリア接続 2
…(以下省略)…

 以上で設定は完了である。追加したルート情報の「発行」欄(一番左)が「はい」になっていることに注目していただきたい。以後は、このネットワークに新しいPCを接続するだけで自動的にIPv6のルート情報(プリフィックス情報)などを取得して、設定が完了するはずである。

 まずPC2の初期状態を見てみよう。これは新しいルート情報を送信する前(RAのアドバタイズ前)の状態である。PC2には、デフォルトのリンク・ローカル・アドレスしか設定されていない。

※PC2の状態(RAアドバタイズ前の初期状態)
C:\>ipconfig /all ……初期状態の確認

Windows IP 構成

   ホスト名 . . . . . . . . . . . . : PC2
   プライマリ DNS サフィックス . . . . . . . :
   ノード タイプ . . . . . . . . . . . . : ハイブリッド
   IP ルーティング有効 . . . . . . . . : いいえ
   WINS プロキシ有効 . . . . . . . . : いいえ

イーサネット アダプター ローカル エリア接続 2:

   接続固有の DNS サフィックス . . . :
   説明. . . . . . . . . . . . . . . : Microsoft Virtual Machine バス ネットワーク アダプター #2
   物理アドレス. . . . . . . . . . . : 00-15-5D-00-90-49
   DHCP 有効 . . . . . . . . . . . . : はい
   自動構成有効. . . . . . . . . . . : はい
   リンクローカル IPv6 アドレス. . . . : fe80::49f0:1a8b:6d4c:8f6e%13(優先)
   自動構成 IPv4 アドレス. . . . . . : 169.254.143.110(優先)
   サブネット マスク . . . . . . . . : 255.255.0.0
   デフォルト ゲートウェイ . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 268440925
   DHCPv6 クライアント DUID. . . . . . . . : 00-01-00-01-15-46-09-29-00-15-5D-00-90-33
   DNS サーバー. . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over TCP/IP . . . . . . . : 有効
…(省略)…
C:\>

 PC1でRAのアドバタイズを有効にし、新しいルート情報を追加してからしばらく待ってみる(1分ほど)。そしてPC2(およびPC1)でIPアドレスを確認してみる。すると次のように、新しいIPv6アドレスが設定されていることが確認できるはずである。

※PC2の状態(RAアドバタイズ後。新しいIPv6アドレスの受信後)
C:\>ipconfig /all ……新ルート追加後の状態の確認

Windows IP 構成

   ホスト名 . . . . . . . . . . . . : PC2
   プライマリ DNS サフィックス . . . . . . . :
   ノード タイプ . . . . . . . . . . . . : ハイブリッド
   IP ルーティング有効 . . . . . . . . : いいえ
   WINS プロキシ有効 . . . . . . . . : いいえ

イーサネット アダプター ローカル エリア接続 2:

   接続固有の DNS サフィックス . . . :
   説明. . . . . . . . . . . . . . . : Microsoft Virtual Machine バス ネットワーク アダプター #2
   物理アドレス. . . . . . . . . . . : 00-15-5D-00-90-49
   DHCP 有効 . . . . . . . . . . . . : はい
   自動構成有効. . . . . . . . . . . : はい
   IPv6 アドレス . . . . . . . . . . . : 2001:db8:dead:beef:49f0:1a8b:6d4c:8f6e(優先) ……新IPv6アドレス

   一時 IPv6 アドレス. . . . . . . . . : 2001:db8:dead:beef:ed73:1f9f:c505:2a8e(優先) ……一時IPv6アドレス
   リンクローカル IPv6 アドレス. . . . : fe80::49f0:1a8b:6d4c:8f6e%13(優先)
   自動構成 IPv4 アドレス. . . . . . : 169.254.143.110(優先)
   サブネット マスク . . . . . . . . : 255.255.0.0
   デフォルト ゲートウェイ . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 268440925
   DHCPv6 クライアント DUID. . . . . . . . : 00-01-00-01-15-46-09-29-00-15-5D-00-90-33
   DNS サーバー. . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over TCP/IP . . . . . . . : 有効
…(省略)…
C:\>

 「新IPv6アドレス」は、アドバタイズされたルート情報に基づいて、新しく割り当てられたIPv6アドレスである。システムには何も変更を加えていないのに、自動的にIPv6アドレスが割り当てられている。

 「一時IPv6アドレス」は、ユニークなIPv6アドレスが作成された場合に、自動的に作成される一時的なIPv6アドレスである。先のコラム「MACアドレスからインターフェイスIDを作る」では、MACアドレスがそのまま含まれたIPv6アドレスはセキュリティ的に問題となる可能性があると述べたが、いったん作成されたIPv6アドレスをずっと使い続けるのも(特にNATなしで直接インターネットへ接続する場合など)、同様に問題となる可能性がある。そこで一定時間ごとにランダムに変わるように、寿命の短いIPv6アドレスも用意されている。それが一時IPv6アドレスだ。このアドレスは動的DNSに登録されることはなく、パケットの送信時などには、優先的に送信元IPv6アドレスとして利用される。

 一時IPv6アドレスを作成するかどうかは、Windows OSの場合は、netshのshow privacyコマンドで確認できる。

netsh interface ipv6>show privacy ……一時アドレス設定の確認。変更はset privacy 〜
アクティブ状態を照会しています...

一時アドレス パラメーター
-----------------------------------
一時アドレスの使用        : enabled  ……デフォルトでは一時アドレスの作成は有効になっている
重複アドレスの検出の試み  : 5
有効期間の最大値          : 7d  ……有効時間
優先する有効期間の最大値  : 1d
再生成時間                : 5s
ランダム時間の最大値      : 10m
ランダム時間              : 0s

netsh interface ipv6>

 最後にRAパケットの例を示しておく。ネットワーク上のIPv6ノードはこれを見てネットワークのプリフィックス情報などを取得し、設定を行う。この例ではパケット中に1つしかプリフィックスが含まれていないが、場合によってはもっと多くのルート情報が含まれることがある。


RAパケットの例
DHCPサーバがなくても、このようなRAのアドバタイズの仕組みにより、ネットワーク上のノードは正しくプリフィックス情報を取得し、自分自身のIPv6アドレスを設定できる。通常はルータがこのようなRAのアドバタイズを行う。
  (1)新ルート情報が追加されたのでRAパケットが送信されている。
  (2)ICMPv6を使ってマルチキャスト送信されている。
  (3)プリフィックス情報。


 今回はIPv6アドレスの静的な設定と、ステートレスな設定について解説した。DHCPサーバがなくても、このようなRAのアドバタイズの仕組みにより、ネットワーク上のノードは正しくプリフィックス情報を取得し、自分自身のIPv6アドレスを設定することができる。だがDHCPサーバを利用しないとできないこともいくらかある。次回はDHCPサーバを使ったステートフルなアドレス設定などについて解説する。


「Windows管理者のためのIPv6入門」のインデックス

Windows管理者のためのIPv6入門

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る