2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FreeBSDでNAT64(Tayga編)

Last updated at Posted at 2017-08-28

ZRouterにIPv6のプロファイルをいれてビルドできるようにしたので、せっかくなので実践的に使えるように設定してみました。

ISPはV4だけのところなので、自宅内の一部でIPv6をはることにしました。

V6からV4への変換はNAT64というらしく、いろいろなソリューションがあるようです。Linux向けに開発された物ですがFreeBSDでも使えるTaygaを試してみました。

とりあえずportsにあったのでZRouterのportsにコピーしてビルドしたらすんなりビルドは通り、ターゲットイメージにコピーするためMakefileに2行だけ追加しました。

こんな構成で試してみました。

NAT64.png

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というものが必要になるようです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?