アプリケーションのIPv6対応の ススメ(LL編) 
2014年8月23日 
技術本部 技術開発部 
ネットワークエキスパート 
渡辺 露文 
Lightweight Language Diver 
〜LLのDeepなところにDiveする前に知ってほしいIPのこと〜
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
About me 
渡辺 露文 (わたなべ つゆふみ) 
富士ソフト株式会社 技術本部技術開発部 ネットワークエキスパート 
業務経歴 
1999年 富士ソフトABC株式会社(現 富士ソフト株式会社)入社 
入社後、ISP、データセンター顧客向けシステムなどB2Cのシステム 開発・インフラ構築・運用に従事 
2008年〜 社内システムのインフラ企画・構築・運用に従事 
2011年〜 技術調査および社内技術者教育に従事 
主な社外活動 
IPv6普及・高度化推進協議会 
技術評論社 Software Design にて連載(2012年12月号〜 2014年1月号;共同執筆) 
1 
< twatanab@fsi.co.jp >
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
Do you know … 
- 2 - 
IPv6 ? 
Internet Protocol 
version 6 
インターネットの通信に関する規約(RFC791) 
IPネットワークに接続するには1つ以上のIPアドレスが必要 
皆さんが馴染んでいるのはIPv4(例:10.1.2.3)
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
実はIPv6を使える環境が増えています 
最近のOS 
Windows Vista以降 
Mac OS X 
Linux 
FreeBSD 
… 
インターネット回線 
フレッツ光ネクスト 
au ひかり 
NURO 光 
… 
- 3 - 
いずれもデフォルトで利用可能 
利用可能 
既存ユーザへの自動導入も進行中 
すでに、ユーザからあなたのサービスにIPv6で アクセスされようとしている…かもしれない
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
余談:IPv6でインターネットにアクセスできるかの確認方法 
Webブラウザで http://www.test-ipv6.jp にアクセス 
Webブラウザで http://www.kame.net にアクセス 
- 4 - 
IPv6でアクセスすると、 亀が踊ります♪
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
日本におけるIPv6の普及状況 
フレッツ光ネクストのIPv6普及率(2014年3月) 
IPv6普及率:3.2% 
フレッツ光ネクスト契約数:11,301,000 
au ひかりのIPv6普及率(2014年3月):67% 
- 5 - 
今後本格的に普及する前に 
IPv6対応を始めたほうが良い 
出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査 http://v6pc.jp/jp/spread/ipv6spread_03.phtml
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
IPv6の背景:IPv4アドレス枯渇 
- 6 - 
IPv4アドレスの在庫状況(地域インターネットレジストリ) 
アフリカ(AFRINIC) 
在庫あり 
アジア/環太平洋(APNIC) 
枯渇 
北米(ARIN) 
枯渇間近 
中南米、カリブ海(LACNIC) 
枯渇 
ヨーロッパ、中東、中央アジア(RIPE NCC) 
枯渇 
世界的に足りなくなってきている 
いずれ、IPv6アドレスしか持たない ユーザ、システムが現れるようになる 
通信事業者、ISP、 データセンター、 クラウド事業者等の 在庫が残っているのみ
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
もう少しIPv6を知ろう! 
- 7 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
IPv4とIPv6とでは何が違うのか? 
アドレス体系が異なる(IPv6のアドレス空間は広大) 
例 
IPv4)192.0.2.1 
IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 
IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 
他にも機能的にIPv4と異なることがある 
- 8 - 
IPv4とIPv6は互換性がない 
IPv4アドレス 
IPv6アドレス 
アドレス長 
32bit 
128bit 
文字列 表記 
表記法 
8bitずつ区切り、 10進数で表記 
16bitずつ区切り、 16進数で表記 
区切り文字 
. (ドット) 
: (コロン) 
文字列長 
15文字以内 
39文字以内 
RFC5952に 文書化されて いる IPv6アドレス 推奨テキスト 表記ルールに 従い省略可能
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
IPv4とIPv6の接続性 
9 
Internet 
IPv4対応 (IPv6非対応) システム 
IPv4/IPv6 両対応システム 
IPv6対応 (IPv4非対応) システム 
(1) 
(2) 
(3) 
IPv4端末 
IPv4/IPv6 両対応端末 
IPv6端末 
IPv4 
IPv6
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
IPv6に対応しない場合の影響 
1.IPv6のみの環境と通信できない 
ビジネス機会を損失する 
システム連携が行えず要件を満たせなくなる 
2.今後、IPv4はサービスレベルが低下していく(予想) 
IPv4アドレス節約のため、通信事業者等によるCGN(Carrier Grade NAT)導入により、遅くなったり、利用できるセッション 数が少なくなったりする(と予想される) 
10 
IPv6に対応しなきゃ! 
自分たちは悪くないのに、自分たちの サービスが低下したと思われてしまう
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
インフラがIPv6に対応するだけでいいのでは? 
ネットワークとサーバががIPv6に対応すれば、IPv6で 接続可能 
接続は可能だが… 
例えば 
システム連携がうまくいかない 
想定外の挙動をする 
… 
- 11 - 
アプリケーションもIPv6に対応しなきゃ! 
サービスが正常に動作しない かもしれない
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
IPv6対応の話をする前に… 
このコード、イケてない… 
12 
IPアドレスのハードコーディングはNG 
ダメ。ゼッタイ。 
IPアドレス直書きすると、 アドレス変更時に修正が 必要なんですよ… 再テストも必要だし… 
use IO::Socket::IP; 
$host = “198.51.100.1”; 
: 
my $sock = IO::Socket::IP->new( 
PeerAddr => $host, 
PeerPort => $port, 
Proto => 'tcp' 
) or die “Error: $!¥n”; 
: 
えっ、 IPアドレス直書き? 
$host = “www.example.com” 
のようにFQDNで接続先を指定する
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
Internet 
補足:ネットワークアクセスの作法=名前解決を使う 
 Webアクセスの例 
13 
Client 
Web Server 
www.example.jp 
192.0.2.1 
DNS Server 
198.51.100.53 
①名前解決問合せ 
www.example.jp ? 
②アドレス応答 
www.example.jp ⇒ 192.0.2.1 
③HTTP通信 
FQDN 
FQDNで接続先を指定し、DNSからアドレス取得
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
なぜIPアドレス直書きがダメなのか? 
アプリケーションとインフラでは目的とライフサイクルが 異なる 
14 
アプリケーションは、IPアドレスに依存すべきではない 
目的 
変更・改修の理由 
アプリケーション 
機能の提供 
業務要件の変更 
サービス内容の変更 
ユーザビリティ向上 …,etc. 
インフラ 
資源の提供 
資源管理(IPアドレス、サーバラック…) 
性能 
互いに変更の影響を受けるべきではない 
同一システムでも変更・改修の理由・時期は異なる 
例)IPアドレスでユーザを識別すべきではない
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
さあ、アプリケーションを IPv6に対応させよう! 
ここからが本題 
- 15 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
アプリケーションIPv6対応の基本方針 
IPv6とIPv4の共存期間が長く続く 
これまでIPv4で提供してきたサービスは、今後も継続してIPv4でも 動作する必要あり 
各開発言語が概ねIPv6に対応しており、プロトコルによって開発言 語を分ける必要がなくなった 
アプリケーションのメンテナンス性を重視し、プロトコルによって 機能差異が生じることを未然に防ぐ 
16 
IPv6対応 = 
IPv4とIPv6の両方で動作する 
シングルソースコードで対応
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
アプリケーションのIPv6対応のポイント 
17 
Ethernet 
IP(v4/v6) 
TCP / UDP 
アプリケーション 
OS 
ミドルウェア/ フレームワーク 
アプリケーション 
OS 
フレームワーク 
HTTP/HTTPS SMTP, SSH, ソケット通信など 
クライアント 
サーバ 
①IPv4/IPv6両対応の プログラミング言語と実行環境を使う 
②通信処理をIPv4/IPv6の 両方に対応させる 
③データとしてIPアドレスを 扱う箇所をIPv4/IPv6の 両方に対応させる
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ポイント① プログラミング言語と実行環境 
プログラミング言語と実行環境に求められること: IPv4/IPv6両方で通信できる 
1.名前解決でIPv4/IPv6両方のアドレスが扱える 
2.IPv4/IPv6両方で接続できる 
プログラミングにおける留意点 
IPv4/IPv6の双方に対応するライブラリ、オブジェクト、関数、 データ型を使う 
従来(IPv4のみ)のものとは別に用意されていることがある 
–C addrinfo構造体、getaddrinfo() 
–Perl IO::Socket::IP など 
アドレス検証、変換などはライブラリを有効活用 
18 
①IPv4/IPv6両対応のプログラミング言語と実行環境を使う
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ポイント① プログラミング言語と実行環境 Perlの対応状況 
考慮すべき要素 
対応状況 
備考 
名前解決 
○ 
Socket::getaddrinfo() 
Socket::getnameinfo() 
CPAN Net::DNS 
ソケット 
○ 
コアモジュールの Socketは 5.10 か ら部分的に対応 
5.14でフル対応 
CPANモジュールにも対応しているも のがある 
各種(L7) プロトコル 
HTTP クライアント 
▲ 
標準では非対応(コアモジュール HTTP::Tiny, LWP等のメジャーなモ ジュールも非対応) 
SMTP クライアント 
▲ 
標準では非対応(コアモジュール Net::SMTP) 
その他 
IPv6アドレス の処理 
○ 
CPANモジュール Net::IPにより対応 
- 19 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ポイント① プログラミング言語と実行環境 PHPの対応状況 
考慮すべき要素 
対応状況 
備考 
名前解決 
○ 
dns_get_record() 
gethostbyaddr() 
PEAR Net_DNS2 
ソケット 
○ 
inet_pton(), inet_ptop()は 5.1.0 以降 対応 
各種(L7) プロトコル 
HTTP クライアント 
○ 
各種ファイル関数 cURLなど 
SMTP クライアント 
○ 
PEAR Net_SMTP 
mail(), PEAR Mail ⇒システム環境依存 
その他 
IPv6アドレス の処理 
○ 
PEAR Net_IPv6拡張パッケージ 
- 20 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
【補足】IPv6アドレスの名前解決 
 FQDNからIPv6アドレスが名前解決できることが不可欠 
1. 権威DNSサーバ上で、接続先サーバのAAAAレコードに 
IPv6アドレスが登録されている 
2. クライアントから接続先サーバのAAAAレコードが引ける 
Client 
Web Server 
www.example.jp 
2001:db8:100::1 
example.jpの 
権威DNS Server 
 AAAAレコード 
(IPv4のAレコードに 
相当)をリソースレ 
コードに登録 
www.example.jp IN AAAA 2001:db8:100::1 
①名前解決問合せ 
www.example.jp ? 
②AAAA応答 
2001:db8:100::1 
③HTTP通信 
- 21 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ポイント② 通信処理の対応 
 接続の優先順位(標準;RFC6724):IPv6 > IPv4 
 サーバプログラム 
 IPv4/IPv6 両プロトコルでの 
接続を処理 
 クライアントプログラム 
 IPv4/IPv6 両宛先アドレスに接続できるようにする 
 接続できない状況も想定し、接続失敗時には別の宛先アドレスに 
切替えて接続する(フォールバック) 
22 
②通信処理をIPv4/IPv6の両方に対応させる 
IPv6 IPv6 
IPv4 IPv4 
Client Server 
アプリケーションの作りが悪いと… 
 切替えに時間がかかる 
 正常に切替わらないこともある 
ユーザの利便性を 
損なう
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
通信処理の補足:フォールバック 
 接続できない場合に別の接続先への接続に切替える動作 
 IPv6⇒IPv4 / IPv6⇒IPv6 / IPv4⇒IPv4 / IPv4⇒IPv6 
23 
Client 
Web Server 
www.example.jp 
DNS Server 
www.example.jp IN AAAA 2001:db8:100::1 
www.example.jp IN A 192.0.2.1 
①名前解決問合せ 
www.example.jp ? 
②AAAA応答 2001:db8:100::1 
A応答 192.0.2.1 
③HTTP通信(IPv6) 
2001:db8:100::1 
192.0.2.1 
2001:db8:ffff::1 
198.51.100.1 
④HTTP通信(IPv4) 
フォールバック
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ポイント③ データとして扱う箇所の対応 
入力 
整数ではなく文字列で入力 
入力値の検証はライブラリの関数・フィルタを活用 
例)PHP Net_IPv6::checkIPv6(); (PEARにて提供されるNet_IPv6パッケージに含まれる) 
格納、検索、整列、出力 
IPアドレス型が定義されている場合は、IPアドレス型を使う 
例) PostgreSQLのネットワークアドレス型 
IPアドレス型が定義されていない場合は、文字列型で完全表記で 格納、検索、整列、出力 
IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 
見やすさを求めるときは、省略表記(RFC5952準拠)で出力 
既存システムは、格納領域にIPv6アドレスが収まるかをチェック 
24 
③データとしてIPアドレスを扱う箇所を IPv4/IPv6の両方に対応させる
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
おわりに 
- 25 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
まとめ 
IPv6を使える環境が増えている 
IPv4とIPv6の違い:アドレス空間が異なる ⇒互換性なし 
IPアドレスのハードコーディングはダメ。ゼッタイ。 
IPv6対応の基本方針 
IPv6対応=IPv6/IPv4の両方で動作させること 
シングルソースコードで対応する 
IPv6対応のポイント 
1.IPv4/IPv6両対応のプログラミング言語と実行環境を使う 
2.通信処理をIPv4/IPv6の両方に対応させる 
3.データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に 対応させる 
26 
決して難しくない! 
今日から開発するアプリケーションはIPv6に対応させよう!
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
つづきはWebで(参考文献) 
「アプリケーションのIPv6対応ガイドライン 基礎編」/IPv6 普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーション のIPv6対応検討SWG 
http://www.v6pc.jp/jp/entry/wg/2012/12/ipv610.phtml 
「アプリケーションのIPv6対応ガイドライン Webアプリ編 (案)」/IPv6普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーションのIPv6対応検討SWG 
http://www.v6pc.jp/jp/entry/wg/2014/06/ipv6web.phtml 
Internet Week 2013 「T2 アプリケーション・サービスの IPv6対応」 
軽量プログラミング言語のIPv6対応 Perl編 
https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2- watanabe-2.pdf 
軽量プログラミング言語のIPv6対応 PHP編 
https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2- hatano-2.pdf 
- 27 -
Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 
ご清聴いただき、 ありがとうございました 
- 28 -

Lightweight Language Diverプレゼン資料:アプリケーションのIPv6対応のススメ(LL編)

  • 1.
    アプリケーションのIPv6対応の ススメ(LL編) 2014年8月23日 技術本部 技術開発部 ネットワークエキスパート 渡辺 露文 Lightweight Language Diver 〜LLのDeepなところにDiveする前に知ってほしいIPのこと〜
  • 2.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. About me 渡辺 露文 (わたなべ つゆふみ) 富士ソフト株式会社 技術本部技術開発部 ネットワークエキスパート 業務経歴 1999年 富士ソフトABC株式会社(現 富士ソフト株式会社)入社 入社後、ISP、データセンター顧客向けシステムなどB2Cのシステム 開発・インフラ構築・運用に従事 2008年〜 社内システムのインフラ企画・構築・運用に従事 2011年〜 技術調査および社内技術者教育に従事 主な社外活動 IPv6普及・高度化推進協議会 技術評論社 Software Design にて連載(2012年12月号〜 2014年1月号;共同執筆) 1 < twatanab@fsi.co.jp >
  • 3.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. Do you know … - 2 - IPv6 ? Internet Protocol version 6 インターネットの通信に関する規約(RFC791) IPネットワークに接続するには1つ以上のIPアドレスが必要 皆さんが馴染んでいるのはIPv4(例:10.1.2.3)
  • 4.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. 実はIPv6を使える環境が増えています 最近のOS Windows Vista以降 Mac OS X Linux FreeBSD … インターネット回線 フレッツ光ネクスト au ひかり NURO 光 … - 3 - いずれもデフォルトで利用可能 利用可能 既存ユーザへの自動導入も進行中 すでに、ユーザからあなたのサービスにIPv6で アクセスされようとしている…かもしれない
  • 5.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. 余談:IPv6でインターネットにアクセスできるかの確認方法 Webブラウザで http://www.test-ipv6.jp にアクセス Webブラウザで http://www.kame.net にアクセス - 4 - IPv6でアクセスすると、 亀が踊ります♪
  • 6.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. 日本におけるIPv6の普及状況 フレッツ光ネクストのIPv6普及率(2014年3月) IPv6普及率:3.2% フレッツ光ネクスト契約数:11,301,000 au ひかりのIPv6普及率(2014年3月):67% - 5 - 今後本格的に普及する前に IPv6対応を始めたほうが良い 出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査 http://v6pc.jp/jp/spread/ipv6spread_03.phtml
  • 7.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. IPv6の背景:IPv4アドレス枯渇 - 6 - IPv4アドレスの在庫状況(地域インターネットレジストリ) アフリカ(AFRINIC) 在庫あり アジア/環太平洋(APNIC) 枯渇 北米(ARIN) 枯渇間近 中南米、カリブ海(LACNIC) 枯渇 ヨーロッパ、中東、中央アジア(RIPE NCC) 枯渇 世界的に足りなくなってきている いずれ、IPv6アドレスしか持たない ユーザ、システムが現れるようになる 通信事業者、ISP、 データセンター、 クラウド事業者等の 在庫が残っているのみ
  • 8.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. もう少しIPv6を知ろう! - 7 -
  • 9.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. IPv4とIPv6とでは何が違うのか? アドレス体系が異なる(IPv6のアドレス空間は広大) 例 IPv4)192.0.2.1 IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 他にも機能的にIPv4と異なることがある - 8 - IPv4とIPv6は互換性がない IPv4アドレス IPv6アドレス アドレス長 32bit 128bit 文字列 表記 表記法 8bitずつ区切り、 10進数で表記 16bitずつ区切り、 16進数で表記 区切り文字 . (ドット) : (コロン) 文字列長 15文字以内 39文字以内 RFC5952に 文書化されて いる IPv6アドレス 推奨テキスト 表記ルールに 従い省略可能
  • 10.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. IPv4とIPv6の接続性 9 Internet IPv4対応 (IPv6非対応) システム IPv4/IPv6 両対応システム IPv6対応 (IPv4非対応) システム (1) (2) (3) IPv4端末 IPv4/IPv6 両対応端末 IPv6端末 IPv4 IPv6
  • 11.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. IPv6に対応しない場合の影響 1.IPv6のみの環境と通信できない ビジネス機会を損失する システム連携が行えず要件を満たせなくなる 2.今後、IPv4はサービスレベルが低下していく(予想) IPv4アドレス節約のため、通信事業者等によるCGN(Carrier Grade NAT)導入により、遅くなったり、利用できるセッション 数が少なくなったりする(と予想される) 10 IPv6に対応しなきゃ! 自分たちは悪くないのに、自分たちの サービスが低下したと思われてしまう
  • 12.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. インフラがIPv6に対応するだけでいいのでは? ネットワークとサーバががIPv6に対応すれば、IPv6で 接続可能 接続は可能だが… 例えば システム連携がうまくいかない 想定外の挙動をする … - 11 - アプリケーションもIPv6に対応しなきゃ! サービスが正常に動作しない かもしれない
  • 13.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. IPv6対応の話をする前に… このコード、イケてない… 12 IPアドレスのハードコーディングはNG ダメ。ゼッタイ。 IPアドレス直書きすると、 アドレス変更時に修正が 必要なんですよ… 再テストも必要だし… use IO::Socket::IP; $host = “198.51.100.1”; : my $sock = IO::Socket::IP->new( PeerAddr => $host, PeerPort => $port, Proto => 'tcp' ) or die “Error: $!¥n”; : えっ、 IPアドレス直書き? $host = “www.example.com” のようにFQDNで接続先を指定する
  • 14.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. Internet 補足:ネットワークアクセスの作法=名前解決を使う  Webアクセスの例 13 Client Web Server www.example.jp 192.0.2.1 DNS Server 198.51.100.53 ①名前解決問合せ www.example.jp ? ②アドレス応答 www.example.jp ⇒ 192.0.2.1 ③HTTP通信 FQDN FQDNで接続先を指定し、DNSからアドレス取得
  • 15.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. なぜIPアドレス直書きがダメなのか? アプリケーションとインフラでは目的とライフサイクルが 異なる 14 アプリケーションは、IPアドレスに依存すべきではない 目的 変更・改修の理由 アプリケーション 機能の提供 業務要件の変更 サービス内容の変更 ユーザビリティ向上 …,etc. インフラ 資源の提供 資源管理(IPアドレス、サーバラック…) 性能 互いに変更の影響を受けるべきではない 同一システムでも変更・改修の理由・時期は異なる 例)IPアドレスでユーザを識別すべきではない
  • 16.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. さあ、アプリケーションを IPv6に対応させよう! ここからが本題 - 15 -
  • 17.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. アプリケーションIPv6対応の基本方針 IPv6とIPv4の共存期間が長く続く これまでIPv4で提供してきたサービスは、今後も継続してIPv4でも 動作する必要あり 各開発言語が概ねIPv6に対応しており、プロトコルによって開発言 語を分ける必要がなくなった アプリケーションのメンテナンス性を重視し、プロトコルによって 機能差異が生じることを未然に防ぐ 16 IPv6対応 = IPv4とIPv6の両方で動作する シングルソースコードで対応
  • 18.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. アプリケーションのIPv6対応のポイント 17 Ethernet IP(v4/v6) TCP / UDP アプリケーション OS ミドルウェア/ フレームワーク アプリケーション OS フレームワーク HTTP/HTTPS SMTP, SSH, ソケット通信など クライアント サーバ ①IPv4/IPv6両対応の プログラミング言語と実行環境を使う ②通信処理をIPv4/IPv6の 両方に対応させる ③データとしてIPアドレスを 扱う箇所をIPv4/IPv6の 両方に対応させる
  • 19.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ポイント① プログラミング言語と実行環境 プログラミング言語と実行環境に求められること: IPv4/IPv6両方で通信できる 1.名前解決でIPv4/IPv6両方のアドレスが扱える 2.IPv4/IPv6両方で接続できる プログラミングにおける留意点 IPv4/IPv6の双方に対応するライブラリ、オブジェクト、関数、 データ型を使う 従来(IPv4のみ)のものとは別に用意されていることがある –C addrinfo構造体、getaddrinfo() –Perl IO::Socket::IP など アドレス検証、変換などはライブラリを有効活用 18 ①IPv4/IPv6両対応のプログラミング言語と実行環境を使う
  • 20.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ポイント① プログラミング言語と実行環境 Perlの対応状況 考慮すべき要素 対応状況 備考 名前解決 ○ Socket::getaddrinfo() Socket::getnameinfo() CPAN Net::DNS ソケット ○ コアモジュールの Socketは 5.10 か ら部分的に対応 5.14でフル対応 CPANモジュールにも対応しているも のがある 各種(L7) プロトコル HTTP クライアント ▲ 標準では非対応(コアモジュール HTTP::Tiny, LWP等のメジャーなモ ジュールも非対応) SMTP クライアント ▲ 標準では非対応(コアモジュール Net::SMTP) その他 IPv6アドレス の処理 ○ CPANモジュール Net::IPにより対応 - 19 -
  • 21.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ポイント① プログラミング言語と実行環境 PHPの対応状況 考慮すべき要素 対応状況 備考 名前解決 ○ dns_get_record() gethostbyaddr() PEAR Net_DNS2 ソケット ○ inet_pton(), inet_ptop()は 5.1.0 以降 対応 各種(L7) プロトコル HTTP クライアント ○ 各種ファイル関数 cURLなど SMTP クライアント ○ PEAR Net_SMTP mail(), PEAR Mail ⇒システム環境依存 その他 IPv6アドレス の処理 ○ PEAR Net_IPv6拡張パッケージ - 20 -
  • 22.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. 【補足】IPv6アドレスの名前解決  FQDNからIPv6アドレスが名前解決できることが不可欠 1. 権威DNSサーバ上で、接続先サーバのAAAAレコードに IPv6アドレスが登録されている 2. クライアントから接続先サーバのAAAAレコードが引ける Client Web Server www.example.jp 2001:db8:100::1 example.jpの 権威DNS Server  AAAAレコード (IPv4のAレコードに 相当)をリソースレ コードに登録 www.example.jp IN AAAA 2001:db8:100::1 ①名前解決問合せ www.example.jp ? ②AAAA応答 2001:db8:100::1 ③HTTP通信 - 21 -
  • 23.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ポイント② 通信処理の対応  接続の優先順位(標準;RFC6724):IPv6 > IPv4  サーバプログラム  IPv4/IPv6 両プロトコルでの 接続を処理  クライアントプログラム  IPv4/IPv6 両宛先アドレスに接続できるようにする  接続できない状況も想定し、接続失敗時には別の宛先アドレスに 切替えて接続する(フォールバック) 22 ②通信処理をIPv4/IPv6の両方に対応させる IPv6 IPv6 IPv4 IPv4 Client Server アプリケーションの作りが悪いと…  切替えに時間がかかる  正常に切替わらないこともある ユーザの利便性を 損なう
  • 24.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. 通信処理の補足:フォールバック  接続できない場合に別の接続先への接続に切替える動作  IPv6⇒IPv4 / IPv6⇒IPv6 / IPv4⇒IPv4 / IPv4⇒IPv6 23 Client Web Server www.example.jp DNS Server www.example.jp IN AAAA 2001:db8:100::1 www.example.jp IN A 192.0.2.1 ①名前解決問合せ www.example.jp ? ②AAAA応答 2001:db8:100::1 A応答 192.0.2.1 ③HTTP通信(IPv6) 2001:db8:100::1 192.0.2.1 2001:db8:ffff::1 198.51.100.1 ④HTTP通信(IPv4) フォールバック
  • 25.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ポイント③ データとして扱う箇所の対応 入力 整数ではなく文字列で入力 入力値の検証はライブラリの関数・フィルタを活用 例)PHP Net_IPv6::checkIPv6(); (PEARにて提供されるNet_IPv6パッケージに含まれる) 格納、検索、整列、出力 IPアドレス型が定義されている場合は、IPアドレス型を使う 例) PostgreSQLのネットワークアドレス型 IPアドレス型が定義されていない場合は、文字列型で完全表記で 格納、検索、整列、出力 IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 見やすさを求めるときは、省略表記(RFC5952準拠)で出力 既存システムは、格納領域にIPv6アドレスが収まるかをチェック 24 ③データとしてIPアドレスを扱う箇所を IPv4/IPv6の両方に対応させる
  • 26.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. おわりに - 25 -
  • 27.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. まとめ IPv6を使える環境が増えている IPv4とIPv6の違い:アドレス空間が異なる ⇒互換性なし IPアドレスのハードコーディングはダメ。ゼッタイ。 IPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する IPv6対応のポイント 1.IPv4/IPv6両対応のプログラミング言語と実行環境を使う 2.通信処理をIPv4/IPv6の両方に対応させる 3.データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に 対応させる 26 決して難しくない! 今日から開発するアプリケーションはIPv6に対応させよう!
  • 28.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. つづきはWebで(参考文献) 「アプリケーションのIPv6対応ガイドライン 基礎編」/IPv6 普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーション のIPv6対応検討SWG http://www.v6pc.jp/jp/entry/wg/2012/12/ipv610.phtml 「アプリケーションのIPv6対応ガイドライン Webアプリ編 (案)」/IPv6普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーションのIPv6対応検討SWG http://www.v6pc.jp/jp/entry/wg/2014/06/ipv6web.phtml Internet Week 2013 「T2 アプリケーション・サービスの IPv6対応」 軽量プログラミング言語のIPv6対応 Perl編 https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2- watanabe-2.pdf 軽量プログラミング言語のIPv6対応 PHP編 https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2- hatano-2.pdf - 27 -
  • 29.
    Copyright ©2014 FUJISOFTINCORPORATED, All rights reserved. ご清聴いただき、 ありがとうございました - 28 -