IPv6の設定 (FreeBSD)

投稿日:

今朝、tobyにログインしてifconfigしたらem0にIPv6の一時アドレスがついていないことに気づいて、いろいろ調べた。

/etc/network.subrを見るとnetwork6_interface_setup()の定義のところで、

       if [ ${rtsol_available} = yes -a -n "${rtsol_interfaces}" ]; then
                # Act as endhost - automatically configured.
                # You can configure only single interface, as
                # specification assumes that autoconfigured host has
                # single interface only.
                sysctl net.inet6.ip6.accept_rtadv=1
                set ${rtsol_interfaces}
                ifconfig $1 up
                if ! checkyesno rtsold_enable; then
                        rtsol ${rtsol_flags} $1
                fi
        fi

とあるので、rtsol_available=yesになるインターフェースじゃないとaccept_rtadv=1にならないらしい。では、どうしたらrtsol_available=yesになるのかさかのぼってみてみると、rtsol_availableを触るのは3か所。

1か所目

        case ${ipv6_gateway_enable} in
        [Yy][Ee][Ss])
                rtsol_available=no
                ;;
        *)
                rtsol_available=yes
                ;;
        esac

ここは、ipv6_gateway_enable=noにしているので、rtsol_available=yesになっているはず。

2か所目

                prefix=`get_if_var $i ipv6_prefix_IF`
                if [ -n "${prefix}" ]; then
                        rtsol_available=no
                        rtsol_interface=no
                        laddr=`network6_getladdr $i`
                        hostid=`expr "${laddr}" : 'fe80::\(.*\)%\(.*\)'`

ここは実行してみたけど、prefixは空文字列になっていて、test -n はFalseになって、rtsol_available=yesは維持。

3か所目

               ipv6_ifconfig=`get_if_var $i ipv6_ifconfig_IF`
                if [ -n "${ipv6_ifconfig}" ]; then
                        rtsol_available=no
                        rtsol_interface=no
                        ifconfig $i inet6 ${ipv6_ifconfig} alias
                fi

ここはアドレスがついてしまっている。なので test -nがTrueになって、rtsol_available=noになってしまっている模様。

ん?と思って、rc.confを見たら、サーバ待ち受けようにipv6アドレスを付ける設定のaliasを消してしまって、メインのアドレスとして設定する状態になってしまっていたようで、これが怪しそうなので、aliasになるように変更してリブートしてみた。

するとちゃんと一時アドレスがついて、デフォルトルートもちゃんとつくようになった。めでたしめでたし。

というか、rc.confの ipv6_ifconfig_em0 と ipv6_ifconfig_em0_alias0 の違いがやっとわかった。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です