osc2015 hamanako ipv6アプリの作り方

37
IPv6対応アプリの作り方 (濃縮版) 2015年2月11日 IPv6普及・高度化推進協議会 渡辺 露文   オープンソースカンファレンス2015 Hamanako jus研究会浜松大会

Upload: v6app

Post on 16-Jul-2015

1.721 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: OSC2015 Hamanako IPv6アプリの作り方

IPv6対応アプリの作り方(濃縮版)

2015年2月11日 IPv6普及・高度化推進協議会

渡辺 露文  

オープンソースカンファレンス2015 Hamanakojus研究会浜松大会

Page 2: OSC2015 Hamanako IPv6アプリの作り方

渡辺 露文(わたなべ つゆふみ) Twitter: @tsuyu23 普段は某SIer勤務 IPv6普及・高度化推進協議会 会員 IPv6導入に起因する問題検討SWG アプリケーションのIPv6対応検討SWG 技術評論社Software Design誌連載 (2012年12月号~    2014年1月号)

2

About me

Page 3: OSC2015 Hamanako IPv6アプリの作り方

3

IPv6 ?Internet Protocol version 6インターネットの通信に関する規約(RFC791)IPネットワークに接続するには1つ以上のIPアドレスが必要皆さんが馴染んでいるのはIPv4(例:10.1.2.3)

Do you know …

Page 4: OSC2015 Hamanako IPv6アプリの作り方

4

Agenda(IPv6の話の前に) ここがヘンだよ!そのコード

いまどきのIPv6を知ろう!

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

Page 5: OSC2015 Hamanako IPv6アプリの作り方

5

ここがヘンだよ!そのコードIPv6の話の前に…

Page 6: OSC2015 Hamanako IPv6アプリの作り方

6

そのコード、イケてない…(1)

とある Perl のプログラム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”; : :

Page 7: OSC2015 Hamanako IPv6アプリの作り方

7

このコード、イケてない…(2)

とある Androidプログラミング書籍におけるソケット通信のサンプルコード

public class SocketEx… … … ��private final static String IP=“192.168.11.12”;//★変更必須

良い子は真似しちゃダメ

Page 8: OSC2015 Hamanako IPv6アプリの作り方

8

どこがイケてない  (というかヘン)?

IPアドレスのハードコーディングはNG!

$host = “www.example.com”のようにFQDNで接続先を指定する

ダメ。ゼッタイ。

Page 9: OSC2015 Hamanako IPv6アプリの作り方

Internet

9

ネットワークアクセスの作法=名前解決を使う

Client

Web Server www.example.jp 2001:db8:100::1192.0.2.1

DNS Server 198.51.100.53

①名前解決問合せwww.example.jp ?

②アドレス応答www.example.jp ⇒ 2001:db8:100::1

  192.0.2.1

③HTTP通信

FQDN

FQDNで接続先を指定し、DNSからアドレス取得

Page 10: OSC2015 Hamanako IPv6アプリの作り方

10

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

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

目的 変更・改修の理由アプリケーション 機能の提供 ■ 業務要件の変更

■ サービス内容の変更■ ユーザビリティ向上 …,etc.

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

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

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

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

Page 11: OSC2015 Hamanako IPv6アプリの作り方

11

いまどきのIPv6を知ろう!

Page 12: OSC2015 Hamanako IPv6アプリの作り方

最近のOS Windows Vista以降 Mac OS X Linux FreeBSD

 …

12

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

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

Page 13: OSC2015 Hamanako IPv6アプリの作り方

インターネット回線 フレッツ光ネクスト au ひかり NURO 光

 …

13

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

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

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

Page 14: OSC2015 Hamanako IPv6アプリの作り方

14

日本におけるIPv6の普及状況

フレッツ光ネクストのIPv6普及率 (2014年9月)

IPv6普及率:3.9%フレッツ光ネクスト契約数:15,805,000契約

au ひかりのIPv6普及率(2014年9月):99%

今後本格的に普及する前にIPv6対応を始めたほうが良い

出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査   http://v6pc.jp/jp/spread/ipv6spread_03.phtml

Page 15: OSC2015 Hamanako IPv6アプリの作り方

15

余談:確認してみよう!IPv6でインターネットにアクセスできるかな?

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

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

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

Page 16: OSC2015 Hamanako IPv6アプリの作り方

16

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

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

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

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

Page 17: OSC2015 Hamanako IPv6アプリの作り方

17

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アドレス IPv6アドレスアドレス長 32bit 128bit

文字列表記

表記法 8bitずつ区切り、10進数で表記

16bitずつ区切り、16進数で表記

区切り文字 . (ドット) : (コロン)文字列長 15文字以内 39文字以内

Page 18: OSC2015 Hamanako IPv6アプリの作り方

グローバルスコープ

IPv4とIPv6とでは何が違うのか?②

18

リンクローカルスコープリンクローカルアドレス fe80::/10

ユニークローカルアドレス fc00::/7

グローバルユニキャストアドレス 2000::/3

IPv6では1つのNICに複数のアドレスを           有効範囲に応じて割当て、使い分ける

Page 19: OSC2015 Hamanako IPv6アプリの作り方

19

IPv4とIPv6の関係

優先順位が変わるケースもある デフォルトを変更している環境 RFC6724に準拠していない実装

IPv4とIPv6は互換性がない

IPv6 > IPv4

Page 20: OSC2015 Hamanako IPv6アプリの作り方

20

IPv4とIPv6の接続性

Internet

IPv4対応(IPv6非対応)システム

IPv4/IPv6 両対応システム

IPv6対応(IPv4非対応)システム

(1)(2)

(3)

IPv4端末

IPv4/IPv6 両対応端末

IPv6端末

IPv4

IPv6

Page 21: OSC2015 Hamanako IPv6アプリの作り方

21

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

1. IPv6のみの環境と通信できないビジネス機会を損失するシステム連携が行えず要件を満たせなくなる

2.今後、IPv4はサービスレベルが低下していく通信事業者等によるCGN(Carrier Grade NAT)導入により、遅くなり、使用できるセッション数が減る可能性がある

IPv6に対応しなきゃ!

Page 22: OSC2015 Hamanako IPv6アプリの作り方

22

IPv6対応アプリの重要性ネットワークとサーバがIPv6に対応すれば、IPv6で接続可能

接続は可能だが…

アプリが固まるシステム連携がうまくいかない想定外の挙動をする

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

アプリが動作しなければユーザは利用できない

Page 23: OSC2015 Hamanako IPv6アプリの作り方

23

もはやIPv6対応しないと時代遅れ?(1)

先日のGHOST騒ぎ…脚注部分に注目!

「gethostbyname 関数は、IPv6 の登場によりあまり利用されなくなっている」‼

http://www.ipa.go.jp/security/announce/20150129-glibc.html

Page 24: OSC2015 Hamanako IPv6アプリの作り方

24

もはやIPv6対応しないと時代遅れ?(2)

GHOSTネタをもう一つ

http://blog.trendmicro.co.jp/archives/10818

多くの新しいアプリケーションでは、この脆弱な

「gethostbyname*()」関数ではなく、IPv6をサポートする関数「getaddrinfo()」を使用しているも

のと考えられます

Page 25: OSC2015 Hamanako IPv6アプリの作り方

25

さあ、アプリケーションをIPv6に対応させよう!ここからが本題

Page 26: OSC2015 Hamanako IPv6アプリの作り方

26

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

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

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

Page 27: OSC2015 Hamanako IPv6アプリの作り方

27

アプリケーションのIPv6対応のポイント

EthernetIP(v4/v6)TCP / UDP

アプリケーション

OS

ミドルウェア/フレームワーク

アプリケーション

OS

フレームワーク

HTTP/HTTPSSMTP, SSH,ソケット通信など

クライアント サーバ

①IPv4/IPv6両対応のプログラミング言語と実行環境を使う

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

③データとしてIPアドレスを 扱う箇所をIPv4/IPv6の 両方に対応させる

Page 28: OSC2015 Hamanako IPv6アプリの作り方

28

ポイント① IPv4/IPv6両対応のプログラミング言語と実行環境を使う

プログラミング言語と実行環境におけるIPv4/IPv6両対応とは?

名前解決機構がIPv4/IPv6両方のアドレスを適切に扱える

IPv4/IPv6両方で通信できる

これらを満たすプログラミング言語、実装環境を利用する  例)C言語: gethostbyname() ではなく、 getaddrinfo()

Page 29: OSC2015 Hamanako IPv6アプリの作り方

29

ポイント② 通信処理をIPv4/IPv6の両方に対応させる(1)

サーバプログラム IPv4/IPv6 両プロトコルでの接続を受付けられるようにする

クライアントプログラム IPv4/IPv6 両宛先アドレスに接続できるようにする 接続できない状況も想定し、接続失敗時には別の 宛先アドレスに切替えて接続する(フォールバック)

 

IPv6 IPv6

IPv4 IPv4

Client Server

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

ユーザの利便性を損なう

Page 30: OSC2015 Hamanako IPv6アプリの作り方

30

ポイント② 通信処理をIPv4/IPv6の両方に対応させる(2)

フォールバック 接続できない場合に、別の接続先への接続に切替える動作

Client

Web Serverwww.example.jp

DNS Server

www.example.jp IN AAAA 2001:db8:100::1www.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 31: OSC2015 Hamanako IPv6アプリの作り方

31

ポイント③ データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に対応させる

入力はユーザに配慮しつつ、値の検証をしっかり行う IPアドレス型もしくは、完全表記(文字列長39文字)を文字列型で扱う 見やすさを求めるときは省略表記(RFC5952)で出力

入力出力

整列

検索

格納

Page 32: OSC2015 Hamanako IPv6アプリの作り方

32

おわりに

Page 33: OSC2015 Hamanako IPv6アプリの作り方

33

まとめ(1)IPアドレスのハードコーディングはダメ。ゼッタイ。

IPv6を使える環境が増えている IPv4とIPv6の違い:アドレス体系が異なる , etc.                  ⇒互換性なし

IPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する

Page 34: OSC2015 Hamanako IPv6アプリの作り方

34

まとめ(2)IPv6対応のポイント 1. IPv4/IPv6両対応のプログラミング言語と実行環境を使う

2.通信処理をIPv4/IPv6の両方に対応させる 3.データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に対応させる

  決して難しくない! 今日から開発するアプリケーションは

IPv6に対応させよう!

Page 35: OSC2015 Hamanako IPv6アプリの作り方

35

つづきは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

Page 36: OSC2015 Hamanako IPv6アプリの作り方

次は東京で会いましょう!

36

Page 37: OSC2015 Hamanako IPv6アプリの作り方

37

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