本項では、FreeBSD で IPv6 を使う際の設定例を示す。FreeBSD は、4.x Release の kernel から、標準で IPv6 スタックが含まれるようになった。したがって、そこそこ新しい FreeBSD で IPv6 ネットワークに参加するのは、極めて簡単だ。当方では gif は使っていないので、単なる LAN に繋がれたホストとしての設定だ。また、例中のインタフェースとしては、fxp0 を使用している。
IPv6 アドレスをルータ広告で決めるときには、以下のように、IPv6 を使う旨と、使用するインタフェースを /etc/rc.conf に指定し、再起動するだけでいい。アドレスなどは、起動時にルータ広告で勝手に決まり、晴れて通信可能となる。
再起動しないでやりたい場合は、ルータ広告の受け入れの有無を決める変数 net.inet6.ip6.accept_rtadv を sysctl で 1 設定し、rtsol を使う。
アドレスの決定などが正しく行われれば、ifconfig で以下のように表示される。ルータ広告でもらったプレフィックスと Ethernet の MAC アドレスの組み合わせで、2001:2a0:204:1000:210:dcff:fe52:3f27 というアドレスが自動生成されているのが分かるだろうか。
IPv6 アドレスをルータ広告で設定せず、手動で決めたい場合は、/etc/rc.conf に以下のような設定を書き加える。
これで再起動すればいいが、手動でやる場合は、こんな感じ。
要注意点として、ifconfig では、IPv6 アドレスであることを明示するために inet6 を指定し、必ず alias を後ろに付けなければならない。IPv6 では、リンクローカルなど、複数のアドレスが設定されるからだ。不要になったアドレスは -alias で削除する。また、route で IPv6 の静的経路を設定するときには -inet6 オプションを付けなければならない。これが出来たら、ifconfig の表示は以下のようになる。
これで、取り敢えず telnet ftp といった、主要なアプリケーションは IPv6 で使えるようになっているはずだ。ping6 traceroute6 といった IPv6 診断用コマンドも使えるはずである。
inetd 経由で叩かれるサービスについては、/etc/inetd.conf において、設定が必要だ。たとえば telnet と ftp を IPv4 IPv6 の双方で受けたい場合は、以下のように設定する。
ほかのアプリケーションについては、ここでは取り上げない。
ところで、ifconfig の中に出てきている fe80::210:dcff:fe52:3f27%fxp0 というアドレスは、リンクローカルアドレスといって、そのネットワークセグメント内だけで有効なアドレスだ。fe80 で始まり、IPv6 を喋るあらゆるインタフェースに自動的に付与される。普通の通信ではあまり使わないが、同じ LAN の中にあるホストとであれば、このアドレスだけで通信することも可能である。
しかし、複数のインタフェースを持っているホストでは、fe80::/64 という同一のネットワークアドレスを持つネットワークが、インタフェース数と同じ数だけ見えていることになるため、リンクローカルアドレスでほかのホストと通信をする際には、どのインタフェースのそれを問題にしているのかが確定しない。それを明らかにするのが、アドレスのケツに付いている %fxp0 というやつだ。スコープ ID といい、% をデリミタとして FreeBSD の実装ではインタフェース名になる。
そんなわけで、リンクローカルアドレスを使うときには、アドレスの後ろに スコープ ID を付けなければならない。なお、省略すると %lo0(ループバックインタフェース)が仮定されるようだ。