RTA54iでIPv6

はじめに

YAMAHAのRTA54iが発表された時、各メディアが取り上げた特長が2つあったと記憶しています。1つはADSL(PPPoE)・CATVなどへの対応、もう1つはIPv6への正式対応です。ところが、前者はともかく、後者を実際に利用しているという記録は、webなどを見ていてもほとんど現れて来ません。
運の良いことに、うちの会社にはv6アドレスを持っており、v6 over v4トンネリングも可能な状況です。なので、これを利用してRTA54iでIPv6を利用することがどれほど簡単か(あるいは難しいのか)を実体験し、報告してみたいと思います。

まず初めに

接続方法

現時点で、IPv6の接続方法には「ネイティブ接続」「デュアルスタック接続」「トンネリング接続」の3種類があります。詳しい説明はここでは省略します。上にも書いた通り、ここではトンネリング接続の形態を選びます。

トンネリング先を探し出す

多くの人にとってIPv6を使うのに最も大きな障壁となっているのはここでしょう。上記のとおり、僕の場合は会社のマシンでトンネリングし、アドレスもここからもらうことにしました。
もしIPv6をもらうコネがない場合、固定IPv4アドレスを持っている場合のお勧めはWCNの実験サービスです。また、OCN、IIJなど一部プロバイダーではIPv6アドレスを配布するサービスもあるようです。(以上は2001年11月時点の記述)

RTA54iのファームのリビジョンアップ

http://www.rtpro.yamaha.co.jp/RTA54i/RevUpper.html より「IPv6対応版」と書かれたファームウェア(2001年11月現在の最新はRev.04.04.05)をダウンロードし、同ページの手順に従ってリビジョンアップします。

なお、以下の例に挙げるコマンドはRev.04.04.05に基づいています。リビジョンによりコマンドが異なる場合があるのでご注意下さい。

ネットワーク構成



                          IPv4 ネットワーク
        ------+----------------------------------+--------
              |                                  |
              | 61.115.117.105                   |
          +---+--+                               |
          |RTA54i|                               | 10.0.0.1
          +---+--+                         +-----+-----+
              | 192.168.0.1                |IPv6 router+---- IPv6 ネットワーク
              |                            +-----------+
              |                                 会社
 ----+------------------+---- 
     |                  |
 +---+---+         +----+----+
 |FreeBSD|         |WindowsXP|
 +-------+         +---------+
192.168.0.2        192.168.0.4
             自宅
会社側のIPv6ルータと自宅のRTA54iの間でトンネリングを設定します。会社側のIPv6ルータのIPアドレスは仮に10.0.0.1と表記していますが、実際はもちろんグローバルアドレスです。

トンネリング設定

RT54iの設定

上と同様、トンネル先のIPアドレスを10.0.0.1とします。

まずはフィルタリングを解除します。

# ip filter 200090 pass 10.0.0.1 * ipv6 * *
# pppoe use lan2
# ip pp secure filter in (既存のフィルタ設定) 200090
通常はWAN側にフィルタリングをガシガシと掛けているはずなので、これがないとトンネリング設定をしてもpingさえ通りません。

次に実際にトンネリングを作成します。

# tunnel select 3
# tunnel encapsulation ipip
# tunnel endpoint address 192.168.0.1 10.0.0.1
# tunnel enable 3

トンネルのRTA54i側のアドレスはLANインターフェースのアドレスを割り当てています。直感的には変な気分なのですが、ヤマハの解説によると、「PPインタフェースにアドレスを付与しないときや、 IPCPで動的にアドレスを取得するときには、 LAN(LAN1)インタフェースに設定したアドレスを設定してください」とのことなので、このような設定になっています。

どのように設定されたか確かめてみます。

# show ipv6 address
(中略)
TUNNEL[3] scope-id 39 [up]
 Received:    0 packets 0 octets
 Transmitted: 0 packets 0 octets

 リンクローカル   fe80::2a0:deff:fe0b:7598/64
 リンクローカル   ff02::1/64
 リンクローカル   ff02::2/64
ここで、scope-idは後ほど重要な役割をはたすので、39という数字をおぼえておきましょう。

動作確認

さて、pingを打ってみましょう。コマンド名は「ping」ではなくて「ping6」になります。双方でトンネルの設定が正しく行われていれば、この時点でping6に応答が帰ってきます。
この時点ではグローバルアドレスが振られていないので、ここではリンクローカルアドレスを利用します。(「リンクローカルアドレス」という概念はIPv6で導入されたので、概念がつかみにくいかと思います。が、ここでは説明を省略します)
# ping6 ff02::1%39
fe80::250:45ff:fe00:4844 (fe80::250:45ff:fe00:4844)から受信: シーケンス番号=0
fe80::250:45ff:fe00:4844 (fe80::250:45ff:fe00:4844)から受信: シーケンス番号=1
(以下略)
上の「ff02::1%39」というアドレスの意味ですが、前半の「ff02::1」はリンクローカルのマルチキャストアドレス、「%39」は上で確認したscope-idです。
fe80:で始まる見知らぬアドレスから応答が帰ってきますが、これがトンネリング先のリンクローカルアドレスです。

経路制御

デフォルトゲートをスタティックに設定するのみです。
# ipv6 route default gateway fe80::250:45ff:fe00:4844%39
デフォルトゲートはトンネリング先のリンクローカルアドレスにします。

グローバルアドレス割り当て

設定

うちには3ffe:8200:0:7::/64というグローバルアドレスを割り当ててもらっています。とりあえずLAN側I/Fに3ffe:8200:0:7::1を割り当ててみましょう。
# ipv6 lan1 address 3ffe:8200:0:7::1/64

動作確認

ここまで来ると、ようやく外部と通信ができます。試しにwww.kame.netにping6を打ってみましょう。
# ping6 3ffe:501:4819:2000:280:adff:fe71:81fc
3ffe:501:4819:2000:280:adff:fe71:81fc (3ffe:501:4819:2000:280:adff:fe71:81fc)か
ら受信: シーケンス番号=0
3ffe:501:4819:2000:280:adff:fe71:81fc (3ffe:501:4819:2000:280:adff:fe71:81fc)か
ら受信: シーケンス番号=1
(以下略)

家庭内LANもIPv6に

RTA54iのルータ広告の設定

IPv6の世界では、各ホストのIPアドレスは起動時に自動的に決定されます。IPv4のDHCPと見た目は同じようなものなのですが、DHCPサーバーではなくてルータがIPアドレスを決定する手助けをします。この機能は「ルータ広告機能」と呼ばれています。その設定を行います。
# ipv6 prefix 1 3ffe:8200:0:7::/64
# ipv6 lan1 rtadv send 1
DHCPと違い、ルータ広告ではネットワーク部の前半64ビットのみを各ホストに通知します。ホスト部の64ビットは各ホストで勝手に決めてね、ということです。(勝手に決めた後に重複チェックはちゃんと行うので、アドレスがぶつかる恐れはまずありません)

FreeBSDマシンの設定

FreeBSDは現時点ではインストール直後からIPv6が利用可能です。万が一そうでない場合は、以下の点をチェックしましょう。 ルータ広告が正しく動作していれば、グローバルなIPv6アドレスが設定されているはずです。
% ifconfig
vr0: flags=8843 mtu 1500
        inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::290:99ff:fe15:e6bf%vr0 prefixlen 64 scopeid 0x1
        inet6 3ffe:8200:0:7:290:99ff:fe15:e6bf prefixlen 64 autoconf
        ether 00:90:99:15:e6:bf
        media: Ethernet 100baseTX 
        status: active
(以下略)
3ffe:8200:0:7:290:99ff:fe15:e6bf というグローバルアドレスが割り当てられています。

アプリケーションも、portsで入れられるものはほとんどがIPv6対応になっています。詳しくは梅本さんの「IPv6対応アプリケーションを使おう」を参照してください。

WindowsXPマシンの設定

WindowsXPでは、IPv6は「研究・開発・テストのみに利用できる」と宣言されています。そのためか、インストール直後はIPv6が有効になっていません。有効にするためには、コマンドプロンプトから
C:\> ipv6 install
を実行します。
実際にIPアドレスが振られたか確認してみましょう。
C:\>ipv6 if
Interface 4: Ethernet: ローカル エリア接続
  uses Neighbor Discovery
  uses Router Discovery
  link-layer address: 00-90-99-17-72-65
    preferred global 3ffe:8200:0:7:9db8:48cf:b860:640b, life 6d18h42m37s/18h40m1
6s (anonymous)
    preferred global 3ffe:8200:0:7:290:99ff:fe17:7265, life 29d23h58m5s/6d23h58m
5s (public)
    preferred link-local fe80::290:99ff:fe17:7265, life infinite
    multicast interface-local ff01::1, 1 refs, not reportable
    multicast link-local ff02::1, 1 refs, not reportable
    multicast link-local ff02::1:ff17:7265, 2 refs, last reporter
    multicast link-local ff02::1:ff60:640b, 1 refs, last reporter
  link MTU 1500 (true link MTU 1500)
  current hop limit 64
  reachable time 24500ms (base 30000ms)
  retransmission interval 1000ms
(以下略)
3ffe:8200:0:7:9db8:48cf:b860:640とb3ffe:8200:0:7:290:99ff:fe17:7265の2つがついていますね。anonymousとpublicの違いはよく判りません。

アプリケーションについては、ブラウザはIE6がIPv6対応になっています。IPv6のためだけにIEを立ち上げなければいけないのは非常に不愉快ですが、Windows用Mozillaが未対応なので仕方ありません。(;_;)
それ以外のフリーソフトは、加藤さんのページでパッチなどが公開されています。

ToDo

フィルタリング設定 〜「IPv6はグローバルアドレスだから危険」という迷信を解くために

(長いサブタイトルだ(^^;)

参考文献&リンク


目次

yossy@hodogaya.org