home FreeBSD Bike Misc Memorandum About

IPv6 over PPP over TCPでIPv6Reachable!

システムの条件

 当然OSがIPv6readyになっている必要があります。FreeBSDではかなり昔から(4-Releaseのどこか)で対応していますからとりあえずの条件は満たしています。それにプラスして、この接続方法ではPPPがIPv6Readyになっている必要があります。5.0-ReleaseからはKAMEからのソースのマージでPPPもIPv6Readyになっているはずなので手をかける必要がありません。IPv6ReadyなPPPがないときはなんとか・ドット・コムでpackageを配布しているので(FreeBSD用です)それを利用します。

申し込み

 http://www.nantoka.com/tun6/をみて申し込みをしましょう。管理するkeiさん個人宛に申し込みのメイルを送ります。tun6-mlへも入ります。

設定

 PPPで接続なので、もちろん/etc/ppp.confで設定をします。先頭のスペースを忘れないようにしましょう。

tun6:
 set escape 0xff
 set device ***.***.***.***:6669
 set dial
 set timeout 0 0
 set log Phase Chat Connect hdlc LCP IPCP CCP tun ID0
 set authname tun****
 set authkey ******
 enable ipv6cp
 disable ipcp

こんな感じです。deviceのところにはなんとか.COMから届いたメイルに書いてあるトンネル接続先IPアドレス、authname、authkeyには同じく届いたメイルに書いてあるものを記入します。

接続

 pppで接続します。こんな感じです。

bell@leon# ppp tun6
Working in interactive mode
Using interface: tun0
ppp ON leon> open
ppp ON leon>
Ppp ON leon>
PPp ON leon>
PPp ON leon>

IPv4アドレスのネゴシエーションはしないので、PPpまでしか変化しませんがこれでOKです。

経路設定

/sbin/route add -inet6 default ::1 -ifp tun0

という感じで経路を接続したトンネルデバイス(ここではtun0)に向けます。-ifpオプションは古いFreeBSDだとありません。これでOKなはず。ping6して見ましょう。

確認

bell@leon> ping6 ff02::1%tun0
PING6(56=40+8+8 bytes) fe80::290:99ff:fe4b:c507%tun0 --> ff02::1%tun0
16 bytes from fe80::290:99ff:fe4b:c507%tun0, icmp_seq=0 hlim=64 time=1.12 ms
16 bytes from fe80::3237:6231%tun0, icmp_seq=0 hlim=64 time=78.943 ms(DUP!)
16 bytes from fe80::290:99ff:fe4b:c507%tun0, icmp_seq=1 hlim=64 time=0.75 ms
16 bytes from fe80::3237:6231%tun0, icmp_seq=1 hlim=64 time=77.61 ms(DUP!)
16 bytes from fe80::290:99ff:fe4b:c507%tun0, icmp_seq=2 hlim=64 time=0.759 ms
16 bytes from fe80::3237:6231%tun0, icmp_seq=2 hlim=64 time=77.638 ms(DUP!)
16 bytes from fe80::290:99ff:fe4b:c507%tun0, icmp_seq=3 hlim=64 time=0.787 ms
16 bytes from fe80::3237:6231%tun0, icmp_seq=3 hlim=64 time=76.947 ms(DUP!)
^C
--- ff02::1%tun0 ping6 statistics ---
4 packets transmitted, 4 packets received, +4 duplicates, 0% packet loss
round-trip min/avg/max/std-dev = 0.750/39.319/78.943/38.469 ms

はいOK。-wオプションをつけると名前を返します。

bell@leon> ping6 -w ff02::1%tun0
PING6(72=40+8+24 bytes) fe80::290:99ff:fe4b:c507%tun0 --> ff02::1%tun0
37 bytes from fe80::290:99ff:fe4b:c507%tun0: leon.f-bell.net.
39 bytes from fe80::3237:6231%tun0: yuina.nanet.co.jp.
37 bytes from fe80::290:99ff:fe4b:c507%tun0: leon.f-bell.net.
39 bytes from fe80::3237:6231%tun0: yuina.nanet.co.jp.
^C
--- ff02::1%tun0 ping6 statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss

仕上げ

 グローバルなアドレスがついたのですからIPv4と同じようにフィルタリングをしないとだめです。ip6fwをipfwと同じように設定します。また、再起動時に自動的にトンネルを掘るように/usr/local/etc/rc.d/ipv6.shとして以下のスクリプトを走らせています。PPPですので/etc/rc.confからもこの辺は適切にできるでしょう。(これ、あまり配慮していないスクリプトなのでそのまま使うのはお勧めしません)

#!/bin/sh
if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
echo "$0: Cannot determine the PREFIX" >&2
exit 1
fi
case "$1" in
start)
/usr/sbin/ppp -background tun6 && echo -n ' PPP IPv6'
/bin/sleep 3
/sbin/route flush -inet6
/bin/sleep 1
/sbin/route add -inet6 default ::1 -ifp tun0
;;
stop)
killall ppp
/sbin/route flush -inet6
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0

説明

FreeBSD 5.0-Release-p3

F-BELL.NETはなんとか・ドット・コムのIPv6トンネル接続実験に参加しています。

動的にアドレスが変わるし、プロバイダもIPv6接続に対応していない場合、 Freenet6や、 IMASY等のダイナミックトンネルの技術を使うと、トンネルを作ることができるようです。しかし、この実現方法では、protocol 41(IPv6)を通す必要があります。私の利用しているADSLのルータモデムは通してくれません。

そこで、IPv6 over PPP over TCPを用いてIPv6の接続環境を得ます。この説明はなんとか・ドット・コムのIPv6トンネル接続実験にのみ適用できます。

2003.02.26

Creative Commons License
This work is licensed under a Creative Commons License.