CBUG 6th meeting / 2002年11月4日
小野寛生
でも、
現在の接続環境のまま楽にできるならやってみてもいいな、と思っているんですが…
梅本さんからの指摘:
現在の KAME 実装では、
自分についていない IP address について 6to4 アドレスを振れないので、
例えば NAPT している broadband router の内側にある private address しかついていない host で 6to4 することは出来ない。
可能にする patch は存在する。
以後、基本的に FreeBSD の例です。
下記の構成を仮定します。
- [6to4 router] -- ep0 [FreeBSD box] ed0 -- 内部
だけです。
/etc/rc.conf で以下を指定します。
ipv6_enable="YES" ipv6_gateway_enable="YES" rtadvd_enable="YES" rtadvd_interfaces="ed0" stf_network_ipv6_interface="ed0" stf_network_ipv6_slaid="1" # IPv6 Site Level Aggregator for stf0
やりかたによっては 6to4 リレールータを指定してもよいでしょう。
ipv6_defaultrouter="2002:caff:2d05::1"
新たに取得した IPv4 アドレスを設定した後、 dhclient は /etc/dhclient-exit-hooks という script を呼びます。 (/sbin/dhclient.script 参照)。
そこで、IPv4 アドレスが変更されていた場合は、6to4 の設定をしなおすようにすれば良いわけです。 手順としては
if [ "x${new_ip_address}" != "x${old_ip_address}" ]; then /usr/local/sbin/6to4.sh ${new_ip_address} 2002:caff:2d05::1 fi
使い方: 6to4.sh ipv4addr ipv6_defaultrouter
現在の制限: local interface を 1つしか想定していない。
rc.conf, rc.network6 を実行して各種設定を反映する。- stf interface の設定。
# stf interface の作成 ifconfig stf0 create >/dev/null 2>&1 # 古いアドレスの削除 oldaddrs=`ifconfig stf0 inet6 | awk '/inet6 2002:/ {print $2}'` for oaddr in ${oldaddrs}; do ifconfig stf0 inet6 ${oaddr} -alias done # 6to4 interface の設定を行なう関数。rc.network6 で定義されている。 network6_stf_setup
IPv6 default router の設定
route add -inet6 default ${ipv6_defaultrouter}
local interface の設定
# 古いアドレスの削除 oldaddrs=`ifconfig ${stf_network_ipv6_interface} inet6 \ | awk '/inet6 2002:/ {print $2}'` for oaddr in ${oldaddrs}; do ifconfig ${stf_network_ipv6_interface} inet6 ${oaddr} -alias done # rc.network6 で定義されているので、詳しくはそちらを参照。 network6_interface_setup ${stf_network_ipv6_interface}
ppp.linkup で以下のように設定可能。(梅本さんコメント)
!/usr/local/sbin/6to4.sh MYADDR 2002:caff:2d05::1
ありがとうございました。