29
アプリケーションのIPv6対応の ススメ(LL編) 2014年8月23日 技術本部 技術開発部 ネットワークエキスパート 渡辺 露文 Lightweight Language Diver 〜LLのDeepなところにDiveする前に知ってほしいIPのこと〜

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

  • Upload
    v6app

  • View
    526

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

アプリケーションのIPv6対応の ススメ(LL編)

2014年8月23日

技術本部 技術開発部

ネットワークエキスパート

渡辺 露文

Lightweight Language Diver

〜LLのDeepなところにDiveする前に知ってほしいIPのこと〜

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

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 >

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

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)

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

実はIPv6を使える環境が増えています

最近のOS

Windows Vista以降

Mac OS X

Linux

FreeBSD

インターネット回線

フレッツ光ネクスト

au ひかり

NURO 光

- 3 -

いずれもデフォルトで利用可能

利用可能 既存ユーザへの自動導入も進行中

すでに、ユーザからあなたのサービスにIPv6で アクセスされようとしている…かもしれない

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

余談:IPv6でインターネットにアクセスできるかの確認方法

Webブラウザで http://www.test-ipv6.jp にアクセス

Webブラウザで http://www.kame.net にアクセス

- 4 -

IPv6でアクセスすると、亀が踊ります♪

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv6の背景:IPv4アドレス枯渇

- 6 -

IPv4アドレスの在庫状況(地域インターネットレジストリ)

アフリカ(AFRINIC) 在庫あり

アジア/環太平洋(APNIC) 枯渇

北米(ARIN) 枯渇間近

中南米、カリブ海(LACNIC) 枯渇

ヨーロッパ、中東、中央アジア(RIPE NCC) 枯渇

世界的に足りなくなってきている

いずれ、IPv6アドレスしか持たないユーザ、システムが現れるようになる

通信事業者、ISP、データセンター、 クラウド事業者等の 在庫が残っているのみ

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

もう少しIPv6を知ろう!

- 7 -

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

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アドレス 推奨テキスト表記ルールに従い省略可能

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv6に対応しない場合の影響

1. IPv6のみの環境と通信できない

ビジネス機会を損失する

システム連携が行えず要件を満たせなくなる

2. 今後、IPv4はサービスレベルが低下していく(予想)

IPv4アドレス節約のため、通信事業者等によるCGN(Carrier Grade NAT)導入により、遅くなったり、利用できるセッション数が少なくなったりする(と予想される)

10

IPv6に対応しなきゃ!

自分たちは悪くないのに、自分たちの サービスが低下したと思われてしまう

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

インフラがIPv6に対応するだけでいいのでは?

ネットワークとサーバががIPv6に対応すれば、IPv6で 接続可能

接続は可能だが…

例えば

システム連携がうまくいかない

想定外の挙動をする

- 11 -

アプリケーションもIPv6に対応しなきゃ!

サービスが正常に動作しない かもしれない

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

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で接続先を指定する

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

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からアドレス取得

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

なぜIPアドレス直書きがダメなのか?

アプリケーションとインフラでは目的とライフサイクルが異なる

14

アプリケーションは、IPアドレスに依存すべきではない

目的 変更・改修の理由

アプリケーション 機能の提供 業務要件の変更 サービス内容の変更 ユーザビリティ向上 …,etc.

インフラ 資源の提供 資源管理(IPアドレス、サーバラック…) 性能

互いに変更の影響を受けるべきではない

同一システムでも変更・改修の理由・時期は異なる

例)IPアドレスでユーザを識別すべきではない

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

さあ、アプリケーションを IPv6に対応させよう!

ここからが本題

- 15 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

アプリケーションIPv6対応の基本方針

IPv6とIPv4の共存期間が長く続く

これまでIPv4で提供してきたサービスは、今後も継続してIPv4でも動作する必要あり

各開発言語が概ねIPv6に対応しており、プロトコルによって開発言語を分ける必要がなくなった

アプリケーションのメンテナンス性を重視し、プロトコルによって機能差異が生じることを未然に防ぐ

16

IPv6対応 = IPv4とIPv6の両方で動作する

シングルソースコードで対応

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

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の 両方に対応させる

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

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両対応のプログラミング言語と実行環境を使う

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

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 -

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

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 -

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

ポイント② 通信処理の対応

接続の優先順位(標準;RFC6724):IPv6 > IPv4

サーバプログラム IPv4/IPv6 両プロトコルでの

接続を処理

クライアントプログラム IPv4/IPv6 両宛先アドレスに接続できるようにする

接続できない状況も想定し、接続失敗時には別の宛先アドレスに 切替えて接続する(フォールバック)

22

②通信処理をIPv4/IPv6の両方に対応させる

IPv6 IPv6

IPv4 IPv4

Client Server

アプリケーションの作りが悪いと… 切替えに時間がかかる 正常に切替わらないこともある

ユーザの利便性を損なう

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

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)

フォールバック

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

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の両方に対応させる

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

おわりに

- 25 -

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

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に対応させよう!

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

ご清聴いただき、 ありがとうございました

- 28 -