2015 12 10_ipv6対応について
TRANSCRIPT
IPv6対応について
1. はじめに2. Appleの審査について3. IPv6、DNS、NAT等について4. NAT64/DNS64について5. NAT64/DNS64の構築6. IPv6 only networkの挙動7. まとめ
目次
はじめに
“IPv6対応”と呼ばれるものがなんなのか、共通認識
を持つこと
対応に必要なことはなんなのか理解すること
この勉強会の目的
Appleの審査について
参考記事
「Supporting IPv6 DNS64/NAT64 Networks」 / Apple「iOS9 で必要な IPv6 only Network への対応」
審査落とされる!
2016年初頭以降appleに申請を出すアプリに関して、”IPv6対応”が義務付けられました。
具体的にはDNS64/NAT64の環境でも問題なく動くようにアプリが
作られていなかった場合、2016年初頭よりAppleの審査に落とさ
れるとのこと。
IPv6…?DNS…?NAT…?
ナニソレ→ざっくり説明
・通信してデータをやりとりするプロトコル
・よくいうインターネットというのは、このプロトコルでやり取りする
ネットワークのこと
IP(Internet Protocol)
IPアドレス(Internet Protocol address)
・電話でいう電話番号みたいなもの
・インターネット通信において相手にデータを送る宛先、送信元そ
れぞれの識別子
・IPv4ではこれが足りなくなってきている
→約43億個用意されていたが、インターネットの普及と共に枯渇
してしまった
・IP(Internet Protocol)の6番目のバージョン
・現在最もよく使われているIPv4より新しい
・IPアドレスの数がIPv4より遥かに多くなる
・違いはデータをやり取りする際、パケットに埋め込むIPアドレス
部分のbit数
・32bit→128bitでIPアドレスの数が天文学的な数に
IPv6(Internet Protocol Version 6)とは
123.45.67.89 3ffe:2002:500a:c12a:1e12:ff01:fe41:921d
IPv4アドレス例 IPv6アドレス例
・IPアドレスを別の名前(ドメイン)に置き換える仕組み
・WebサイトやAPIサーバーなどは大体ドメインを持ってる
・ドメインでアクセス→ドメインからIPアドレスを取得してアクセス
DNS(Domain Name System)とは
Domain Name System173.194.120.95 www.google.co.jp
LAN
・パケットに含まれるIPアドレスを、別のIPアドレスに変換する技術
・LANの中ではプライベートIPアドレス、外ではグローバルIPアドレスを使ってIPv4アドレ
ス枯渇を防ぐのに使われた
・ルーターなどがNAT機器に相当する
・大体今のネットワーク機器は高機能なのでここにファイアウォールの役割をしてセキュ
リティを高めたりもしている
NAT(Network Address Translation)とは
PC
PC
PC
NAT インターネット
DNS64/NAT64について
・IPv6→IPv4間の通信をする為の仕組み
・DNS64とNAT64はセットで動く
・IPv6端末でドメインでアクセスされた時、IPv6アドレスがあれば
IPv6アドレス、なければIPv4アドレスをIPv6アドレスに変換して返
してくれる
DNS64/NAT64とは
「Supporting IPv6 DNS64/NAT64 Networks」 / Apple より引用
「Supporting IPv6 DNS64/NAT64 Networks」 / Apple より引用
IPv4・IPv6両方のネットワークを用意してる図
「Supporting IPv6 DNS64/NAT64 Networks」 / Apple より引用
IPv6だけ用意して、途中で変換してる図
「Supporting IPv6 DNS64/NAT64 Networks」 / Apple より引用
みんながこの状態なら、IPv4 ServerをIPv6へ変えれる!
・将来、IPv4はなくなっていく(はず)
・現在はIPv6への過渡期
・IPv6とIPv4の共存の為の仕組み
DNS64/NAT64とは
NAT64/DNS64の構築
1. Mac El Capitanを用意
2. 有線でインターネットに繋ぐ
3. システム環境設定→共有をoptionクリックで開き、インターネッ
ト共有で「create NAT64 Network」
4. iOS9端末のwifiポイントを用意したMacに接続
5. IPv6 Only Networkでテストしたいアプリ等を開き、動作確認
する
DNS64/NAT64の構築
参考記事:スクショ付き
「iOS9 で必要な IPv6 only Network への対応」→実際の対処方法
IPv6 only networkの挙動
IPv6 only networkの挙動
・ここから先が実際に”IPv6対応”に関わってくる内容になります
・iOS9端末でNAT64/DNS64環境にしたEl CapitanのWifiに接続
してテストした結果です
クライアントはIPv6アドレスなくてもいい
自分(iOS9端末)にIPv6アドレスがあるかどうかは
http://test-ipv6.com/で確認できる
補足
MacのEl Capitanに構築したNAT64/DNS64環境はIPv6アドレス
を持っていなくても、その環境をエミュレートしてIPv6 Only
Network端末のようにアクセスさせる
→普通のNAT64/DNS64とはちょっと違うっぽい
→iOS8以下、Androidや別のMacからはアクセスできなかった
クライアントはIPv6アドレスなくてもいい
IPv4アドレスでHTTPアクセスもできる
・NSURLSessionでIPv4アドレス直打ちのアクセス
・通常通りのレスポンス返ってきた
・現状は動作するけど、将来IPv4がなくなったら当然これは動かないはず
例:http://123.45.67.89へHTTPリクエスト投げてる
サーバーはIPv4アドレスのみでもいい
・NSURLSessionでIPv4のみのサーバーへアクセス
・通常通りのレスポンス返ってきた
例:example.comIPv6のないサーバーへHTTPアクセス
何をやっちゃいけないのか?
IPv4に依存した関数を使わないこと
inet_addr()inet_aton()inet_lnaof()inet_makeaddr()inet_netof()inet_network()inet_ntoa()inet_ntoa_r()bindresvport()getipv4sourcefilter()setipv4sourcefilter()
↑Appleのサイトに乗っている非推奨API(C言語)
IPv4に依存した定数を使わないこと
AF_INETPF_INETstruct in_addrstruct sockaddr_inkDNSServiceProtocol_IPv4
↑Appleのサイトに乗っている非推奨定数(C言語)
使っていなくても接続できない場合
・NSURLSessionやCFNetwork等、Objective-Cレイヤーの通信APIはApple側で対応
しているので、多分気にしなくていい
・通信ライブラリの中で使われている可能性がある
・実装次第ですが、エラーも出ずに繋がらないとかも有りえます
繋がらないソース例
・IPv6対応できてる?って言われたら
→MacのEl Capitanで動作確認してます!って言えるように
・サーバー側もIPv6にしないといけないんじゃないの?って言われたら
→Appleの審査通すだけならしなくても大丈夫です
・通信するアプリは必ず例の環境でテストしましょう
以上
まとめ