次は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アドレスの設定手順は次のようになる。
まとめると、「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を作成するには、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で設定を変更してランダム化を無効にもできる。
それでは実際にIPv6アドレスのステートレス設定を試してみよう。まずWindows 7のPCを2台用意し、それらをネットワークで接続する。これ以外にはルータなどは用意せず、単に2台のPCを接続するだけとする。
この状態では、RAを送信する(ルート情報を「発行する」)ノードがいないため、2台のPCにはデフォルトのリンク・ローカル・アドレスが設定されるだけである。今までのサンプルはすべてこの状態のものである。
ここでPC1のIPv6の設定を変更して、RA情報を送信するようにしてみよう。そのためにはまず管理者権限のあるコマンド・プロンプトを開き、netshを起動して以下の設定を行う。
以上の操作により、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つしかプリフィックスが含まれていないが、場合によってはもっと多くのルート情報が含まれることがある。
今回はIPv6アドレスの静的な設定と、ステートレスな設定について解説した。DHCPサーバがなくても、このようなRAのアドバタイズの仕組みにより、ネットワーク上のノードは正しくプリフィックス情報を取得し、自分自身のIPv6アドレスを設定することができる。だがDHCPサーバを利用しないとできないこともいくらかある。次回はDHCPサーバを使ったステートフルなアドレス設定などについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.