OpenIndiana(多分Solaris11でも)でDSLiteを動かす。
1.こんな変な設定をする動機
自宅の回線はIPv4もIPv6もPPPoE接続で使っているんだけど、近頃夜中の回線速度の劣化がひどい。(IPv6も)加えて、OpenIndianaのパッケージミラー(http://pkg.illumos.jp/openindiana.org/en/index.shtml) を立てているんだけどMasterとのSyncが遅いと処理が止まってしまう。(一定の転送速度以下になると処理が終了する残念な仕様)
ということで、PPPoEからの卒業を画策し、IPoEのプロバイダー探しに出かけたんだけど、あんまり良さげなのがない。
(単品で1000円以下ぐらいで追加できればよかったんだけどね。)
結局IIJmio FiberAccess/NF 月額2000円 (さらにその後IIJ mio光+IPoE オプションに加入)に落ち着きました。
携帯をIIJ mioを利用しているので割り引かれるしね。
IIJのIPoEはMFのTransixサービスの卸なのでIPv4はDSLiteでの提供になります。
次にDSLiteの終端をどこでやるかを考えたのですが。今の自宅のルータはCisco841MというCEF有効にするとIPv6での通信がパケロスする欠陥機。
また、VRFがIPv6に対応してないので、既存のIPv6回線を生かしたまま終端するのは難しそうでした。
よくよく考えると、DSLite自体はすごく単純なプロトコルで、IPv4-in-IPv6が使えれば繋がります。
で、もう直接サーバで終端しちゃえばよく無い?という結論に至り、OpenIndianaでDSLiteの終端をすることにしました。
2. IPv6接続の設定
IPv6 Autoconfigの設定は単純で、IFがtransix0の場合は
$ pfexec ipadm create-if transix0
$ pfexec ipadm create-addr -T addrconf -p stateless=yes,stateful=no transix0/v6addr
アドレスとルーティングの確認は
$ pfexec ipadm show-addr
ADDROBJ TYPE STATE ADDR
lo0/v4 static ok 127.0.0.1/8
lo0/v6 static ok ::1/128
transix0/v6addr addrconf ok fe80::8:20ff::df8b/10
transix0/v6addr addrconf ok 2409:10:20:400:8::fe3e:df8b/64
$ netstat -rn
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
127.0.0.1 127.0.0.1 UH 2 56 lo0
Routing Table: IPv6
Destination/Mask Gateway Flags Ref Use If
--------------------------- --------------------------- ----- --- ------- -----
::1 ::1 UH 2 0 lo0
2409:10:20:400::/64 2409:10:20:400:8::fe3e:df8b U 2 0 transix0
fe80::/10 fe80::8:20ff::df8b U 4 2 transix0
default fe80::212:e2ff::40f4 UG 2 0 transix0
ここで、トンネルのソースIPになるアドレスをstaticで設定します。
プレフィックスは/64なので適当なアドレスをつけてしましょう。
$ pfexec ipadm create-addr -T static -a 2409:10:20:400::100/64 transix0/v6static
$ pfexec ipadm show-addr
ADDROBJ TYPE STATE ADDR
transix0/v6static static ok 2409:10:20:400::100/64
Autoconfigで割り当てられたIPでも通信できるのですが、reboot時にiptunインターフェースが立ち上がらない現象にあたりました。
3. DSLiteの設定
残念ながらSolarisはAFTRの接続はドメイン名での接続をサポートしておらず、IPアドレス指定で指定する必要があります。
AFTRのIPv6アドレスは公式のNVR500の設定に載ってました。
ipv4 over ipv6 interface設定例
// pfexec dladm create-iptun -T ipv6 -a local=<Solaris側のIPv6アドレス>,remote=<AFTRのIPv6アドレス> <作成するインターフェース名>
$ pfexec dladm create-iptun -T ipv6 -a local=2409:10:20:400::100,remote=2404:8e00::feed:101 dslite0
$ pfexec dladm show-iptun
LINK TYPE FLAGS LOCAL REMOTE
dslite0 ipv6 -- 2409:10:20:400::100 2404:8e00::feed:101
IFができたので、IPv4アドレスを振ります。
$ pfexec ipadm create-if dslite0
$ pfexec ipadm create-addr -T static -a local=192.168.0.2,remote=192.168.0.1 dslite0/v4
root@oi-userland:~# ipadm show-addr dslite0/v4
ADDROBJ TYPE STATE ADDR
dslite0/v4 static ok 192.168.0.2->192.168.0.1
最後にルーティングを書けば完成です。
$ pfexec route -p add default 192.168.0.1
add net default: gateway 192.168.0.1
add persistent net default: gateway 192.168.0.1
$ ping 8.8.8.8
8.8.8.8 is alive
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 40 byte packets
1 * * *
2 14.0.9.65 (14.0.9.65) 3.865 ms 3.485 ms 3.411 ms
3 14.0.8.66 (14.0.8.66) 3.743 ms 3.890 ms 14.0.8.78 (14.0.8.78) 4.035 ms
4 210.173.176.243 (210.173.176.243) 4.539 ms 4.236 ms 3.977 ms
5 108.170.242.193 (108.170.242.193) 4.448 ms 4.926 ms 4.401 ms
6 216.239.43.23 (216.239.43.23) 5.226 ms 209.85.251.219 (209.85.251.219) 4.849 ms 108.170.236.171 (108.170.236.171) 4.644 ms
7 8.8.8.8 (8.8.8.8) 4.410 ms 4.610 ms 4.424 ms