EdgeRouter XでNTTのDS-Lite

家の回線は NTT フレッツなんだけど、ふと使っているプロバイダから DS-Lite に対応したプランのお知らせが来た。DS-Lite と聞いてゲーム機の方を思い浮かべるくらいに IPv6 初心者だったけど、いい機会だしやってみようと思って IPv6 始めてみた。家のルータは EdgeRouter X にしていたのだけど、特に変わったことをしていなかったので何かやってみたかった。

結果としては、DS-Lite での IPv4=>IPv6 へのカプセル化はあっさりできてしまったものの、ルータ配下のデバイスに IPv6 のアドレスを持たせて通信することには成功していない(そんな難しくないはずなのに。。。)。なので、デバイスからの見た目は依然 IPv4 しか使えないので何一つ変化していないのだが、よくある話で DS-Lite にするだけで帯域が 10Mbps くらいしかでなかったのが 30Mbps とかたまに 80Mbps とか出る様になって、まぁとりあえずはハッピー。もうちょっと IPv6 に詳しくなったら、デバイスから直接 IPv6 できるように設定できるはず。。。

以下、備忘録。

DS-Lite とは?

Dual Stack Lite のことだそうで、IPv4 と IPv6 を両方使えるようにするための一方式。基本は IPv6 にネイティブで接続するんだけど、IPv4 のパケットは IPv6 にカプセル化して ISP 側に送りつけるだけでよいので、設定は超簡単。PPPoE の方がよっぽどめんどくさい。終端装置?とやらを通らなくて済むので混雑しておらず同じ IPv4 を流しても高速になることがあるという話で、今のところ実際速くなった。

DS-Lite を使うために

NTT フレッツの v6 オプションを有効にしないといけないが、プロバイダの DS-Lite プランの契約の時に一緒にやってくれた。楽ちん。

あとは DS-Lite に対応したルータを持っていれば ok。私はイバラの道をたどるためにあえて EdgeRouter X で突撃。とはいえ丁度 1.9.1 のファームで ipip6 の対応が終わったところなのであっさりでしたが。

やってみた

これ以前の環境もシンプルな構成で、eth0 がモデムに繋がってて、eth1-4 とあわせて switch0 に入っているだけ。eth1 に AirPort が bridge モードで繋がってて、laptop とかはその下。あとは pppoe0 でプロバイダの PPPoE の設定が入っていて、DHCP とかが動いてる。

プロバイダから設定完了の連絡が来たので、さっそく eth0 に ipv6 の設定を入れてみた。

set interfaces ethernet eth0 ipv6 address autoconf

するとすぐにアドレスがやってきた。ひかり電話は契約していないので、IPv6 の情報は RA として/64 のアドレスが割り振られるのだそうだ。確かに/64 のアドレスが来ている。

もうこの時点で IPv6 の通信はできる状態になっているのだが、PPPoE の時と違って Name Server の情報が降ってこない模様で、結果名前解決ができない。RA だからなのかなぁ。。。よくわからないので、system 設定に Google Public DNS を設定して解決させている。

set system name-server 2001:4860:4860:8888

これで IPv6 の疎通が確認できる。

ping6 google.com
PING google.com(nrt20s02-in-x0e.1e100.net) 56 data bytes
64 bytes from nrt20s02-in-x0e.1e100.net: icmp_seq=1 ttl=55 time=7.19 ms
64 bytes from nrt20s02-in-x0e.1e100.net: icmp_seq=2 ttl=55 time=7.30 ms
64 bytes from nrt20s02-in-x0e.1e100.net: icmp_seq=3 ttl=55 time=7.28 ms

あとは、ここに IPv4 を通すトンネルを作って、IPv4 の通信は全てそこに流し込むだけ。local-ip には eth0 に降ってきたアドレスを指定すればよい。remote-ip はプロバイダから指定されているアドレスを指定するが、名前は使えないので IPv6 のアドレスを書く。

set interfaces ipv6-tunnel v6tun0 encapsulation ipip6
set interfaces ipv6-tunnel v6tun0 local-ip <eth0 global ipv6>
set interfaces ipv6-tunnel v6tun0 remote-ip <remote ipv6>

set protocols static interface-route 0.0.0.0/0 next-hop-interface v6tun0

以上。IPv4 も疎通できることを確認。

ping google.com
PING google.com (172.217.26.14) 56(84) bytes of data.
64 bytes from nrt20s02-in-f14.1e100.net (172.217.26.14): icmp_req=1 ttl=57 time=7.13 ms
64 bytes from nrt20s02-in-f14.1e100.net (172.217.26.14): icmp_req=2 ttl=57 time=6.99 ms
64 bytes from nrt20s02-in-f14.1e100.net (172.217.26.14): icmp_req=3 ttl=57 time=6.73 ms

最後に、Firewall を忘れずにつけて完了。

課題

以上の設定だけだと、eth1 の AirPort の先にいるデバイスには IPv6 が降ってこない。正確には、Mac だと何も降ってこなくて Windows だとアドレスは降ってくるものの Default Gateway が入らない。結果として、どちらも IPv6 での疎通ができない。

これどこに問題があるのか全然切り分けできてなくて、AirPort の問題なのかも知れない(一応 IPv6 の設定で Configure は Automatically、Share IPv6Connection にチェックを入れているが合ってるのかは分からない)。eth にデバイス直結して色々試した方がいいなと思いつつ、LAN ケーブル挿せるものが手元に無かった。

そもそも、RA とか DHCPv6 や DHCPv6-PD 等が全然良くわかってないので、一体どうなれば IPv6 が降ってきて疎通できるようになるのかさっぱり。ひかり電話契約してると RA じゃなくて DHCP で降ってくるからやりやすいとかそういう話も見たり見なかったり。

あと、name-server の問題もどうやったら解決するのか分かってない。

参考サイト

まとめ

というわけで、快適な回線速度が手に入った。EdgeRouter X の操作もだいぶ自信が出てきたので(途中で IPv4 で全く入れなくなってしまってリセットしたりした)、また思いついたら何かやってみたい。

IPv6 を宅内に配る方法について、知見ある方いたらぜひアドバイスを下さい。。。答えが欲しいというより、何をみたらいいのかが知りたい。。。