IPv6時代のWebアプリケーション&プラットフォーム 2014
日本UNIXユーザ会 波田野 裕一
2014-07-04
jus研究会 名古屋大会
はじめに
• 2011年にIPv4アドレス在庫枯渇 (3年経過)
• 通信事業者やISP各社からIPv6対応サービスが拡大
• IPv4のみでの運用からIPv4とIPv6の共存期ヘ
Webアプリケーションとして以下の2点を整理
• IPv6を意識しなければいけない箇所
• IPv4との違い
Agenda
1. アプリケーション開発におけるIPv6対応の全体像
2. IPv6対応のプログラミング言語と実行環境
3. 通信処理のIPv6対応
4. データとしてIPv6アドレスを扱う場合の対応方法
IPv6対応Webアプリケーション開発に必要な基礎的事項
IPv6対応プラットフォームの状況
1. アプリケーション開発におけるIPv6対応
(概要)
アプリケーションにおけるIPv6対応
• 当面、IPv4とIPv6が共存することが予想される。
• ある程度長い期間、IPv4とIPv6の双方で動くシステムが求められる。
• 単一のソースプログラムでIPv4とIPv6の両方で動作するように開発す
ることが望ましい。
そのアプリケーションがIPv6とIPv4の両方の通信環
境で動作すること
IPv6対応における基礎的事項
• FQDN(Fully Qualified Domain Name: 完全修飾ドメイン名)を使用する
• IPアドレスの直書きは行なわない。
• IPアドレスでユーザを識別しない
アプリケーションにおけるIPv6対応のポイント
1. 実行環境
• IPv6対応のプログラミング言語と実行環境を使用
2. 通信
• 通信部分をIPv6に対応させる
3. データ
• データとしてIPアドレスを扱う箇所をIPv6に対応させる
2. IPv6対応のプログラミング言語と実行環境
プログラミング言語や実行環境
1. 「名前解決機構がIPv6アドレスを適切に扱えること」
• 通信相手のホスト名からIPv6アドレスを名前解決(正引き)
• 通信相手のIPv6アドレスからホスト名を名前解決(逆引き)
2. 「IPv6で通信できること」
• 何らかの通信方法により通信相手とIPv6で疎通できること
(例)
• SMTPやHTTPなどの既存プロトコル
• ソケット通信により独自で実装したプロトコル
プログラミング言語や実行環境の選択
• プログラミング言語や、関連するライブラリ、ミドル
ウェア、データベースなどのプロダクトでサポートされ
るべきだが、実際にはサポート状況に差異があるのが
実情
• 開発するアプリケーションの提供機能を考慮し、利用
するプログラミング言語やプロダクト個別に判断する
必要がある。
個別のプログラミング言語の対応状況
• C(BSD Socket) / Perl / PHP5
• https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/
• Python
• https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t7/
• Ruby
• https://www.nic.ad.jp/ja/materials/iw/2011/proceedings/t5/
3. 通信処理のIPv6対応
通信処理のIPv6対応
• 通信処理のIPv6対応では、IPv4とIPv6の両方で通信
• サーバ: IPv4およびIPv6で接続を受け付ることができる
• クライアント: IPv4およびIPv6で意図するサーバへ接続できる
• IPv4/IPv6のいずれかで通信できない状況の想定も必要
• クライアントおよびサーバが複数のIPアドレスを持つ
• それぞれどのIPアドレスが使用されるかをWebアプリケーション側で
予測できない
• Webアプリケーション側では特定のアドレスに依存したシステムを構
成するべきではない
1. 名前解決
• サーバが属するドメインの権威ネームサーバ上に、サーバの
AAAAレコードが登録されている
• クライアントからそのサーバのAAAAレコードが引ける(名
前解決できる)
アプリケーションの通信では、接続先をFQDNで指定
する。 (IPアドレスを直接使わない)
FQDNのIPv6アドレスが正しく名前解決できることを確認
2. 通信の試行順序
• クライアントが通信に使用する始点アドレスと終点ア
ドレスを選択
• 選択に関するルールはRFC6724に定義
• デフォルトのルールに従うとIPv6アドレスがIPv4アドレスより優先
• デフォルトを変更している実装やRFC6724に準拠し
ていない実装に注意が必要。
クライアントあるいはサーバが複数のIPアドレスを持つ場合
3. フォールバックとその解決
• 名前解決によって得られたIPアドレスのリストを元に
通信を試みる。
• リストにはIPv4/IPv6アドレスが混在
• リストの先頭のアドレスに接続できるとは限らない
• 接続できない場合、次のアドレスへ接続しにいく。(フォールバック)
• フォールバックが発生すると、ユーザの快適性が損なわ
れる。
クライアントあるいはサーバが複数のIPアドレスを持つ場合
3. フォールバックとその解決
「接続に失敗する要素」を極力排除する
フォールバックの解決策
• IP
• TCP/IPレイヤーでの接続性を保つ。
• DNS
• サービス提供をしていないサーバのアドレスを登録しない。
4. データとしてIPv6アドレスを扱う場合
の対応方法
IPv6アドレスの特徴
• 16進数を用いること (最大:4文字x8)
• 区切り文字に「:」(コロン)を用いること (最大7文字)
• アドレスの文字列長39文字以内
IPv6アドレスの表記法
• 方法1: 完全表記 (39文字) で記述する。
• 方法2: RFC5952(推奨表記)に準拠する。
表記ゆらぎを防止するために
• ライブラリを用いて推奨表記を利用する場合、ライブラリがRFC5952に対応
していることを確認する必要がある。
• IPv6アドレスの区切り文字「:」がIPアドレスとポート番号との区切り文字とし
て使われている場合があるので注意を要する。
注意事項
IPv6アドレスの特殊な表記
• リンクローカルアドレス
• ゾーンID(スコープID)を付加してインタフェースを特定する場合
• 例: fe80::5054:9ff:fe01:810%vtnet1
• 特殊なアドレス
• IPv4射影アドレス など
• 例: ::ffff:192.168.0.1
以下のケースでは、 : 以外の文字が使われる
ユースケース別のポイント
• データベースへの格納
• 文字列型もしくはIPアドレス用データ型で格納
• ログ出力
• Webサーバログ解析プログラムへの影響
• リバースプロキシやプロトコル変換装置などの影響
• WebフォームへのIPアドレス入力
• 入力値検証の実施 (アドレス処理ライブラリの利用)
• IPv6アドレスの検索や整列
• 完全表記と省略表記の違いを考慮に入れる必要がある。
• 混在している場合に文字列としてソートすると、期待と異なる結果に
アプリケーションのIPv6対応ガイドラインWebアプリケーション編
• http://www.v6pc.jp/jp/entry/wg/2014/06/ipv6web.phtml
本日の内容について、現在パブリックコメント実施
IPv6対応プラットフォーム
プラットフォームのIPv6対応 概要
3つの選択肢
‣ トランスレータの利用
‣ IPv6トンネリングの利用
‣ IPv6ネイティブでの接続
1. トランスレータの利用
最近の動向
• スタティックコンテンツの一部についてNAT64(Firewall)によるIPv6対応をした
事例が出てきた。(総務省勉強会資料より)
• 海外の大手パブリッククラウドサービスがバランサの標準機能として提供。
• ユーザはバランサのサービスを購入するだけで自動的に付与される。
Web
サーバ
バランサ
などインターネット
IPv6/IPv4
変換
2. IPv6トンネリングの利用
最近の動向
• IPv6ネイティブサービスの増加と共に、今後は利用者や提供サービスが減少してい
く可能性がある。
Web
サーバ
トンネル
ルータインターネット
6to4
6rd など
トンネル
3. IPv6ネイティブでの接続
最近の動向
• 国内パブリッククラウド/VPSサービスでIPv6ネイティブ対応のものが出揃いはじ
めた。
• スタティックによる設定を必要とするサービスが大半。
• DHCPv6やRAによる自動設定を提供しているサービスも一部ある。
• 標準で複数のIPv6アドレスを提供しているサービスもある。
Web
サーバ
ルータインターネット
‣ 方法1 DHCPv6の利用
‣ 方法2 RAの利用
方法3
静的アドレス設定
プラットフォームのIPv6対応 (まとめ)
3つの選択肢
‣ トランスレータの利用
‣ 動向: 一部の企業での導入やパブリッククラウドでの提供が行なわれはじめている。
‣ 利用: IPv6対応の先送りには便利だが、過渡期にしか使えない可能性がある。
‣ IPv6トンネリングの利用
‣ 動向: IPv6ネイティブサービスの増加により今後は使われなくなっていく可能性がある。
‣ 利用: 検証には使えるが、サービス本番での利用は避けるべき。
‣ IPv6ネイティブでの接続
‣ 動向: 主にパブリッククラウドやVPSサービスでIPv6ネイティブ接続の提供が出揃いつつある。
‣ 利用: 利用環境については比較的低コストで容易に手に入るようになったので、早めに利用経験
と実績を積み上げていくべき。
アクセス経路のIPv6対応(Web) 概要
3つの選択肢
‣ HTTP proxyの利用
‣ IPv6トンネリングの利用
‣ IPv6ネイティブでの接続
HTTP proxy経由でのIPv6アクセス
最近の動向
• (前項の通り) IPv6ネイティブなVPSやパブリッククラウドが普及してきた。
• Squid 3.1以降は IPv6 対応となった。
Web
サーバ
proxy
サーバ
HTTP
Proxy
Web
ブラウザ
IPv6ネイティブでの接続
最近の動向
• KDDIの「auひかり」では、順次ネイティブ化が進捗
• NTTは、Flet s ネクスト光 + 対応プロバイダを利用するとIPv6利用可能
• KDDIのスマートフォン向けサービス「LET for Data」を契約すると、IPv4/IPv6
アドレスが端末に付与される。
インターネット
Web
ブラウザ
まとめ
サーバ側
• パブリッククラウドではIPv6ネイティブ対応のサービスが増えてきた。
• DC/回線サービスでの対応も、近い将来増えていく可能性が高い。
クライアント側
• IPv6ネイティブ対応のパブリッククラウド等が普及してきたことにより、
IPv6 HTTP Proxyの構築が容易になってきた。
まとめ
• Webサーバとクライアントの双方でIPv6環境を簡単に用意することが
可能な時代となりました。
• 次は、実際にIPv6対応のサービスを作るフェイズです。

IPv6時代のWebアプリケーション&プラットフォーム 2014