SSブログ

IPv6化 + DHCPv6 その4 (FreeBSD8.2R、2011/05/06) [FreeBSD]

FreeBSDでRAを広告するにはrtadvdを動かす必要がありますが、これはrc.confにipv6_gateway_enable="YES"の設定を入れた時点で自動的に有効になるようです。デフォルトの設定なんて後でコロコロ変わりますから、まずは明示的に指定することにします。
atom# cat /etc/rc.conf
rtadvd_enable="YES"
rtadvd_interfaces="re0"

rtadvdの設定は/etc/rtadvd.confで行います。その3で述べたように8ビットフラグのうち上位2ビットを1にする必要がありますから、指定値は10進数で192となります。分かりやすいですね。あと、有効な意味を持つのか分かりませんがIPv6はトンネルインタフェース経由となりますのでifconfigの結果からMTU1280を明示的に指定してみました。
atom# cat /etc/rtadvd.conf
default:\
        :raflags#192:mtu#1280:
re0:\
        :tc=default:

上記の設定でデーモンを再起動させると、Windows 7上でIPアドレス、DNSアドレスが無事もらえることが確認できました。Windows 7の動きとしては、インタフェースが有効になった時点でRSを送信、RAを受信後、RAの結果を以てDHCPv6 Solicitを送信するという分かりやすい動きでした。

次は、FreeBSDをクライアントとする場合です。こちらは骨が折れました。(まだ未完です)
まずクライアントでIPv6の設定を有効にします。rtsoldを有効にしないとRSを送信してくれないようです。また、DHCPv6クライアントが別途必要のようですので、今回はKAMEプロジェクトの実装である/usr/ports/net/dhcp6をインストールしています。
client# cat /etc/rc.conf
ipv6_enable="YES"
rtsold_enable="YES"
dhcp6c_enable="YES"

DHCPv6クライアント用に設定を記述する必要があり、ちゃんと書かないとDHCPv6 Solicitを送信してもサーバ側で無視され続けるという悲しい事態が発生してしまいました。
client# cat /usr/local/etc/dhcp6c.conf
interface wlan0 {
        send ia-na 1;
        request domain-name;
        request domain-name-servers;
};
id-assoc na 1 {
};

とりあえず、FreeBSDクライアントにおけるIPv6アドレスやDNSサーバ情報の払い出しが行われることは確認できました。ただ、本当にこれで良いのかどうか分からず、とりあえず判明している問題点を列挙します。
 ・Windows 7のようにRAとDHCPv6 Solicitが連動しない
 →RAの8ビットのフラグなんて見ていないように見える
 →インタフェースにRAとDHCPv6の双方で払い出されたIPアドレスが割当たってしまった
   (しかもDHCPv6側のIPv6アドレスは/128になってしまった)
 ・v6 DNSサーバ情報は受け取っているが、受け取るだけで何もしない
   (/etc/resolv.confに反映されない。これはスクリプトを書く必要がある?)

こんな感じでした。IPv6化についてはこれで一段落となります。要勉強ですね。
タグ:IPv6

共通テーマ:日記・雑感