【NAT64】[Jool] Linuxだけで実装するNAT64(概要編)

  • 13
    Like
  • 0
    Comment
More than 1 year has passed since last update.

1. はじめに

去る2016.08.20に開催されましたiOSDC(iOS Developers conference)にて、
このカンファレンスで使えるWi-Fiネットワークの構築にCONBUメンバーとして参画し、
ありがたくもNAT64の実装に携わってきました。
聞くところによりますと、iOSアプリの審査は2016/06以降「IPv6 Ready」でなければpassできないそうで、アプリレイヤの方々が否応なくIPv6を意識しなければならないというある種そこそこ酷な状況かと思います。

参考: Supporting IPv6-only Networks
参考: Supporting IPv6 DNS64/NAT64 Networks

そのような中、IPv6-only Networkってどう作ればええねん!
ネットワーク上での挙動の試験なんて環境がががが
などという方もいらっしゃると思い、実装例を投稿したいと思います。

いや、単に自分がやったから残しとこうというだけなんですけどね。

なお、iOSとIPv6とのトピックはiOSDC関連まとめの中では
結構なヒット作となっておられます、以下もご覧いただけるとより楽しめるかと思います。
# IPv6に関するプログラミングアンチパターンが面白いんじゃよ。

■IPv6 Readyって何?NAT64/DNS64徹底解説
■上記の発表資料はこちら

2. DNS64/NAT64の概要

IPv6-only Networkとか言ってるものの、Internetの大半のWebsiteはIPv4のみ対応というのが実のところです。
IPv4とv6は全く別のプロトコルですんで、お互いに疎通性を持ちませんから
IPv6のみの世界からIPv4の世界へ通信するには一工夫必要になります。

その手段のひとつがDNS64/NAT64というものです。

その実態を簡単に言うと、
DNS64で行き先のIPv4アドレスの頭に決まった値を入れてIPv6アドレスを生成し
NAT64で先ほど生成したIPv6アドレス行き通信をProxyしてIPv4通信として本来の行き先へ到達させる
というものになります。
図: 上述のApple developer siteより抜粋

本記事ではこのうちNAT64部分を実装してくれる、
Joolについて書きます。

3. Joolの概要

JoolはLinuxのkernel moduleの一つです。
使ってみたところ、結果的にkernelのリビルドは行わなくてよく、
まず気軽に安価に構築できるNAT64コンポーネントと言えましょう。

ちなみにMac OSX単体でもNAT64環境を作ることはできるようです(上述の記事下の方)。

JoolはクライアントのIPv6通信を受けつけて、
IPv4通信をクライアントの代わりにProxy的に行います。
なので、Joolが挙動するLinuxにはInternet Reachabilityのある
IPv4アドレスを割り当てます。

クライアントが乗るIPv6 onlyネットワークは、
クライアントが投げるv6通信をJoolまでroutingしてやるように設定します。

Joolが稼働するマシンはIPv4でインターネットアクセスができればよいです。

4. つづく

文字ばっかりしかも長文になったので
設計・構築編は次の記事とさせてください。