梅本です。

>>> Thu, 9 Jun 2011 01:42:41 +0900 の刻に「kikuchan」、すなわち
>>> kikuc...@uranus.dti.ne.jp 氏曰く

kikuchan> せっかくの World IPv6 Day なので、6to4 で繋げてみたのですが
kikuchan> 亀が踊ってくれませんでした。

          略

kikuchan> ところが、この policy table が存在すると なぜか getaddrinfo() が
kikuchan> 常にIPv4アドレスを先に返すようです...。

デフォルトでは、ipv6_enable="YES" の場合、RFC 3484 にあるポリシテーブル
をローディングします。このルールは、6to4 アドレスを他の IPv6 アドレスと
区別しており、6to4 同士の通信でなければ、IPv4 の方が優先されます。これ
は、6to4 は IPv4 上のトンネルであり、IPv4 で通信できるなら積極的に使う
メリットがないからだと思っています。

kikuchan> 代わりに、ip6addrctl flush を実行し、policy table の中身をクリアすると
kikuchan> reorder() でソートが行われないので、IPv6アドレスが先に返るようになりました。

これは、ポリシテーブルがない場合は、単に IPv6 を優先するルールとなり、
6to4 を特別視しなくなるためです。

kikuchan> 毎回 ip6addrctl flush すれば踊る亀を拝むことができるのですが、
kikuchan> IPv6用の policy table が存在すると IPv4 が優先されてしまう
kikuchan> というのは、何か釈然としません。

6to4 を特別視したくないのなら、

        /usr/src/usr.sbin/ip6addrctl/ip6addrctl.conf.sample

を /etc/ip6addrctl.conf としてコピーし、

        2002::/16             30     2 

の行を削除するかコメントアウトし、

        service ip6addrctl restart

すれば良いでしょう。

-- 
梅本 肇 @ インターネット互助会横浜  http://www.imasy.org/~ume/
u...@mahoroba.org  ume@{,jp.}FreeBSD.org
プログラムは書いた人の意図ではなく書かれた通り動く  I hate Modula-3 :-)

メールによる返信