連載
» 2003年02月11日 00時00分 公開

Linuxで作るIPv6ネットワーク環境(3):IPv6ネットワーク構築とパケットフィルタリング (2/3)

[みやもとくにお,@IT]

IPv6環境におけるネットワークの手動設定

 ここまでの手順で、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環境におけるネットワークの自動設定

 手動で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を、さらに、

C:\>setup.exe -x

として展開し、展開された内容に含まれるhotfix.infを書き換えます。

NtServicePackVersion=256

という行を探し、「256」を「512」(SP2環境)もしくは「768」(SP3環境)と書き換えてから、hotfix.exeを実行します。

 Windows 2000用のIPv6スタックは、もともとPreview版であり、さらにMicrosoftが想定しているのとは異なる環境で稼働させるため、この方法を試すなら完全に自己責任となります()。

注:筆者の環境ではうまく動きましたが、ほかの環境でも動くという保証はありません。


 hotfixが適用され、再起動&ログオンがうまくいったら、[ローカルエリア接続のプロパティ]ダイアログボックスで[インストール]ボタンをクリックし、「プロトコル」で「Microsoft IPv6 Protocol」を選択して[OK]ボタンを押します。

 うまくいけば、画面3のようにIPv6プロトコルが追加されます。

画面3 IPv6プロトコルが追加された 画面3 IPv6プロトコルが追加された

 設定の確認は、コマンドプロンプト上でipv6コマンドを実行することで行います(画面4)。実行結果をリスト11に示します。

画面4 ipv6コマンド 画面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コマンド実行結果

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。