View
525
Download
0
Category
Preview:
DESCRIPTION
皆さんが作るアプリケーションは、IPv6環境でも正常に動作しますか? 現在、IPv6が利用可能なネットワーク、サーバ、クライアントが増加しており、今後ますますの増加が見込まれます。 すなわち、皆さんが作るアプリケーションが徐々にIPv6環境で使われるようになるのです。 開発したアプリケーションがIPv6環境でも正常に動作するためには、対応が必要になります。 本発表では、IPv6の概要と、アプリケーションのIPv6対応のポイントを解説します。
Citation preview
アプリケーションの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 -
Recommended