Aterm WR8500N を購入した 。と言うのは前回のブログに書きました。こいつには IPv6 ブリッジ機能があって、フレッツ・スクウェア v6 の IPv6 アドレスが rtsol で取得できる。WindowsXP もフレッツ・スクウェアの IPv6 アドレスが取得できる。
けど、うちにはグローバルな IPv6 も存在するのでこの時点で一つのノードは二つの prefix を持つことになる。
自宅にはグローバル IPv6 のルータが存在して、これは dtcpc で /54 を持ってて、家の中では /64 を利用している。でもって、WR8500N で IPv6 ブリッジ機を有効にするとヒサンな目に遭う。
何が悲惨かと言うと、IPv6 の default gateway がフレッツ・スクウェア v6 のアドレスに設定されてしまって、全ての IPv6 パケットは NTT の閉域網に流れてしまう。
rtsol を実行したときに rtadvd が二か所で動いているとどう言うルールで default gateway を乗っ取るのだろう?どちらかメインのほうを決めることとか出来ないのだろうか・・。
実はできる。自宅の IPv6 ルータで起動している rtadvd の設定ファイルである /etc/rtadvd.conf において raflags の 3,4bit 目を 01 にすると自宅の IPv6 サーバの rtadvd のほうが優先順位が高くなり、default gateway として設定される。ただ、NTT 側の rtadvd に相当するものが同じような設定をしていた場合にはどっちも優先順位が一緒なのでまたまた泥沼にはまるけど;-|。
しかし、ルーティングの設定については FreeBSD において /etc/rc.conf で設定ができるみたいです。
以下は例ですが、ipv6_defaultrouter でグローバル IPv6 網宛ての default gateway を設定して、フレッツ・スクウェア v6 は /32 で static route にしましょう。と言う感じです。ともにリンクローカルアドレスを gateway として設定します。
|
うちの環境ではフレッツ・スクウェア v6 の IPv6 アドレスは 2001:c90:609:42a6/64 が降ってきますが、NTT 東日本側では 2001:c90::/32 が利用されているため、その static route を設定します。
さて、これではイマイチ動作が見えないので、手動でルートを設定するスクリプトを書いてみました。こんな感じ。
http://www.icmpv6.org/Prog/IPv6Route.sh.sample
まずは詳細についてですが、上の部分でネットワークの設定を行います。
この二つの設定は v6tunaddr でグローバル IPv6、v6tunprefix はその prefixlength。fletsaddr はフレッツ・スクウェア v6 の アドレスで fletsprefix はその prefixlength。
|
リンクローカルアドレスに必要な NIC 名 は netstat から取得します。
以下は gateway となるリンクローカルアドレスの設定。v6tungw はグローバル IPv6 の gateway、下は NTT 側。
|
これらの値を自分の家の設定にして、後はコマンドを実行するだけ。そーすると、route コマンドをバババと打ってくれてネットワークの到達性を確保してくれます。
普段から ra に慣れていると、IPv6 の route コマンドって難しいよねぇ。FreeBSD と Linux では全然違うし、MacOSX Leopard では “/32” とかが使えないので -prefixlen と指定しなければならなかったり。
と、言うことで上記のコマンドは FreeBSD と MacOSX Leopard で動作確認済みです。実行後は ping6 してちゃんと到達で来ているかも確認します;-)。
さてと。route の設定が終わってから初めて ip6addrctl のお話に移れるわけだねぇ。ソースアドレスセレクションについてですが、詳細は以下の URL に詳しいと思います。なので僕は書きましぇん;-)。
http://karl0204.at.webry.info/200804/article_44.html
と、言うことで、グローバル IPv6 を持っている人が、NTT フレッツの IPv6 をブリッジする BB ルータを手に入れたとき、一番気にする必要があるのは route だと言うとこですねぇ;-)。