ここまでの手順で、USAGIマシンをルータにするための設定は完了です。次に、ネットワークに接続されるマシンを設定する必要があります。それには2通りの方法が挙げられます。
- コマンド類を駆使して接続用マシンの設定を行う(手動設定)
- ルータとなるUSAGIマシン上でradvdを動作させる(自動構成)
ここでは、手動設定について説明します。ここで用いるマシンは、*BSD用のIPv6スタックであるKAMEがインストールされたマシンです。今回の場合は、FreeBSD-4.6 Releaseのマシンを使用しています。USAGIマシンを用いる場合は、ルータでのアドレス設定や経路設定の方法について、適宜読み替えてください。
■ネットワークインターフェイスに対するIPv6アドレスの付与
実験用マシンについても、当然外部と通信可能なIPv6アドレスが必要になります。グローバルアドレスが必要なことから、表1で割り出したネットワークに属するアドレスを付与します。今回は、2001:2c0:418:1::2/64というアドレスをKAMEマシンに付与します。
$ su root
# ifconfig vx0 inet6 add 2001:2c0:418:1::2/64 up |
vx0は、USAGIマシンと同じネットワークセグメントに接続されているインターフェイスの名前です。うまくIPv6アドレスがインターフェイスに追加されていれば、ifconfigの実行結果は、例えばリスト3のような形になります。
# ifconfig vx0
vx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 61.197.226.211 netmask 0xfffffff8 broadcast 61.197.226.215
inet6 fe80::220:afff:fed2:108%vx0 prefixlen 64 scopeid 0x1
inet6 2001:2c0:418:1::2 prefixlen 64
ether 00:20:af:d2:01:08 |
リスト3 ifconfig実行結果 |
IPv6アドレスを付与したら、すでにIPv6アドレスを付与されているUSAGIホストに対する通信が可能かどうかをping6コマンドを用いて確認します。通信が可能な場合は、例えば以下のような形でレスポンスがあります。
ping6 2001:2c0:418:1::1
PING6(56=40+8+8 bytes) 2001:2c0:418:1::2 --> 2001:2c0:418:1::1
16 bytes from 2001:2c0:418:1::1, icmp_seq=0 hlim=64 time=220.409 ms
16 bytes from 2001:2c0:418:1::1, icmp_seq=1 hlim=64 time=0.377 ms
16 bytes from 2001:2c0:418:1::1, icmp_seq=2 hlim=64 time=0.376 ms
16 bytes from 2001:2c0:418:1::1, icmp_seq=3 hlim=64 time=0.374 ms
16 bytes from 2001:2c0:418:1::1, icmp_seq=4 hlim=64 time=0.373 ms
^C
--- 2001:2c0:418:1::1 ping6 statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.373/44.382/220.409/88.014 ms |
■経路の設定(スタティックルーティング)
次にIPv6ネットワークに対する経路を追加するわけですが、まずデフォルトルートを追加する必要があります。これは、中編で紹介した経路を少しいじります。外部ネットワークと通信できるホストは、いまのところUSAGIマシンだけなので、このマシンを2000::/3と3ffe::/16のネットワークに対するゲートウェイとします。具体的には、routeコマンドを以下のように実行します。
# route add -inet6 2000:: -prefixlen 2 2001:2c0:418:1::1
# route add -inet6 3ffe:: -prefixlen 16 2001:2c0:418:1::1 |
この結果、実験用IPv6マシンに対して設定されたIPv6ネットワーク用のルーティングテーブルはリスト4のようになります。
Internet6:
Destination Gateway Flags Netif
Expire
::/2 2001:2c0:418:1::1 UGSc vx0
::1 ::1 UH lo0
2001:2c0:418:1::/64 link#1 UC vx0
2001:2c0:418:1::1 00:a0:24:56:97:89 UHLW vx0
2001:2c0:418:1::2 00:20:af:d2:01:08 UHL lo0
3ffe::/16 2001:2c0:418:1::1 UGSc vx0
fe80::%vx0/64 link#1 UC vx0
fe80::220:afff:fed2:108%vx0 00:20:af:d2:01:08 UHL lo0
fe80::2a0:24ff:fe56:9789%vx0 00:a0:24:56:97:89 UHLW vx0
fe80::%fxp0/64 link#2 UC fxp0
fe80::2d0:b7ff:fe13:c6b8%fxp0 00:d0:b7:13:c6:b8 UHL lo0
fe80::%lo0/64 fe80::1%lo0 Uc lo0
fe80::1%lo0 link#3 UHL lo0
ff01::/32 ::1 U lo0
ff02::%vx0/32 link#1 UC vx0
ff02::%fxp0/32 link#2 UC fxp0
ff02::%lo0/32 ::1 UC lo0 |
リスト4 ルーティングテーブルの設定状況 |
■実験用IPv6マシンからの対外接続の実施
ここまでの設定に間違いがなければ、外部のIPv6ネットワークに対する接続が可能になっているはずです。telnetを用いて、www.kame.netのTCP/80番ポートに接続したうえで、OPTIONSメソッドを発行してみた様子をリスト5に示します。
telnet 2001:200:0:4819:210:f3ff:fe03:4d0 80
Trying 2001:200:0:4819:210:f3ff:fe03:4d0...
Connected to 2001:200:0:4819:210:f3ff:fe03:4d0.
Escape character is '^]'.
OPTIONS / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 02 Feb 2003 18:19:30 GMT
Server: Apache/2.0.43 (Unix) mod_ssl/2.0.43 OpenSSL/0.9.6g DAV/2
Allow: GET,HEAD,POST,OPTIONS,TRACE
Last-Modified: Tue, 28 Jan 2003 20:00:00 GMT
Content-Length: 0
Connection: close
Content-Type: text/html
Connection closed by foreign host. |
リスト5 telnetによる外部ネットワークへの接続テスト |
手動でIPv6対応のマシンをネットワークに参加させる方法は理解できたと思います。次は、 ルータとなるUSAGIマシン上でradvdを動作させ、自動構成する方法を説明します。
IPv6では、「Neighbor Discovery for IP Version 6 (IPv6)」(RFC 2461)に記述されている機能を用いて、接続されるホストのネットワーク設定を自動的に構成することが可能です。具体的には、Router Advertisementと呼ばれる機能を用いて、ルータの所在(アドレス)とネットワークプリフィックスを接続されたホストに与えます。
■ホストの設定
radvdを動かす前に、ルータとなるUSAGIマシンでRouter Advertisementパケットを受け取らない(受け取っても解釈しない)ようにしなくてはなりません。そのために、/proc/sys/net/ipv6/conf/all/accept_raを「0」に設定します。
# echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra |
この設定を行わないと、ルータが出したRouter Advertisementパケットをルータ自身が受け取ってしまいます。
■radvdの設定
Router Advertisementパケットを解釈しないようにしたら、次はradvdを稼働させます。
USAGI STABLE Release 4のコマンドをインストールしたのであれば、/usr/local/v6/etc下にradvd.confというファイルを作成し、/usr/local/v6/sbin/radvdを起動すれば作業自体は完了します。以下に、radvdの設定ファイルであるradvd.confの内容を示します。
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix 2001:02c0:0418:0001::/64
{
AdvOnLink on;
AdvAutonomous on;
};
}; |
リスト6 radvd.conf
注:
・Router Advertisementを行うネットワークがつながれているインターフェイスはeth0
・Advertiseを行うネットワークプリフィックスは2001:02c0:0418:0001::/64 |
■実験用IPv6マシンの設定
実験用マシンについては、「OSがIPv6スタックを搭載していること」以外の条件は必要ありません。あえていうならば、Router Advertisementパケットを受け取って解釈できるようにしておく必要があります。
KAMEマシンの場合、カーネルパラメータであるnet.inet6.ip6.accept_rtadvの値を1にすることで、Router Advertisementパケットを受け取れるようになります。この値が0の時点では、KAMEマシンのvx0のアドレス付与状況はリスト7、経路情報はリスト8のようになります。
vx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 61.197.226.211 netmask 0xfffffff8 broadcast 61.197.226.215
inet6 fe80::220:afff:fed2:108%vx0 prefixlen 64 scopeid 0x1
ether 00:20:af:d2:01:08 |
リスト7 KAMEマシンのアドレス付与状況 |
#netstat -nr
(中略)
Internet6:
Destination Gateway Flags Netif
Expire
::1 ::1 UH lo0
fe80::%vx0/64 link#1 UC vx0
fe80::220:afff:fed2:108%vx0 00:20:af:d2:01:08 UHL lo0
fe80::2a0:24ff:fe56:9789%vx0 00:a0:24:56:97:89 UHLW vx0
fe80::%fxp0/64 link#2 UC fxp0
fe80::2d0:b7ff:fe13:c6b8%fxp0 00:d0:b7:13:c6:b8 UHL lo0
fe80::%lo0/64 fe80::1%lo0 Uc lo0
fe80::1%lo0 link#3 UHL lo0
ff01::/32 ::1 U lo0
ff02::%vx0/32 link#1 UC vx0
ff02::%fxp0/32 link#2 UC fxp0
ff02::%lo0/32 ::1 UC lo0 |
リスト8 KAMEマシンの経路情報 |
以下のコマンドを実行し、Router Advertisementパケットを受け取れるようにするとどうなるかを見てみましょう。
# sysctl -w net.inet6.ip6.accept_rtadv=1 |
インターフェイスに対してアドレスが付与されている状態をリスト9、経路が設定されている状態をリスト10に示します。
・IPv6アドレスが付与されている途中
vx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 61.197.226.211 netmask 0xfffffff8 broadcast 61.197.226.215
inet6 fe80::220:afff:fed2:108%vx0 prefixlen 64 scopeid 0x1
inet6 2001:2c0:418:1:220:afff:fed2:108 prefixlen 64 tentative
autoconf
ether 00:20:af:d2:01:08
・IPv6アドレスが付与された状態
vx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 61.197.226.211 netmask 0xfffffff8 broadcast 61.197.226.215
inet6 fe80::220:afff:fed2:108%vx0 prefixlen 64 scopeid 0x1
inet6 2001:2c0:418:1:220:afff:fed2:108 prefixlen 64 autoconf
ether 00:20:af:d2:01:08 |
リスト9 KAMEマシンのアドレス付与状況 |
#netstat -nr
(中略)
Internet6:
Destination Gateway Flags Netif
Expire
default fe80::2a0:24ff:fe56:9789%vx0 UGc vx0
::1 ::1 UH lo0
2001:2c0:418:1::/64 link#1 UC vx0
2001:2c0:418:1:220:afff:fed2:108 00:20:af:d2:01:08 UHL lo0
fe80::%vx0/64 link#1 UC vx0
fe80::220:afff:fed2:108%vx0 00:20:af:d2:01:08 UHL lo0
fe80::2a0:24ff:fe56:9789%vx0 00:a0:24:56:97:89 UHLW vx0
fe80::%fxp0/64 link#2 UC fxp0
fe80::2d0:b7ff:fe13:c6b8%fxp0 00:d0:b7:13:c6:b8 UHL lo0
fe80::%lo0/64 fe80::1%lo0 Uc lo0
fe80::1%lo0 link#3 UHL lo0
ff01::/32 ::1 U lo0
ff02::%vx0/32 link#1 UC vx0
ff02::%fxp0/32 link#2 UC fxp0
ff02::%lo0/32 ::1 UC lo0 |
リスト10 KAMEマシンの経路情報 |
リスト7では設定されていなかった、「2001:」で始まるアドレスがvx0に対して付与され、リスト8では設定されていなかったデフォルトルート(default)が設定されているのが分かります。
ここではデフォルトルートとして、リンクローカルアドレスであるfe80::2a0:24ff:fe56:9789%vx0が割り当てられていますが、これは基本的に同一リンク内で識別すべき性質のものであるため、特に問題にはなりません。
なお、Router Advertisementを使ってIPアドレスの自動割り当てを実施する場合、128bitsのIPアドレスのうち、上位64bitsはRouter Advertisementの内容に従って設定され、下位64bitsはイーサネットインターフェイスの持つMACアドレスを基にして、EUI64形式で設定されます。
■WindowsマシンのIPv6クライアント設定
radvdを稼働させた状態であれば、特に面倒な操作をしなくてもIPv6対応のクライアントを接続することが可能になります。
クライアントOSでIPv6に対応している例としては、Windows XPがあります。Windows XPでIPv6を利用するには、http://www.microsoft.com/japan/windowsxp/pro/techinfo/administration/ipv6/default.aspのとおりに作業します。
Windows 2000の場合は、IPv6 Technology Preview(http://msdn.microsoft.com/downloads/sdks/platform/tpipv6/start.asp)からダウンロード可能なhotfixを使用することになります。
ただし、このhotfixはSP1が適用されたWindows 2000環境での使用のみ想定しているため、SP2、SP3が適用された環境で使用する場合は、ダウンロードしたファイルを展開すると作成されるsetup.exeを、さらに、
として展開し、展開された内容に含まれるhotfix.infを書き換えます。
という行を探し、「256」を「512」(SP2環境)もしくは「768」(SP3環境)と書き換えてから、hotfix.exeを実行します。
Windows 2000用のIPv6スタックは、もともとPreview版であり、さらにMicrosoftが想定しているのとは異なる環境で稼働させるため、この方法を試すなら完全に自己責任となります(注)。
注:筆者の環境ではうまく動きましたが、ほかの環境でも動くという保証はありません。
hotfixが適用され、再起動&ログオンがうまくいったら、[ローカルエリア接続のプロパティ]ダイアログボックスで[インストール]ボタンをクリックし、「プロトコル」で「Microsoft IPv6 Protocol」を選択して[OK]ボタンを押します。
うまくいけば、画面3のようにIPv6プロトコルが追加されます。
画面3 IPv6プロトコルが追加された
設定の確認は、コマンドプロンプト上でipv6コマンドを実行することで行います(画面4)。実行結果をリスト11に示します。
画面4 ipv6コマンド
C:\>ipv6 if
Interface 4 (site 1): ローカル エリア接続
uses Neighbor Discovery
link-level address: 00-60-97-af-c8-fa
preferred address 2001:2c0:418:1:260:97ff:feaf:c8fa, 2591997s
/604797s (addrconf)
preferred address fe80::260:97ff:feaf:c8fa, infinite/infinite
multicast address ff02::1, 1 refs, not reportable
multicast address ff02::1:ffaf:c8fa, 2 refs, last reporter
link MTU 1500 (true link MTU 1500)
current hop limit 64
reachable time 38000ms (base 30000ms)
retransmission interval 1000ms
DAD transmits 1
Interface 3 (site 1): 6-over-4 Virtual Interface
uses Neighbor Discovery
link-level address: 61.197.226.212
preferred address fe80::3dc5:e2d4, infinite/infinite
multicast address ff02::1, 1 refs, not reportable
multicast address ff02::1:ffc5:e2d4, 1 refs, last reporter
link MTU 1280 (true link MTU 65515)
current hop limit 128
reachable time 30000ms (base 30000ms)
retransmission interval 1000ms
DAD transmits 1
Interface 2 (site 0): Tunnel Pseudo-Interface
does not use Neighbor Discovery
link-level address: 0.0.0.0
preferred address ::61.197.226.212, infinite/infinite
link MTU 1280 (true link MTU 65515)
current hop limit 128
reachable time 0ms (base 0ms)
retransmission interval 0ms
DAD transmits 0
Interface 1 (site 0): Loopback Pseudo-Interface
does not use Neighbor Discovery
link-level address:
preferred address ::1, infinite/infinite
link MTU 1500 (true link MTU 1500)
current hop limit 1
reachable time 0ms (base 0ms)
retransmission interval 0ms
DAD transmits 0
C:\>ipv6 nc
4: fe80::2a0:24ff:fe56:9789 00-a0-24-56-97-89 stale (router)
1: ::1 permanent
C:\>ipv6 rt
2001:2c0:418:1::/64 -> 4 pref 1 (lifetime 2591994s)
::/0 -> 4/fe80::2a0:24ff:fe56:9789 pref 16 (lifetime 24s)
::/96 -> 2 pref 0 (lifetime infinite) |
リスト11 IPv6コマンド実行結果 |