明 からのインターネット利 指南 IPv6 とは? 対応の必要はあるの? アプリケーションの IPv6 対応 般財団法 インターネット協会 IPv6デプロイメント委員会北 善明 August 19, 2017
ここからの内容 IPv6 に関する最近の環境 端末 OS やクラウドサービスにおける IPv6 対応状況 アプリケーションの IPv6 対応 IPv6 対応アプリケーション作成時の基本 針とポイント 2
IPv6 に関する最近の環境
IPv6 利 環境は整備済み 端末 OS Windows Vista 以降, Mac OS X, macos, Linux, FreeBSD, ios, Android デフォルトで IPv6 が利 可能 インターネット接続回線 フレッツ光ネクスト, au ひかり, NURO 光 既存ユーザへの 動導 も進 中 モバイルネットワーク docomo, au, SoftBank 2017 年度モデルからデフォルトで IPv6 利 可能 クラウドサービス さくらインターネット, AWS, MS Azure, IIJ 多くのクラウド事業者で IPv6 サービスを利 可能 4
Apple の IPv6-only サーポートの必須化 2016 年 6 1 から App Store アプリは IPv6-only 対応が必須に IPv4 固有のAPIやIPアドレスのハードコーディングがあるとNG DNS64/NAT64 環境下での動作確認が必要 なぜ IPv6 なのか https://developer.apple.com/support/ipv6/ より IPv4 枯渇,IPv6はIPv4より効率的,4Gの普及, マルチメディアサービスとの互換性, コストを理由に挙げている Supporting IPv6 DNS64/NAT64 Networks より 5
DNS64/NAT64 IPv6 をベースとして IPv4 へのアクセスをアドレス変換で提供 DNS64にてDNS 応答におけるIPv4アドレスをIPv6アドレスに変換 NAT64にて特定のIPv6プレフィックス宛の通信をIPv4にアドレス変換 DNS64/NAT64 環境における IPv4 サーバとの通信の流れ 5DNS 応答を変換 192.0.2.1 64:ff9b::c000:201 1DNS 問合せ 2DNS 問合せ 3 応答 クライアント (IPv6) 6DNS 応答 (IPv6 アドレス ) DNS64 4DNS 応答 (IPv4 アドレス ) 権威 DNS サーバ 7 リクエスト (IPv6) 12 レスポンス (IPv6) IPv6 NAT64 9 リクエスト (IPv4) 10 レスポンス (IPv4) IPv4 サーバ (IPv4) 8 プロトコル変換宛先 :64:ff9b::c000:201 192.0.2.1 送信元 :NAT64 の IPv4 アドレスに変更 11 プロトコル変換宛先 : クライアントの IPv6 アドレスに送信元 :192.0.2.1 64:ff9b::c000:201 特定のプレフィックス :64:ff9b::/96 DNS64/NAT64 で利用される IPv4 を IPv6 に変換するための well-known プレフィックス 6
クラウド事業者の IPv6 対応 (Amazon 社 ) 2016 年 8 の S3 対応に続き各種サービスへの展開を実施 中国以外の DC にて IPv6 対応が可能 IPv6 対応クラウドサービスワークショップ (https://www.iajapan.org/ipv6/2017/0419_ws.html) 発表資料より 7
クラウド事業者の IPv6 対応 (Microsoft 社 ) 2016 年 9 に Azure の IPv6 対応を発表 ネイティブでデュアルスタック利 が可能 https://azure.microsoft.com/ja-jp/updates/ipv6-for-azure-vms/ より 8
Windows 10 での IPv6 only 対応 Windows 10 に 464XLAT (CLAT) 実装 (Creators Update にて ) IPv6 対応アプリケーションの IPv6 only 環境で動作を可能に https://blogs.technet.microsoft.com/networking/2017/07/13/core-network-stack-features-in-the-creators-update-for-windows-10/ より Android は Jelly Bean 4.3 から対応していた機能 464XLAT(RFC6877) とは アドレス変換技術による IPv4 の延命技術 CLAT: Customer-side translator PLAT: Provider-side translator CLAT にて IPv4 を仮想的に提供 IPv4 OS 内部 CLAT IPv4 Private IPv6 Internet IPv4 Internet Stateless 変換 PLAT Stateful 変換 IPv4 9
アプリケーションの IPv6 対応
アプリケーションの IPv6 対応の基本 針 IPv6 対応は IPv4 と IPv6 の両 で動作する こと IPv4 と IPv6 の共存期間への対応 これまでのサービスは今後も継続して IPv4 にて動作する必要あり シングルソースコードで対応する プログラミング 語のIPv6 対応によりプロトコル毎の実装が不要にアプリケーションのメンテナンス性を重視しソースコードを分けない プロトコルによって機能差異が発 することを防ぐ 11
アプリケーションの IPv6 対応のポイント 2 通信処理を IPv4/IPv6 の両 に対応させる 3 データとして IP アドレスを扱う箇所を IPv4/IPv6 の両 に対応させる クライアントアプリケーションフレームワーク OS HTTP/HTTPS, SMTP, SSH, ソケット通信など TCP / UDP IP ( v4 / v6 ) Ethernet サーバ アプリケーション ミドルウェア / フレームワーク OS 1 IPv4/IPv6 両対応のプログラミング 語と実 環境を使う 12
1 プログラミング 語と実 環境 プログラミング 語と実 環境における IPv4/IPv6 両対応とは? 名前解決機構が IPv4/IPv6 両 のアドレスを適切に扱える IPv4/IPv6 両 で通信できる 実装上の留意点 プログラミング 語 実 環境における留意点 実際には各プロダクトでサポート状況に差異がある 開発するアプリケーションが提供する機能を考慮し個別に判断する必要ありプログラミングにおける留意点 IPv4/IPv6 双 に対応するライブラリ オブジェクト 関数 データ型を使う 従来 (IPv4 のみ ) のものとは別に 意されていることがある C: addrinfo 構造体,getaddrinfo() Java: InetAddress クラス Perl: IO::Socket::IP など アドレス検証 変換などはライブラリを有効活 する これらを満たすプログラミング 語や実 環境を利 する gethostbyname() は IPv6 対応 13
2 通信処理の IPv6 対応 IPv4 と IPv6 の両 で通信できることとは? クライアント :IPv4 および IPv6 で意図するサーバへ接続できること サーバ :IPv4 および IPv6 で接続を受付けること IP アドレスを複数持つことを考慮する! クライアントがどのアドレスにアクセスするかはサーバ側では予測できない 特定のアドレスに依存したシステムを構成すべきではないネットワークアクセスの作法 名前解決 を使う FQDN で接続先を指定し DNS からアドレスを取得 IP アドレスのハードコーディングは NG IP アドレスでユーザを識別するべきではない 1 名前解決問合せ www.example.jp? クライアント Internet 3HTTP 通信 権威 DNS サーバ 198.51.100.53 2 アドレス応答 www.example.jp 2001:db8:100::1 192.0.2.1 Web サーバ www.example.jp 2001:db8:100::1 192.0.2.1 14
IPv6 の名前解決 FQDN で接続先を指定して IPv6 通信を うには DNS にて FQDN から IPv6 アドレスが名前解決できることが必要不可 FQDN から IPv6 アドレスを名前解決するには 権威 DNS サーバ上で接続先サーバの AAAA レコードに IPv6 アドレスが登録されていること (AAAA レコードは IPv4 における A レコードに相当 ) デュアルスタック環境では権威 DNS サーバの IPv6 対応は必須ではない クライアントから接続先サーバの AAAA レコードが引けること IPv6 名前解決からの通信の流れ 1 名前解決問合せ www.example.jp? クライアント 権威 DNS サーバ 198.51.100.53 2AAAA 応答 2001:db8:100::1 2001:db8:100::1 3HTTP 通信 www.example.jp IN AAAA 2001:db8:100::1 www.example.jp IN A 192.0.2.1 Web サーバ www.example.jp 2001:db8:100::1 192.0.2.1 15
IPv4/IPv6 対応の通信処理で必要なこと 通信の試 順序の理解 : 基本的に IPv6 を優先 RFC6724: Default Address Selection for IPv6 RFC6724 に準拠していない実装や設定により優先順位が変わるクライアントプログラム IPv4/IPv6 両 の宛先アドレスに接続できるようにする 接続失敗時には別の宛先アドレスに切替えて接続する ( フォールバック ) プラットフォームが提供する API 利 することで意識せずに IPv6 対応可能 ios アプリ :WebKit, Cocoa URL, CFNetwork.Core Service Android アプリ :WebView (Android.webkit.WebView), HttpURLConnection (java.net.httpurlconnection), Socket (java.net.socket) サーバプログラム IPv4/IPv6 両プロトコルでの接続を処理する 主要な Web サーバプログラムは対応済み Apache HTTP Server, Microsoft Internet Information Server (IIS), nginx 16
通信のフォールバック 接続できない場合に別の接続先への接続に切替える動作 想定されるフォールバックの主な原因 サーバ側の問題 : 経路の問題 : 1 名前解決問合せ www.example.jp? AAAA 問合せ A 問合せ クライアント 2001:db8:ffff::1 198.51.100.1 クライアント側の問題 : 権威 DNS サーバ 198.51.100.53 www.example.jp IN AAAA 2001:db8:100::1 www.example.jp IN A 192.0.2.1 2AAAA 応答 2001:db8:100::1 A 応答 192.0.2.1 3HTTP 通信 (IPv6) 4HTTP 通信 (IPv4) Web サーバ www.example.jp 2001:db8:100::1 192.0.2.1 フォールバック サーバが当該サービスを提供していない ネットワークの接続性が失われている サーバへの到達性がないアドレスを選択 17
3 データとして IP アドレスを扱う箇所の対応 IPv4/IPv6 両対応するため 字列 を確認する IPv6 アドレスの 字列 は IPv6 完全表記で 39 字 プレフィックスを加味すると 43 字 IPv6 アドレスを扱えないケース 15 字までの 字列 (varchar(15)) として扱う場合 1つの整数として扱う場合 1オクテットずつの4つの整数として扱う場合 IPv4/IPv6 両対応 :39 字以内の 字列 varchar(39) 既存システムの場合 : 格納領域にIPv6アドレスが収まるかチェック IP アドレス型定義がある場合 :IP アドレス型を利 PostgreSQLのネットワークアドレス型など IP アドレス... IP アドレス型定義がない場合 : 字列型で IPv6 完全表記を使う IPv6 完全表記 )2001:0db8:0000:0000:0001:0000:0000:0001 18
データ 時の注意 Web フォームからの 値検証 された 字列が IP アドレスとして取りうる値であることを検証 IPv4 アドレス :0 9 とピリオドで構成, オクテット内は 0 255 の 10 進数 など IPv6 アドレス :0 f とコロンで構成, 特殊アドレス (IPv4 射影アドレス ) への対応 2 箇所で実施可能 ブラウザ側 (HTML5 の Form Validation 等 ) サーバ側 アドレス処理ライブラリを利 すると便利 PHP の例 filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) など ( 参考 )IPv4 射影アドレス IPv4 アドレスを IPv6 アドレスとして表現するための IPv6 アドレス 上位 80 ビットに 0 81 96 ビット に 1 下位 32 ビットに IPv4 アドレスを埋め込む 機器内部での使 に限られ パケットの始点 / 終点アドレスには使われない 出典 :IPv6 関連 語集 IPv4-mapped (IPv6) address 19
字列型で扱う際の IPv6 完全表記 なぜ IPv6 完全表記を いるのか 省略表 だと整列時にアドレス昇順にならない 整列は完全表記で う必要あり 字列として扱う場合の注意点 省略表記と完全表記の変換にはライブラリを有効活 する 古いシステム ツールでは RFC5952 に 準拠の省略表記が存在するので注意 2001:DB8:CAFE::1 など ログファイル解析への影響を精査する ログ解析を 作している は要注意! アドレス部分の 字列が くなる アドレスの区切り 字がコロンに変わる OSS ログ解析プログラムでは 抵問題なく処理できる 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:10::1 AWStats, Webalizer アクセス元の国や地域の解析はできない場合があるので注意 文字列で整列 2001:db8:0:10::1 2001:db8:0:1::1:1 2001:db8:0:1::50 2001:db8:0:2::1 20
まとめ アプリケーションの IPv6 対応の基本 針 IPv6 対応 =IPv4/IPv6 の両 で動作させる シングルソースコードで対応する アプリケーションの IPv6 対応のポイント IPv4/IPv6 両対応のプログラミング 語と実 環境を使う IPv4 固有の API を利 しない OS による レベルなネットワークフレームワークを活 通信処理を IPv4/IPv6 の両 に対応させる IP アドレスのハードコーディングは NG ホスト名 FQDN で接続先を指定する データとして IP アドレスを扱う箇所を IPv4/IPv6 の両 に対応させる 適正サイズのアドレスファミリストレージコンテナを使 21
おわりに 2017 年は IPv6 利 のターニングポイント 国を中 とした事業者の IPv6 対応が加速 コンテンツ事業者 (Hyper Giants) は対応済み モバイル通信事業者で IPv6 対応率 80% を超える事業者が登場 NGN( フレッツ光ネクスト ) 利 者の IPv6 利 率が 50% に到達する伸び ISP における IPv6 のデフォルト提供化 モバイル事業者の IPv6 デフォルト化が開始 2017 年度のモデルから IPv6 デフォルト対応 SoftBank は 2016 年度夏モデルから 部対応済み IPv6 がもたらす End-to-end 通信プラットフォーム NAT 越えの壁がなくなり直接通信可能な世界の実現 別途セキュリティの議論は存在 新しいアプリケーションの可能性 22
( 参考 )IPv6 環境確認サイト Test yout IPv6( あなたの IPv6 をテストしましょう ) http://test-ipv6.com/ http://test-ipv6.jp/ World IPv6 Launch の際に 意されたサイト (com 版のミラーサイトが存在 ) IPv6 test IPv6/4 connectivity and speed test http://ipv6-test.com/(ipv4 と IPv6 の到達性確認とスピードテスト ) Google s IPv6 test http://ipv6test.google.com(google による IPv6 接続環境確認サイト ) IPv6 接続確認ツール ぷらら https://www.plala.or.jp/ipv6/access/check/ IIJmio IPv6 スピードテスト http://speedtest6.iijmio.jp など 23
( 参考 )IPv6 の普及 利 状況 6lab The place to monitor IPv6 adoption http://6lab.cisco.com/(ipv6 普及状況を す総合サイト ) ユーザの IPv6 利 状況 Google IPv6(Google への IPv6 アクセス状況 ) https://www.google.com/intl/ja/ipv6/statistics.html Mesurement World IPv6 Launch( 各 ISP 毎の IPv6 利 率 ) http://www.worldipv6launch.org/measurements/ ネットワークの IPv6 対応率 IPv6 Enabled Networks(RIPE NCC による国別対応状況 ) http://www.worldipv6launch.org/measurements/ コンテンツプロバイダの IPv6 対応状況 IPv6 普及度計測 DNS の IPv6 登録状況 (jp ドメインでの IPv6 普及状況 ) http://v6metric.jp/html/st04/ 24
( 参考 )macos による DNS64/NAT64 環境の構築 インターネット共有オプションで DNS64/NAT64 を利 可能 システム環境設定で [Option] キーを押しながら 共有 を開く NAT64 ネットワークを作成 チェックボックスが表 される NAT64 ネットワークを作成 にチェックし インターネット共有 を選択 開始 をクリック [Option] キーを押しながらクリック 共有ポートと NAT64 ネットワークを作成 にチェックして インターネット共有 を選択 25
( 参考 )macos による DNS64/NAT64 環境の構築 デフォルトの DNS64/NAT64 環境の問題点 NAT64 ネットワークを作成 だけでは IPv4 への通信しかできない IPv4 通信しかできない理由 クライアントに割り当てられるアドレスがベンチマークアドレス (2001:2::/64) DNS64 で IPv6 サーバの名前解決も変換される (dns64-synthall が有効なため ) IPv6 通信も可能にする改造 法 1 上位ルータにてクライアントに割り当てるプレフィックスをルーティング 2/etc/com.apple.mis.rtadvd.conf を変更 クライアントに割り当てるプレフィックスと rdnss の値を変更 3/etc/com.apple.mis.unbound.conf を変更 dns64-synthall の を削除 interface: ::0 を interface: [rdnss サーバアドレス ] に変更 4radvd および unbound を kill して再起動 上記設定ファイルは NAT64 有効時のみ出現 (NAT64 を無効にした時点で設定が初期化され設定ファイルも消失 ) 26
お問い合わせ 般社団法 インターネット協会 IPv6 デプロイメント委員会 ipv6_dc@iajapan.org 参考資料 : 渡辺露 (IPv6 普及 度化推進協議会 ), チュートリアル IPv6 対応アプリケーション開発, IPv6 Summit in KANAZAWA 2016, https://www.iajapan.org/ipv6/summit/kanazawa2016/pdf/watanabe_kanazawa2016.pdf