Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方

IPv6を使える環境が増えてきました。これに対してWebサービスの対応状況を考えると、対応はこれからと感じられます。
本資料では、WebサービスをIPv6に対応させるポイントを解説します。
また、LL(軽量プログラミング言語)の対応状況、VPS/IaaSの対応状況を紹介します。

  • Login to see the comments

20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方

  1. 1. IPv6対応Webサービスの作り方 2014年10月23日 技術本部 技術開発部 渡辺 露文 IPv6 Summit in FUKUOKA 2014
  2. 2. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. About me 渡辺 露文 (わたなべ つゆふみ) 富士ソフト株式会社 技術本部技術開発部 ネットワークエキスパート 業務経歴 1999年 富士ソフトABC株式会社(現 富士ソフト株式会社)入社 入社後、ISP、データセンター顧客向けシステムなどのシステム開発・イン フラ構築・運用、社内システムのインフラ企画・構築・運用に従事 2011年~ 技術調査および社内技術者教育に従事 主な社外活動 IPv6普及・高度化推進協議会 –アプリケーションのIPv6対応検討SWG –IPv6導入に起因する問題検討SWG 技術評論社 Software Design にて連載(2012年12月号~ 2014年1月号;共同執筆)  1 < twatanab@fsi.co.jp >
  3. 3. 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)
  4. 4. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 実はIPv6を使える環境が増えています① 最近のOS Windows Vista以降 Mac OS X Linux FreeBSD … - 3 - いずれも デフォルトで利用可能
  5. 5. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 実はIPv6を使える環境が増えています② インターネット回線 フレッツ光ネクスト au ひかり NURO 光 … - 4 - 利用可能 既存ユーザへの 自動導入も進行中 すでに、ユーザからあなたのサービスにIPv6で アクセスされようとしている…かもしれない
  6. 6. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 日本におけるIPv6の普及状況 フレッツ光ネクストのIPv6普及率(2014年6月) IPv6普及率:3.1% フレッツ光ネクスト契約数:13,588,000 au ひかりのIPv6普及率(2014年6月):68% - 5 - 今後本格的に普及する前に IPv6対応を始めたほうが良い 出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査 http://v6pc.jp/jp/spread/ipv6spread_03.phtml
  7. 7. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 余談:IPv6でインターネットにアクセスできるかの確認方法 Webブラウザで http://www.test-ipv6.jp にアクセス Webブラウザで http://www.kame.net にアクセス - 6 - IPv6でアクセスすると、 亀が踊ります♪
  8. 8. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6の背景:IPv4アドレス枯渇 IPv4アドレスの在庫状況 (地域インターネットレジストリ) 7 通信事業者、ISP、 データセンター、 クラウド事業者等の 在庫が残るのみ 世界的に足りなくなってきている
  9. 9. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Agenda 1.IPv6対応の話をする前に 2.IPv6対応Webサービスの作り方 3.LL(軽量プログラミング言語)の対応状況 4.VPS/IaaSのIPv6対応状況 - 8 -
  10. 10. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 1. IPv6対応の話をする前に 1.Webサービスを作る上で知っておくべきIPv6の基礎 2.気を付けるべきこと - 9 -
  11. 11. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 1.1. Webサービスを作る上で 知っておくべきIPv6の基礎 - 10 -
  12. 12. 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準拠) - 11 - IPv4アドレス IPv6アドレス アドレス長 32bit 128bit 文字列 表記 表記法 8bitずつ区切り、 10進数で表記 16bitずつ区切り、 16進数で表記 区切り文字 . (ドット) : (コロン) 文字列長 15文字以内 39文字以内
  13. 13. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv4とIPv6とでは何が違うのか?② ユニキャストアドレスの構成 アドレス利用設計 IPv4では、ネットワークアドレス部の長さを調整 IPv6では、原則的にサブネットプレフィックスは固定 12 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 サブネット プレフィックス 64bit インターフェイス ID 64bit ネットワーク アドレス 29bit ホストアドレス 3bit Global Routing Prefix n bits Subnet ID 64 bits Interface ID 64-n bits Subnet Prefix ※ ネットマスク 29bit (255.255.255.248)の場合 8 8 8bit IPv4では収容する端末の見込み台数に応じて最適な大きさの サブネットを設計していたが、IPv6では64bit固定
  14. 14. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. グローバルスコープ IPv4とIPv6とでは何が違うのか?③ 13 リンクローカルスコープ リンクローカルアドレス fe80::/10 ユニークローカルアドレス fc00::/7 グローバルユニキャストアドレス 2000::/3 IPv6では1つのNICに複数のアドレスを 有効範囲に応じて割当て、使い分ける
  15. 15. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv4とIPv6とでは何が違うのか?④ 他にも機能的にIPv4と異なることがある 最も重要なこと: - 14 - IPv4とIPv6は互換性がない
  16. 16. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv4とIPv6の接続性 15 Internet IPv4対応 (IPv6非対応) システム IPv4/IPv6 両対応システム IPv6対応 (IPv4非対応) システム (1) (2) (3) IPv4端末 IPv4/IPv6 両対応端末 IPv6端末 IPv4 IPv6
  17. 17. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6に対応しない場合の影響 1.IPv6のみの環境と通信できない ビジネス機会を損失する システム連携が行えず要件を満たせなくなる 2.今後、IPv4はサービスレベルが低下していく 通信事業者等によるCGN(Carrier Grade NAT)導入に より、遅くなったり、利用できるセッション数が少なく なったりする可能性がある 16 IPv6に対応しなきゃ!
  18. 18. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. WebサービスのIPv6対応 ネットワークとサーバがIPv6に対応すれば、 IPv6で接続可能 接続は可能だが… 例えば システム連携がうまくいかない 想定外の挙動をする … - 17 - アプリケーションのIPv6対応が不可欠! サービスが正常に動作しない かもしれない
  19. 19. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 1.2. IPv6対応の前に気を付ける べきこと - 18 -
  20. 20. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. とあるソースコード このコード、イケてない… 19 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”; :
  21. 21. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. とあるソースコード このコード、イケてない… 20 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アドレス直書き?
  22. 22. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 他にもイケてないコードがある とある Androidプログラミング書籍に おけるソケット通信のサンプルコード - 21 - public class SocketEx… … … private final static String IP=“192.168.11.12”;//★変更必須 良い子はマネしちゃダメ
  23. 23. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6対応の話をする前に… 22 IPアドレスのハードコーディングはNG ダメ。ゼッタイ。 $host = “www.example.com” のようにFQDNで接続先を指定する
  24. 24. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Internet ネットワークアクセスの作法=名前解決を使う  Webアクセスの例 23 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からアドレス取得
  25. 25. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. なぜIPアドレス直書きがダメなのか? 24 アプリケーションは、IPアドレスに依存すべきではない 目的 変更・改修の理由 アプリケーション 機能の 提供 業務要件の変更 サービス内容の変更 ユーザビリティ向上 …,etc. インフラ 資源の 提供 資源管理(IPアドレス、サーバリソース …) 性能 互いに変更の影響を受けるべきではない 同一システムでも変更・改修の理由・時期は異なる 例)IPアドレスでユーザを識別すべきではない
  26. 26. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Cookie内の情報にも気を付ける 25 Cookie内に記載される情報の生成がIPv4アドレスを前提としている 実装が散見される。このようなアプリケーションに関しては、生成ロ ジックを変更する必要がある。 Cookie内の情報としてIPv4アドレスを直接利用している実装がしば しば見られる。特に認証系システムなどでこの種の情報の取扱いがな されている場合が多い。このような実装では、利用者がIPv4/IPv6の 両方の空間を利用しており、どちらを利用するかが一位に定まらない 場合などに問題が発生する。このような実装の場合、単純に IPv4/IPv6両方に対応させることが困難である。 出典:IPv6普及・高度化推進協議会 セキュリティWG IPv6対応セキュリティガイドライン(第1.0版) http://www.v6pc.jp/jp/upload/pdf/swg-IPv6SecurityGuideline_v1.0.pdf
  27. 27. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 1章まとめ Webサービスに重要なIPv4とIPv6の違い アドレス体系が異なる アドレス利用設計が変わる 複数のアドレスを有効範囲に応じて使い分ける IPv4とIPv6は互換性がない WebサービスのIPv6対応にはアプリケーションの 対応が不可欠 IPアドレスのハードコーディングは ダメ。ゼッタイ。 - 26 -
  28. 28. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2. IPv6対応Webサービスの 作り方 2.1. プログラミング言語と実行環境 2.2. 通信処理のIPv6対応 2.3. データとしてIPアドレスを扱う箇所の対応 2.4. DMZのIPv6対応方式とサーバへのアクセス - 27 -
  29. 29. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Webサービス 28 Ethernet IP(v4/v6) TCP / UDP アプリケーション OS ミドルウェア/ フレームワーク アプリケーション OS フレームワーク HTTP/HTTPS SMTP, SSH, ソケット通信など クライアント サーバ アプリケーションを中心に解説します
  30. 30. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. アプリケーションIPv6対応の基本方針① 29 IPv6対応 = IPv4とIPv6の両方で動作する シングルソースコードで対応
  31. 31. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. アプリケーションIPv6対応の基本方針② IPv6とIPv4の共存期間が長く続く これまでIPv4で提供してきたサービスは、今後も 継続してIPv4でも動作する必要がある 30 IPv6対応 = IPv4とIPv6の両方で動作する
  32. 32. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. アプリケーションIPv6対応の基本方針③ 各開発言語が概ねIPv6に対応しており、プロトコルに よって開発言語を分ける必要がなくなった アプリケーションのメンテナンス性を重視し、 プロトコルによって機能差異が生じることを未然に防ぐ 31 シングルソースコードで対応
  33. 33. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. アプリケーションのIPv6対応のポイント 32 Ethernet IP(v4/v6) TCP / UDP アプリケーション OS ミドルウェア/ フレームワーク アプリケーション OS フレームワーク HTTP/HTTPS SMTP, SSH, ソケット通信など クライアント サーバ ①IPv4/IPv6両対応の プログラミング言語と実行環境を使う ②通信処理をIPv4/IPv6の 両方に対応させる ③データとしてIPアドレスを 扱う箇所をIPv4/IPv6の 両方に対応させる
  34. 34. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2.1. プログラミング言語と 実行環境 - 33 -
  35. 35. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. ここでいうIPv4/IPv6両対応とは? プログラミング言語と実行環境におけるIPv4/IPv6 両対応とは? 34 名前解決機構が IPv4/IPv6両方のアドレスを適切に扱える IPv4/IPv6両方で通信できる これらを満たすプログラミング言語、実装環境を利用する
  36. 36. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 実装上の留意点 プログラミング言語、実行環境の選定における留意点 実際には各プロダクトでサポート状況に差異があるため、 開発するアプリケーションが提供する機能を考慮し、個別に 判断する必要がある プログラミングにおける留意点 IPv4/IPv6の双方に対応するライブラリ、オブジェクト、 関数、データ型を使う 従来(IPv4のみ)のものとは別に用意されていることがある –C addrinfo構造体、getaddrinfo() –Java InetAddressクラス –Perl IO::Socket::IP など アドレス検証、変換などはライブラリを有効活用 35
  37. 37. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2.2. 通信処理のIPv6対応 - 36 -
  38. 38. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv4とIPv6の両方で通信できることとは?  クライアント IPv4およびIPv6で 意図するサーバへ 接続できること  サーバ IPv4およびIPv6で 接続を受付けること - 37 - IPv6 IPv6 IPv4 IPv4
  39. 39. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPアドレスを複数持つことがある - 38 - IPv6 IPv6 IPv4 IPv4 複数のアドレスを 持つことがある 複数のアドレスを 持つことがある クライアントがどのアドレスにアクセスするかは サーバ側では予測できない 特定のアドレスに依存したシステムを構成すべきではない
  40. 40. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6の名前解決① FQDNで接続先を指定してIPv6で通信を行うには、 DNSにてFQDNからIPv6アドレスが名前解決できる ことが必要不可欠 FQDNからIPv6アドレスを名前解決 権威DNSサーバ上で接続先サーバのAAAAレコードにIPv6 アドレスが登録されている クライアントから接続先サーバのAAAAレコードが引ける Webアプリケーション開発においては、FQDNのIPv6 アドレスが正しく名前解決できることを確認する - 39 -
  41. 41. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6の名前解決② - 40 - Client Web Server www.example.jp 2001:db8:100::1 example.jpの 権威DNS Server  AAAAレコード (IPv4のAレコードに 相当)をリソースレ コードに登録 ①名前解決問合せ www.example.jp ? ②AAAA応答 2001:db8:100::1 ③HTTP通信 www.example.jp IN AAAA 2001:db8:100::1 www.example.jp IN A 192.0.2.1
  42. 42. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 通信の試行順序 RFC6724 Default Address Selection for IPv6 優先順位が変わるケース デフォルトを変更している環境 RFC6724に準拠していない実装 - 41 - IPv6 > IPv4
  43. 43. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. クライアントプログラム IPv4/IPv6 両宛先アドレスに接続できるように する 接続できない状況も想定し接続失敗時には別の宛先 アドレスに切替えて接続する(フォールバック) - 42 - アプリケーションの作りが悪いと… 切替えに時間がかかる 正常に切替わらないこともある ユーザの利便性を 損なう
  44. 44. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 通信処理の補足:フォールバック  接続できない場合に別の接続先への接続に切替える 動作 43 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) フォールバック
  45. 45. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 想定されるフォールバックの主な原因 44 サーバ側の 問題 サーバが当該のサービスを提供して いない DNS誤登録、障害等 経路の問題 ネットワークの接続性が失われている ISPの不具合 クライアント 側の問題 サーバへの到達性がないアドレスを 選択して通信を行おうとしている グローバルアドレスを使用している 閉域網
  46. 46. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. フォールバックの予防策 45 サーバ 設定の不備を修正する サービスを提供していないIPアドレス をDNSに登録しない サービスを適切に提供する ISP ネットワークの接続性を健全に保つ クライアント IPv6インターネット接続可能なISPと 契約する
  47. 47. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. サーバプログラム IPv4/IPv6 両プロトコルでの接続を処理 主要なWebサーバプログラムは対応済み Apache HTTP Server Microsoft Internet Information Server (IIS) nginx - 46 -
  48. 48. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2.3. データとしてIPアドレスを 扱う箇所の対応 - 47 -
  49. 49. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. データとしてIPアドレスを扱う箇所 48 入力 出力 整列 検索 格納
  50. 50. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv4/IPv6アドレス比較 49 IPv4アドレス IPv6アドレス アドレス長 32bit 128bit 文字列 表記 表記法 8bitずつ区切り、 10進数で表記 16bitずつ区切り、 16進数で表記 (省略表記あり) 区切り文字 . (ドット) : (コロン) 文字列長 15文字以内 39文字以内 サブネットマスク/プレフィックス長を 考慮すると、上記+”/”+数字3文字
  51. 51. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6アドレス表記法 特段の事情がない限り RFC5952 の表記ルールに 従い表記する(省略表記) アドレス表記例 IPv4)192.0.2.1 IPv6完全表記) 2001:0db8:0000:0000:0001:0000:0000:0001 IPv6省略表記)2001:db8::1:0:0:1 50
  52. 52. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6アドレスの文字列長 IPv6アドレスの文字列長:39文字 プレフィックスを加味すると:43文字 例外(39文字を超えることがある) リンクローカルアドレスにゾーンID(スコープID)を 付与してインターフェースを識別する場合 例)fe80::1%eth1 一部の特殊アドレス IPv4射影アドレス等 –例)::ffff:192.168.0.1 - 51 - IPv4射影アドレス IPv4 アドレスを IPv6 アドレスとして表現する ための IPv6 アドレス。上位80ビットに0、81~96ビット目に1、下位32ビットにIPv4アドレ スを埋め込む。機器内部での使用に限られ、パ ケットの始点/終点アドレスには使われない。 出典: IPv6関連用語集 IPv4-mapped(IPv6) address
  53. 53. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. IPv6アドレスを扱えないIPアドレス入力・格納 15文字までの文字列(varchar(15)) 1つの整数として扱う 1オクテットずつ4つの整数として扱う - 52 - そのままではIPv6アドレスを格納できず、エラーとなる IPv4/IPv6両対応 39文字以内の文字列 [VARCHAR(39)] Good! Bad!
  54. 54. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Webフォームからの入力 入力値の検証 IPアドレスを扱う場合、入力された文字列がIPアドレス として取りうる値であることを検証 IPv4アドレス、IPv6アドレス いずれかとして取りうる値 2箇所で実施可能 ブラウザ側(HTML5のForm Validation等) サーバ側 アドレス処理ライブラリを利用すると便利 例)PHP Net_IPv6::checkIPv6(); (PEARにて提供されるNet_IPv6パッケージに含まれる) - 53 -
  55. 55. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 格納、検索、整列、出力 IPアドレス型が定義されている場合は、IPアドレス型 を使う 例) PostgreSQLのネットワークアドレス型 IPアドレス型が定義されていない場合は、文字列型で 完全表記を使う IPv6完全表記) 2001:0db8:0000:0000:0001:0000:0000:0001 見やすさを求めるときは、省略表記(RFC5952準拠)で出力 過去に開発されたシステム・ツールでは、RFC5952に準拠しない省 略表記が存在しうるので要注意 既存システムは、格納領域にIPv6アドレスが収まるか をチェック - 54 -
  56. 56. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. PostgreSQLのネットワークアドレス型 - 55 -
  57. 57. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 文字列型で扱う場合、なぜ完全表記か?① 省略表記のまま整列しても… 56 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:10::1 整列前 2001:db8:0:10::1 2001:db8:0:1::1:1 2001:db8:0:1::50 2001:db8:0:2::1 整列後 アドレス昇順 2001:db8:0:1::50 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:10::1 省略表記の 整列は アドレス昇順と 一致しない アドレス 昇順
  58. 58. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 文字列型で扱う場合、なぜ完全表記か?② 整列は完全表記で行う 57 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:10::1 整列前 整列後 アドレス昇順 2001:db8:0:1::50 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:10::1 アドレス 昇順 2001:0db8:0000:0001:0000:0000:0001:0001 2001:0db8:0000:0002:0000:0000:0000:0001 2001:0db8:0000:0001:0000:0000:0000:0050 2001:0db8:0000:0010:0000:0000:0000:0001 2001:0db8:0000:0001:0000:0000:0000:0050 2001:0db8:0000:0001:0000:0000:0001:0001 2001:0db8:0000:0002:0000:0000:0000:0001 2001:0db8:0000:0010:0000:0000:0000:0001 (文字列) 整列 完全表記 完全表記の整列は アドレス昇順と 一致
  59. 59. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. サンプルコード(IPアドレス整列の例) <?php $tmp_arr = array("2001:db8:0:1::1:1", "2001:db8:0:2::1", "2001:db8:0:1::50", "2001:db8:0:10::1"); require_once "Net/IPv6.php"; // Net_IPv6パッケージを呼び出し foreach ($tmp_arr as $short_addr){ if (Net_IPv6::checkIPv6($short_addr)){ //IPv6アドレスであることをチェック $full_arr[] = Net_IPv6::uncompress($short_addr, true); //省略表記を解除 } } echo "before: "; print_r($tmp_arr); //整列前配列の出力 sort($full_arr); //配列を整列 foreach ($full_arr as $full_addr){ if (Net_IPv6::checkIPv6($full_addr)){ //IPv6アドレスであることをチェック $sorted_arr[] = Net_IPv6::compress($full_addr); //省略表記化 } } echo "<BR>after: "; print_r($sorted_arr); //整列後配列の出力 ?> - 58 -
  60. 60. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 文字列型として扱うときの注意点 省略表記 ⇔ 完全表記 の変換はライブラリを有効 活用する 過去に開発されたシステム・ツールでは、 RFC5952に準拠しない省略表記が存在しうるので 要注意 59
  61. 61. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. ログ出力・解析への影響 例)Apache HTTP Server ログファイル OSSログ解析プログラムは大抵問題なく処理できる AWStats, Webalizer… 注:アクセス元の国/地域は解析できない場合がある ログ解析を自作している人は要注意! アドレス部分の文字列長が長くなる アドレスの区切り文字が変わる 60 fdb6:5591:2612:10::100 - - [08/Oct/2014:17:52:30 +0900] "GET / HTTP/1.1" 200 144 172.16.10.128 - - [08/Oct/2014:18:01:59 +0900] "GET / HTTP/1.1" 200 100 1 2
  62. 62. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2.4. DMZのIPv6対応方式と サーバへのアクセス - 61 -
  63. 63. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. DMZのIPv6対応方式① 62 パラレルスタック デュアルスタック トランスレーション 構成 イメージ 概要 IPv4とIPv6のネット ワークを分離して構 築・運用 IPv4/IPv6を同列に、 同一のネットワーク で扱う IPv4ネットワークを変 更せず、トランスレー タを導入する IPv4 IPv6 GW IPv4 IPv6 GW NW機器 NW機器 NW機器 IPv4 IPv6 GW NW機器 GW トランスレータ v4 v4 v4 v4 v4 v4 v4 v6 v6 v6 v4 v6 v6 v6 v4/v6 v4/v6 GW
  64. 64. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. DMZのIPv6対応方式② 63 パラレルスタック デュアルスタック トランスレーション メリット 分界点が明確 ネットワークの安 定的な運用が確保 しやすい 概念が単純 低コスト 変更が最小限 デメリット 高コスト 管理対象が増える 運用・分析工数が 増加 障害の影響範囲が 広い セキュリティ機器 の実績不足 ネットワーク構造 の変更が必要な場 合がある 運用実績が少ない 障害発生時に対応 が難しい セキュリティ機器 の通信制御が難し くなる 参考資料:「IPv6対応セキュリティガイドライン(第1.0版)」IPv6普及・高度化推進協議会 セキュリティWG http://www.v6pc.jp/jp/upload/pdf/swg-IPv6SecurityGuideline_v1.0.pdf
  65. 65. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. DMZのIPv6対応方式とサーバへのアクセスの関係 64 パラレルスタック デュアルスタック トランスレーション サーバへの アクセス IPv4またはIPv6 (分離) IPv4およびIPv6 (混在) IPv4のみ サーバが認 識する接続 元アドレス クライアントの IPアドレス クライアントの IPアドレス トランスレータの IPアドレス 外部のIPv6 システムへ の能動的な 接続 可能 可能 不可能 (別途対応が必要) “X-Forwarded-For:” ヘッダを付与できる 装置を用い、アプリ ケーション側でこの ヘッダ値を取得する 等の方法で対応可
  66. 66. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 2章まとめ IPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する IPv6対応のポイント 1.IPv4/IPv6両対応のプログラミング言語と実行環境を使う 2.通信処理をIPv4/IPv6の両方に対応させる 3.データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に 対応させる DMZのIPv6対応方式は、要件に合わせて選択 65
  67. 67. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 3. LL(軽量プログラミング 言語)の対応状況 3.1. Perl 3.2. PHP 3.3. その他の言語 - 66 -
  68. 68. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 3.1. Perl - 67 -
  69. 69. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. Perlの概要 Perl のバージョン 最新版(Perl5): 5.20.1 (2013/9/22リリース) Perl とネットワークプログラミング 標準ライブラリ (コアモジュール) で基本的なネットワークプログラ ミングが可能 (ソケット, HTTP クライアント, SMTP クライアント) その他の機能が欲しい場合は, CPAN*1 のモジュール等を使用する *1 Comprehensive Perl Archive Network http://www.cpan.org/ Perl と IPv6 Perl 5.14 から本格的に IPv6 をサポート Perl and IPv6 – Perl supports IPv6 –http://www.perl.org/about/whitepapers/perl-ipv6.html それより前のバージョンでも, CPAN モジュールを利用すれば IPv6 を使うことは可能 - 68 -
  70. 70. 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により対応 - 69 -
  71. 71. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】Socket関連の対応状況① Socket IO::Socket::INET IO::Socket::IP コア/CPAN コアモジュール コアモジュール CPANモジュール IPv6対応 ○ (Perl 5.14付属の Socket 1.94以降) × ○ 備考 IPv6関連のものは、 ほとんどが、明示的 にインポートする必 要あり 多くのネットワーク 系モジュールが IO::Socket::INET を使用しているが, それらのモジュール も当然ながら IPv6 非対応となっている (対応方法は後述) IO::Socket::INET の置き換えとして設 計されており、コン ストラクタやメソッ ドは互換性がある (一部例外あり) - 70 - IO::Socket::INET でやっていたことを やりたい場合には、 このモジュールを 使うのが良い
  72. 72. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】Socket関連の対応状況② IO::Socket::INETとIO::Socket::IPの比較 IO::Socket::INET と IO::Socket::IP による TCP クライアントの例 ($host の $port に TCP で接続) 赤字の部分 (use およびコンストラクタ) を変更するだけで IPv4専用だったコードが IPv4 / IPv6 両対応になる (はず) (変更後のプロトコルの優先順位はポリシーテーブルの設定に従う) ※ もちろん, IPv4 アドレスが直書きしてあるような部分については, 別途対応する必要あり - 71 - use IO::Socket::INET; : my $sock = IO::Socket::INET->new( PeerAddr => $host, PeerPort => $port, Proto => 'tcp' ) or die “Error: $!¥n”; : use IO::Socket::IP; : my $sock = IO::Socket::IP->new( PeerAddr => $host, PeerPort => $port, Proto => 'tcp' ) or die “Error: $!¥n”; : IO::Socket::INET IO::Socket::IP ここ
  73. 73. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】サービス(HTTP, SMTP)の対応状況 HTTPクライアントのメジャーどころ:IPv6非対応 SMTPクライアント(Net::SMTP):IPv6非対応 IO::Socket::INETのサブクラスのため - 72 - HTTP::Tiny IO::Socket::INETを使用しているため HTTP::Lite [CPAN] socket()にPF_INETを渡しているため LWP::UserAgent [CPAN] 内部で使用している Net::HTTP が IO::Socket::INET のサブクラスのため IO::Socket::INETに由来して非対応のものが多い 既存のコード CPANモジュール等 IO::Socket::INET 依存 依存 IPv6非対応
  74. 74. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】Net::INET6GlueによるIPv6対応① Net::INET6Glueを使用することで IO::Socket::INET を使用するモジュールをIPv6に 対応させることが可能 Net::INET6Glue IO::Socket::INET6 からシンボルテーブルを IO::Socket::INET にコピーすることで, IO::Socket::INET を IO::Socket::INET6 の ように動作させる CPAN モジュール 詳細は Net::INET6Glue::INET_is_INET6.pm を参照 http://search.cpan.org/dist/Net-INET6Glue/ LWP や Net::SMTP 等の IO::Socket::INET 依存モジュール を使用したプログラムで, Net::INET6Glue により IPv6 での 通信ができるようになったことが確認されている - 73 -
  75. 75. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】Net::INET6GlueによるIPv6対応② 使い方: IO::Socket::INET に依存した CPAN モジュール等 を使用している既存のコードの先頭で, “use Net::INET6Glue;” するだけ HTTP::Tiny (IO::Socket::INET 依存 = IPv4 専用) を 使用したコードを Net::INET6Glue によって IPv6 に 対応させる例 use Net::INET6Glue; ← これを追加するだけ use HTTP::Tiny; : my $http = HTTP::Tiny->new; my $response = $http->get($url); print $response->{content}; - 74 - 既存のコード
  76. 76. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】名前解決 Net::DNS DNS リゾルバ (CPAN モジュール) http://search.cpan.org/dist/Net-DNS/ IPv6 関連 RR の検索に対応 IPv6 関連の RR (AAAA, IPv6 アドレスの PTR) は問題なく 引ける AAAA を引いた結果の文字列表現は :: による省略がされない (Net::DNS::RR の print() 等) IP アドレスはそのままの形式で逆引きできる (in-addr.arpa. / ip6.arpa. 形式にする必要がない) IPv6 アドレスを逆引きするときは :: で省略したアドレスを 渡すことも可能 - 75 -
  77. 77. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【Perl】アドレス処理 Net::IP IPv4 / IPv6 アドレス処理のための様々な機能を 提供するCPANモジュール http://search.cpan.org/dist/Net-IP/ 次のようなメソッドを提供する version() :IP のバージョンを返す (4 or 6) ip() :IPv6 アドレスの場合, 最も冗長な表現を返す short() :できるだけ省略された表記を返す reverse_ip() :逆引き用の表記 (PTR レコードの形式) を返す - 76 -
  78. 78. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 3.2. PHP - 77 -
  79. 79. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. PHPの概要 PHP最新バージョン 5.6系が最新系列になった。最新は5.6.2 (2014/10/17) 5.5系、5.4系もメンテナンスされている。最新は 5.5.18, 5.4.34 (2014/10/17) PHPとネットワークプログラミング 標準ライブラリで非常に広範囲なネットワーク プログラミングが可能 その他の機能が欲しい場合は、 拡張ライブラリ PEAR*1 のパッケージ 等を使用する PHP Extension and Application Repository http://pear.php.net/ PHPとIPv6 PHP 5 から IPv6 に対応 http://www.php.net/ChangeLog-5.php (Version 5.0.0 Beta 1 欄) - 78 -
  80. 80. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. PHPの対応状況 考慮すべき要素 対応状況 備考 名前解決 ○ dns_get_record() gethostbyaddr() PEAR Net_DNS2 ソケット ○ inet_pton(), inet_ptop()は 5.1.0 以降 対応 各種(L7) プロトコル HTTP クライアント ○ 各種ファイル関数(fopenなど) cURLなど SMTP クライアント ○ PEAR Net_SMTP mail(), PEAR Mail ⇒システム環境依存 その他 IPv6アドレス の処理 ○ PEAR Net_IPv6拡張パッケージ - 79 -
  81. 81. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【PHP】名前解決 正引き dns_get_record 引数で指定したRRの情報を取得して、配列で返す 逆引き gethostbyaddr 引数で指定したアドレスに対応するホスト名を返す - 80 - // www.iajapan.org の IPv6 アドレス (AAAA レコード) を検索 $result = dns_get_record('www.iajapan.org', DNS_ALL); $result = gethostbyaddr(‘192.168.0.1'); $result = gethostbyaddr(‘2001:db8:0:1::1:1');
  82. 82. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【PHP】HTTPクライアント URLをオープンする fopen() ファイルを開くのと同様にURLを指定して開くことができる (php.ini にて allow_url_fopen を有効にしている場合のみ) - 81 - $fh = fopen(“http://www.iajapan.org/ipv6/summit/FUKUOKA2014.html”, “r”); $fh = fopen(“http://[2001:db8::1]”, “r”); ※URLにIPv6アドレスを指定する場合には [ ] で括る
  83. 83. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 【PHP】アドレス処理 PEAR::Net_IPv6 IPv6 アドレスに関する処理を行う http://pear.php.net/package/Net_IPv6 下記のようなメソッドを提供する checkIPv6() : IPv6のアドレスとして正しいか検証 compress() : IPアドレスの短縮 uncompress() : IPアドレスの伸長 isInNetmask() : IPが指定したアドレス空間にあるか どうかを調べる - 82 -
  84. 84. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 3.3. 他のLLの対応状況 - 83 -
  85. 85. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 他のLLの対応状況 以下を参照ください InternetWeek 2012「スクリプト言語とIPv6 -2012-」 /関根 佳直 氏 https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t7/t7-sekine.pdf InternetWeek 2011「Lightweight LanguageとIPv6」 /関根 佳直 氏 https://www.nic.ad.jp/ja/materials/iw/2011/proceedings/t5/t5-03.pdf - 84 -
  86. 86. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 3章まとめ Perl:5.14以降は概ねIPv6対応 IO::Socket::INETに起因して非対応のモジュールは、 Net::INET6Glue を利用することでIPv6対応可 PHP:PHP5以降はIPv6対応 Python, Rubyも概ねIPv6対応 - 85 -
  87. 87. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. 4. VPS/IaaSのIPv6対応状況 - 86 -
  88. 88. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. VPS/IaaSに見られるIPv6対応方法 構成イメージ 備考 IPv6ネイティブ 先述の「DMZのIPv6対応 方式」における「パラレ ルスタック」もしくは 「デュアルスタック」 トランスレーション 先述の「DMZのIPv6対応 方式」における「トラン スレーション」と同じ IPv6トンネリング トンネルルータ⇔Web サーバ間において、IPv6 をIPv4でトンネル - 87 - ルータ Web サーバ IPv6 IPv6 internet トンネル ルータ Web サーバ IPv6 IPv6 トンネル internet ロード バランサ 等 Web サーバ IPv6 IPv4 internet IPv4
  89. 89. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. VPS/IaaSのIPv6対応状況の注意事項 サービス提供企業がWebサイトで公開している 情報を元にまとめたものです 2014年10月20日現在の情報です ここに記載されている特定のサービスの利用を 薦めるものではありません - 88 - 情報に誤りがありましたら、ご指摘ください
  90. 90. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. VPS/IaaSの対応状況① 企業名 サービス 名 対応状況 対応方式 URL Amazon AWS ▲※ トランス レーション http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/using-elb-ipv6.html (Note欄) Google Google Compute Engine × - https://cloud.google.com/compute/docs/networking IBM SoftLayer ○ ネイティブ http://www.softlayer.com/network Microsoft Azure × - http://azure.microsoft.com/ ja-jp/pricing/faq/ - 89 - ※AWSの対応状況については、現状、VPC環境で利用できない
  91. 91. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. VPS/IaaSの対応状況② 企業名 サービス 名 対応状況 対応方式 URL ABLENET ABLENET ○ ? http://www.ablenet.jp/vps/ spec/index.html GMOイン ターネッ ト ConoHa ○ ? https://www.conoha.jp/features (スペックシート) さくらイ ンター ネット さくらの VPS ○ ? http://vps.sakura.ad.jp/specification.html さくらイ ンター ネット さくらの クラウド トライアル 提供 トンネル (6rd) http://research.sakura.ad.jp/6rd-trial/ DTI ServerMan@VPS ○ ? http://dream.jp/vps/service.html - 90 -
  92. 92. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. VPS/IaaSの対応状況③ 企業名 サービス 名 対応状況 対応方式 URL BIGLOBE BIGLOBE クラウド ホスティ ング ○ ? http://cloud.biglobe.ne.jp/hosting/spec/ IIJ IIJ GIO ホ スティン グパッ ケージ サービス ○ ? http://www.iij.ad.jp/biz/hosting/spec.html NIFTY NIFTY Cloud × - http://cloud.nifty.com/cs/catalog/cloud_faq/catalog_121217001082_1.htm NTTコ ミュニ ケーショ ンズ Bizホス ティング Enterprise Cloud × (今後対応 予定) - http://www.ntt.com/bhec/data/roadmap.html - 91 -
  93. 93. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. おわりに - 92 -
  94. 94. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. まとめ① IPv6を使える環境が増えている IPv4とIPv6は互換性なし WebサービスのIPv6対応にはアプリケーションの 対応が不可欠 IPアドレスのハードコーディングは ダメ。ゼッタイ。 93
  95. 95. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. まとめ② アプリケーションのIPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する アプリケーションのIPv6対応のポイント 1.IPv4/IPv6両対応のプログラミング言語と実行環境を使う 2.通信処理をIPv4/IPv6の両方に対応させる 3.データとしてIPアドレスを扱う箇所をIPv4/IPv6の両方に 対応させる LLは概ねIPv6に対応済み 94 決して難しくない! 今日から開発するWebサービスはIPv6に対応させよう!
  96. 96. 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 - 95 -
  97. 97. Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved. ご清聴いただき、 ありがとうございました - 96 -

×