OCNのIPv6サービスによりIPv6 reachableになりました。
うちはフレッツ光ネクストに対応していないので、はやりのネイティブIPv6サービスが使えません。
そこでOCNで提供しているL2TPによるIPv6トンネリングサービスを申込利用しました。
IPv6のトンネリングにはDebian(lenny)化したOpenblocks266を用いました。
OCNでは固定プレフィックスと、動的プレフィックスの二つのprefixlen 64のアドレスが利用可能(同時にも可能らしい)です。
それぞれ接続するサーバが異なります。今回は固定プレフィックスのみで利用することにします。
2011年 11月 5(土曜日)
OBS266でOCN IPv6へ接続
ハードウェア: Openblocks266 128M/16
今回利用したツール
OBS266用IPv6対応カーネル
まずはOBS266用のIPv6対応カーネルを準備します。
http://www.plathome.co.jp/support/labo/obs266/
から
OpenBlockS266/128/16R 用 IPv6 対応コマンド強化版
というファームを利用します。
手っ取り早くIPv6対応のファームということでこれを利用しますが、ip6tablesの関係上、最終的には違うカーネルを利用します。
リブートするとIPv6対応カーネルとなっています。
ifconfigやip addrでIPv6リンクローカルアドレスがついていればOKです。
IPv6用カーネルパラメタの設定
今回はOBS266をIPv6ルータとして利用するのでforwardingを有効にして、Router Advertisementを受信しないようにします。
/etc/sysctl.confに以下を追加します。
設定を反映させるために以下を実行します。
xl2tpd
まずはOCNとのトンネルを生成するためにxl2tpdを利用します。
xl2tpd自体はaptitudeでインストールしたものを利用します。
設定は以下のようにします。
/etc/xl2tpd/xl2tpd.confを以下のようにします。
/etc/ppp/chap-secrets に以下を追加します。
ここまで設定できたらxl2tpdを起動します。
これでxl2tpdは起動されましたが、OCNへ接続するためにはxl2tpdへコントロールメッセージを送る必要があります。
うまくいくとppp1が生成されます。(ppp0はプロバイダへのIPv4 PPPoE接続のために使用)
DHCPv6-PD - wide-dhcpv6-client
OCNではDHCPv6 Prefix DelegationでIPv6プレフィックスを配布しています。
そこでDHCPv6-PD対応のクライアントであるwide-dhcpv6-clientを利用します。
wide-dhcpv6-clientはaptitudeでインストールしたものを利用します。
設定は以下です。
/etc/wide-dhcpv6/dhcp6c.conf
prefix-interfaceにはローカル側のネットワークインターフェイスを指定します。
とすると、eth0にIPv6グローバルアドレスがついているのが確認できます。
つぎにルーティングですが、OCN側からRouter Advertisementが流れているのでこれを受信すればデフォルトのエントリができるのですが、
カーネルパラメタでipv6 forwardingを有効にしているとaccept_raを1にしてもRouter Advertisementを受信することができないようです。
そこで、今回は手動でデフォルトエントリを追加します。
OBS266上でping6でkameにつながることを確認します。
Router Advertise - radvd
つぎにOBS266がルータとして機能するようにradvdを使ってデフォルト経路をローカルのネットワークに広報します。
設定は/etc/radvd.confです。
eth0につながっている他のマシンからping6等で外部ネットワークに接続できることを確認します。
起動時設定
L2TPのocn6への接続と、デフォルトルーティングエントリの追加を行うために、起動スクリプトを生成します。
http://hiro-system.blog.ocn.ne.jp/blog/2010/11/ipv6_8a2f.htmlのものを一部変更して利用します。
/etc/init.d/ocn6
以下を実行して設定完了です。
Firewall - ip6tables
次にip6tablesでfirewallをつくるのですが、ipv6のconnection trackingがplathome提供のカーネル2.6.16では行えないためカーネルを変更する必要があります。
長くなるので別エントリとします。
http://blog.yellowback.net/archives/532-20111107.html
http://blog.yellowback.net/archives/533-20111107.html
今回利用したツール
- OBS266用IPv6対応カーネル
- IPv6用カーネルパラメタ設定 - sysctl
- L2TP - xl2tpd
- DHCPv6-PD - wide-dhcpv6-client
- Router Advertise - radvd
- 起動時設定
- Firewall - ip6tables (次回)
OBS266用IPv6対応カーネル
まずはOBS266用のIPv6対応カーネルを準備します。
http://www.plathome.co.jp/support/labo/obs266/
から
OpenBlockS266/128/16R 用 IPv6 対応コマンド強化版
というファームを利用します。
手っ取り早くIPv6対応のファームということでこれを利用しますが、ip6tablesの関係上、最終的には違うカーネルを利用します。
# flashcfg -f zImage.initrd.treeboot.huge-product
リブートするとIPv6対応カーネルとなっています。
ifconfigやip addrでIPv6リンクローカルアドレスがついていればOKです。
IPv6用カーネルパラメタの設定
今回はOBS266をIPv6ルータとして利用するのでforwardingを有効にして、Router Advertisementを受信しないようにします。
/etc/sysctl.confに以下を追加します。
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.accept_ra=1
net.ipv6.conf.all.accept_ra=1
設定を反映させるために以下を実行します。
# sysctl -p /etc/sysctl.conf
xl2tpd
まずはOCNとのトンネルを生成するためにxl2tpdを利用します。
xl2tpd自体はaptitudeでインストールしたものを利用します。
# aptitude install xl2tpd
設定は以下のようにします。
/etc/xl2tpd/xl2tpd.confを以下のようにします。
[global]
auth file = /etc/ppp/chap-secrets
[lac ocn6]
lns = YYY.ocn.ne.jp (固定プレフィックス用接続サーバ)
hostname = XXXXXXX@xxx.ocn.ne.jp (認証ID)
ppp debug = yes
pppoptfile = /etc/ppp/peers/ocn6
length bit = yes
require chap = yes
refuse pap = yes
redial = yes
redial timeout = 10
max redials = 6
require authentication = yes
/etc/ppp/chap-secrets に以下を追加します。
"XXXXXXX@xxx.ocn.ne.jp" * "認証パスワード"
ここまで設定できたらxl2tpdを起動します。
# /etc/init.d/xl2tpd start
これでxl2tpdは起動されましたが、OCNへ接続するためにはxl2tpdへコントロールメッセージを送る必要があります。
# echo 'c ocn6' > /var/run/xl2tpd/l2tp-control
うまくいくとppp1が生成されます。(ppp0はプロバイダへのIPv4 PPPoE接続のために使用)
DHCPv6-PD - wide-dhcpv6-client
OCNではDHCPv6 Prefix DelegationでIPv6プレフィックスを配布しています。
そこでDHCPv6-PD対応のクライアントであるwide-dhcpv6-clientを利用します。
wide-dhcpv6-clientはaptitudeでインストールしたものを利用します。
# aptitude install wide-dhcpv6-client
設定は以下です。
/etc/wide-dhcpv6/dhcp6c.conf
interface ppp1 {
send ia-pd 0;
};
id-assoc pd 0{
prefix-interface eth0 {
sla-id 1;
sla-len 0;
};
};
prefix-interfaceにはローカル側のネットワークインターフェイスを指定します。
# /etc/init.d/wide-dhcpv6-client start
とすると、eth0にIPv6グローバルアドレスがついているのが確認できます。
# ifconfig eth0|grep inet6
inet6 addr: 2001:XXXX:YYYY:ZZZZ:vvvv:wwww:xxxx:yyyy/64 Scope:Global
つぎにルーティングですが、OCN側からRouter Advertisementが流れているのでこれを受信すればデフォルトのエントリができるのですが、
カーネルパラメタでipv6 forwardingを有効にしているとaccept_raを1にしてもRouter Advertisementを受信することができないようです。
そこで、今回は手動でデフォルトエントリを追加します。
# route -A inet6 add ::/0 dev ppp1
OBS266上でping6でkameにつながることを確認します。
# ping6 www.kame.net
Router Advertise - radvd
つぎにOBS266がルータとして機能するようにradvdを使ってデフォルト経路をローカルのネットワークに広報します。
# aptitude install radvd
設定は/etc/radvd.confです。
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix 2001:XXXX:YYYY:ZZZZ::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
eth0につながっている他のマシンからping6等で外部ネットワークに接続できることを確認します。
起動時設定
L2TPのocn6への接続と、デフォルトルーティングエントリの追加を行うために、起動スクリプトを生成します。
http://hiro-system.blog.ocn.ne.jp/blog/2010/11/ipv6_8a2f.htmlのものを一部変更して利用します。
/etc/init.d/ocn6
# !/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PPP=ppp1
DHCP6CBIN=/usr/sbin/dhcp6c
DHCP6CCFG=/etc/wide-dhcpv6/dhcp6c.conf
DHCP6CPID=/var/run/dhcp6c.pid
OPTIONS="-c $DHCP6CCFG"
L2TPPEER=ocn6
NAME="dhcp6c"
DESC="WIDE DHCPv6 client"
. /lib/lsb/init-functions
test -x $DHCP6CBIN || exit 0
if [ ! -f /etc/default/wide-dhcpv6-client ]; then
log_failure_msg \
"/etc/default/wide-dhcpv6-client does not exist! - Aborting..."
log_failure_msg \
"Run 'dpkg-reconfigure wide-dhcpv6-client' to fix the problem."
exit 3
fi
. /etc/default/wide-dhcpv6-client
[ "X$INTERFACES" != "X" ] || exit 0
# single arg is -v for messages, -q for none
check_status()
{
if [ ! -r "$DHCP6CPID" ]; then
test "$1" != -v || echo "$NAME is not running."
return 3
fi
if read pid < "$DHCP6CPID" && ps -p "$pid" > /dev/null 2>&1; then
test "$1" != -v || echo "$NAME is running."
return 0
else
test "$1" != -v || echo "$NAME is not running but $DHCP6CPID exists."
return 1
fi
}
case "$1" in
start)
log_daemon_msg "Starting PPP/L2TP IPv6-init"
echo "c $L2TPPEER" > /var/run/xl2tpd/l2tp-control
COUNTER=0
while [ $COUNTER -lt 10 ]; do
if [ -n "`ifconfig | grep $PPP`" ]; then
break
fi
sleep 1
let COUNTER=COUNTER+1
done
start-stop-daemon --start --quiet --pidfile $DHCP6CPID --exec $DHCP6CBIN -- $OPTIONS $PPP
sleep 3
route -A inet6 add ::/0 dev $PPP
if check_status -q; then
log_end_msg 0
else
log_end_msg 1
exit 1
fi
;;
stop)
start-stop-daemon --stop --quiet --pidfile $DHCP6CPID
sleep 3
log_daemon_msg "Stopping PPP/L2TP IPv6-init"
echo "d $L2TPPEER" > /var/run/xl2tpd/l2tp-control
log_end_msg $?
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
if [ "$?" != "0" ]; then
exit 1
fi
;;
status)
echo "Status of $NAME: "
check_status -v
exit "$?"
;;
*)
echo "Usage: $0 (start|stop|restart|force-reload|status)"
exit 1
esac
以下を実行して設定完了です。
# chmod +x /etc/init.d/ocn6
# update-rc.d ocn6 start 21 2 3 4 5 . stop 19 0 1 6 .
Firewall - ip6tables
次にip6tablesでfirewallをつくるのですが、ipv6のconnection trackingがplathome提供のカーネル2.6.16では行えないためカーネルを変更する必要があります。
長くなるので別エントリとします。
http://blog.yellowback.net/archives/532-20111107.html
http://blog.yellowback.net/archives/533-20111107.html
トラックバック
このエントリーのトラックバック URI を指定する