ZRouterにIPv6のプロファイルをいれてビルドできるようにしたので、せっかくなので実践的に使えるように設定してみました。
ISPはV4だけのところなので、自宅内の一部でIPv6をはることにしました。
V6からV4への変換はNAT64というらしく、いろいろなソリューションがあるようです。Linux向けに開発された物ですがFreeBSDでも使えるTaygaを試してみました。
とりあえずportsにあったのでZRouterのportsにコピーしてビルドしたらすんなりビルドは通り、ターゲットイメージにコピーするためMakefileに2行だけ追加しました。
こんな構成で試してみました。
iBookの内蔵EthernetにIPv6アドレスの2001:db8:12::1とルーターの2001:db8:12::2を設定しておきます。
AR7240では以下を設定します。
ifconfig arge0 inet 10.10.10.70 netmask 255.255.255.0
ifconfig arge1 inet6 2001:db8:12::2 prefixlen 64
taygaの設定ファイルはこんな感じにしてみました。
tun-device nat64
ipv4-addr 10.10.10.70
ipv6-addr 2001:db8:12::2
prefix 2001:db8:12:ffff::/96
dynamic-pool 10.10.10.128/30
data-dir /var/db/tayga
taygaはステートレスなNATでプールしているIPから1対1で払い出してそれぞれのIPで外部に接続を行います。上記の設定では10.10.10.128から10.10.10.131までを使います。
上記の設定でtaygaを起動するとnat64というインターフェースが表れます。起動した後に以下を実行します。
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet6.ip6.forwarding=1
# sysctl net.link.ether.inet.proxyall=1
# ifconfig nat64 up
# route -n add -inet6 2001:db8:12:ffff::/96 -interface nat64
# route add 10.10.10.128/30 -interface nat64
natのarpを返すためにnet.link.ether.inet.proxyallの設定が必要でした。
iBookからIPv4側にIPアドレスでpingを送るとこんな感じです。
hiroki:~ hiroki$ ping6 -c 1 2001:db8:12:ffff::10.10.10.3
PING6(56=40+8+8 bytes) 2001:db8:12::1 --> 2001:db8:12:ffff::a0a:a03
16 bytes from 2001:db8:12:ffff::a0a:a03, icmp_seq=0 hlim=61 time=2.616 ms
--- 2001:db8:12:ffff::10.10.10.3 ping6 statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 2.616/2.616/2.616 ms
sshやtelnetもv6ネットワークからv4ネットワークにできました。
実はどうにか動くようになったのですが、pingが届くが返答しない状態で、なんでかなと思ってtcpdumpでぶいぶい言わせたらわかりました。taygaはBigendianなマシンで動かすとchecksumが壊れるようです。ググったらOpenWRT方面にパッチがあって同じようにあてました。
checksumのエラーがあってもsyslogにもsysctlにも出てこないようなのですが、どっかに情報出るようにした方が良いかもしれません。
パッチを当ててもtcpdumpでbad cksumと出ていて直ってないかと思ったら、FreeBSDのpingのレスポンスのICMPパケットはチェックサムを0で送る仕様でした。
名前でアクセスするにはDNS64というものが必要になるようです。