Your SlideShare is downloading. ×

OSC2015 Hamanako IPv6アプリの作り方
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

OSC2015 Hamanako IPv6アプリの作り方

5
views

Published on

OSC2015 Hamanakoにて行ったセミナーの配布資料です。

OSC2015 Hamanakoにて行ったセミナーの配布資料です。

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. IPv6対応アプリの作り方 (濃縮版) 2015年2月11日 IPv6普及・高度化推進協議会 渡辺 露文   オープンソースカンファレンス2015 Hamanako jus研究会浜松大会
  • 2. 渡辺 露文(わたなべ つゆふみ) Twitter: @tsuyu23 普段は某SIer勤務 IPv6普及・高度化推進協議会 会員 IPv6導入に起因する問題検討SWG アプリケーションのIPv6対応検討SWG 技術評論社
 Software Design誌連載
 (2012年12月号∼
     2014年1月号) 2 About me
  • 3. 3 IPv6 ? Internet Protocol version 6 インターネットの通信に関する規約(RFC791) IPネットワークに接続するには1つ以上のIPアドレスが必要 皆さんが馴染んでいるのはIPv4(例:10.1.2.3) Do you know …
  • 4. 4 Agenda (IPv6の話の前に)
 ここがヘンだよ!そのコード いまどきのIPv6を知ろう! さあ、アプリケーションをIPv6に対応させよ う!
  • 5. 5 
 ここがヘンだよ!そのコード IPv6の話の前に…
  • 6. 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”; : :
  • 7. 7 このコード、イケてない… (2) とある Androidプログラミング書籍に
 おけるソケット通信のサンプルコード public class SocketEx… … … ��private final static String IP=“192.168.11.12”;//★変更必須 良い子は真似しちゃダメ
  • 8. 8 どこがイケてない
   (というかヘン)? IPアドレスのハードコーディングは NG! $host = www.example.com のようにFQDNで接続先を指定する ダメ。ゼッタイ。
  • 9. Internet 9 ネットワークアクセスの 作法=名前解決を使う Client Web Server www.example.jp 2001:db8:100::1
 192.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からアドレス取得
  • 10. 10 なぜIPアドレス直書きが ダメなのか? アプリケーションは、IPアドレスに依存すべきではない 目的 変更・改修の理由 アプリケーション 機能の提供 ■ 業務要件の変更 ■ サービス内容の変更 ■ ユーザビリティ向上 …,etc. インフラ 資源の提供 ■ 資源管理(IPアドレス、サーバラック…) ■ 性能 互いに変更の影響を受けるべきではない 同一システムでも変更・改修の理由・時期は異なる 例)IPアドレスでユーザを識別すべきではない
  • 11. 11 いまどきのIPv6を知ろう!
  • 12. 最近のOS Windows Vista以降 Mac OS X Linux FreeBSD  … 12 実はIPv6を使える環境が 増えています(1) いずれも デフォルトで 利用可能
  • 13. インターネット回線 フレッツ光ネクスト au ひかり NURO 光  … 13 実はIPv6を使える環境が 増えています(2) 利用可能 既存ユーザへの自動導入も
 進行中 すでに、ユーザからあなたのサービスにIPv6で
 アクセスされようとしている…かもしれない
  • 14. 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
  • 15. 15 余談:確認してみよう!
 IPv6でインターネットにアクセス できるかな? Webブラウザで http://www.test-ipv6.jp にアクセス Webブラウザで http://www.kame.net にアクセス IPv6でアクセスすると、 亀が踊ります♪
  • 16. 16 IPv6の背景:
   IPv4アドレス枯渇 IPv4アドレスの在庫状況
 (地域インターネットレジストリ) 通信事業者、ISP、 データセンター、
 クラウド事業者等の 在庫が残るのみ 世界的に足りなくなってきている
  • 17. 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文字以内
  • 18. グローバルスコープ IPv4とIPv6とでは何が違 うのか?② 18 リンクローカルスコープリンクローカルアドレス fe80::/10 ユニークローカルアドレス fc00::/7 グローバルユニキャストアドレス 2000::/3 IPv6では1つのNICに複数のアドレスを
            有効範囲に応じて割当て、使い分ける
  • 19. 19 IPv4とIPv6の関係 優先順位が変わるケースもある デフォルトを変更している環境 RFC6724に準拠していない実装 IPv4とIPv6は互換性がない IPv6 > IPv4
  • 20. 20 IPv4とIPv6の接続性 Internet IPv4対応
 (IPv6非対応)
 システム IPv4/IPv6
 両対応システム IPv6対応
 (IPv4非対応)
 システム (1) (2) (3) IPv4端末 IPv4/IPv6
 両対応端末 IPv6端末 IPv4 IPv6
  • 21. 21 IPv6に対応しない場合の 影響 1. IPv6のみの環境と通信できない ビジネス機会を損失する システム連携が行えず要件を満たせなくなる 2. 今後、IPv4はサービスレベルが低下していく 通信事業者等によるCGN(Carrier Grade NAT)
 導入により、遅くなり、使用できるセッション数 が減る可能性がある IPv6に対応しなきゃ!
  • 22. 22 IPv6対応アプリの重要性 ネットワークとサーバがIPv6に対応すれば、IPv6で接 続可能 接続は可能だが… アプリが固まる システム連携がうまくいかない 想定外の挙動をする   … アプリケーションもIPv6に対応しなきゃ! アプリが動作しなければ
 ユーザは利用できない
  • 23. 23 もはやIPv6対応しないと
 時代遅れ?(1) 先日のGHOST騒ぎ… 脚注部分に注目! 「gethostbyname 関数は、 IPv6 の登場によりあまり利用されなく なっている」‼ http://www.ipa.go.jp/security/announce/20150129-glibc.html
  • 24. 24 もはやIPv6対応しないと 時代遅れ?(2) GHOSTネタをもう一つ http://blog.trendmicro.co.jp/archives/10818 多くの新しいアプリケー ションでは、この脆弱な 「gethostbyname*()」関数ではなく、 IPv6をサポートする関数 「getaddrinfo()」を使用しているも のと考えられます
  • 25. 25 さあ、アプリケーションを
 IPv6に対応させよう! ここからが本題
  • 26. 26 アプリケーションIPv6対 応の基本方針  IPv6対応 =     IPv4とIPv6の両方で動作する シングルソースコードで対応
  • 27. 27 アプリケーションのIPv6 対応のポイント Ethernet IP(v4/v6) TCP / UDP アプリケーション OS ミドルウェア/
 フレームワーク アプリケーション OS フレームワーク HTTP/HTTPS SMTP, SSH,
 ソケット通信など クライアント サーバ ①IPv4/IPv6両対応のプログラミング言語と実行環境を使う ②通信処理をIPv4/IPv6の
  両方に対応させる ③データとしてIPアドレスを
  扱う箇所をIPv4/IPv6の
  両方に対応させる
  • 28. 28 ポイント① IPv4/IPv6両対応のプ ログラミング言語と実行環境を使う プログラミング言語と実行環境におけるIPv4/ IPv6両対応とは? 名前解決機構が
 IPv4/IPv6両方のアドレスを適切に扱える IPv4/IPv6両方で通信できる これらを満たすプログラミング言語、実装環境を利用する  例)C言語: gethostbyname() ではなく、 getaddrinfo()
  • 29. 29 ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(1) サーバプログラム IPv4/IPv6 両プロトコルでの接続を
 受付けられるようにする クライアントプログラム IPv4/IPv6 両宛先アドレスに接続できるようにする 接続できない状況も想定し、接続失敗時には別の
 宛先アドレスに切替えて接続する(フォールバック)   IPv6 IPv6 IPv4 IPv4 Client Server アプリケーションの作りが悪いと… ■ 切替えに時間がかかる ■ 正常に切替わらないこともある ユーザの利便性を損なう
  • 30. 30 ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(2) フォールバック 接続できない場合に、別の接続先への接続に切替える動作 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) フォールバック
  • 31. 31 ポイント③ データとしてIPアドレス を扱う箇所をIPv4/IPv6の両方に 対応させる 入力はユーザに配慮しつつ、値の検証をしっかり行う IPアドレス型もしくは、完全表記(文字列長39文字) を文字列型で扱う 見やすさを求めるときは省略表記(RFC5952)で出力 入力出力 整列 検索 格納
  • 32. 32 おわりに
  • 33. 33 まとめ(1) IPアドレスのハードコーディングはダメ。ゼッタイ。
 IPv6を使える環境が増えている IPv4とIPv6の違い:アドレス体系が異なる , etc. 
                   互換性なし
 IPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する
  • 34. 34 まとめ(2) IPv6対応のポイント 1. IPv4/IPv6両対応のプログラミング言語と実行環 境を使う 2. 通信処理をIPv4/IPv6の両方に対応させる 3. データとしてIPアドレスを扱う箇所をIPv4/IPv6の 両方に対応させる   決して難しくない! 今日から開発するアプリケーションは
 IPv6に対応させよう!
  • 35. 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
  • 36. 次は東京で会いましょう! 36
  • 37. 37 ご清聴いただき、
 ありがとうございました