20141023 ipv6 summit in fukuoka 2014 ipv6対応webサービスの作り方

97
IPv6対応Webサービスの作り方 2014年10月23日 技術本部 技術開発部 渡辺 露文 IPv6 Summit in FUKUOKA 2014

Upload: v6app

Post on 05-Jul-2015

252 views

Category:

Technology


6 download

DESCRIPTION

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

TRANSCRIPT

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

IPv6対応Webサービスの作り方

2014年10月23日

技術本部 技術開発部

渡辺 露文

IPv6 Summit in FUKUOKA 2014

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

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 >

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

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: 20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

最近のOS

Windows Vista以降

Mac OS X

Linux

FreeBSD

- 3 -

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

インターネット回線

フレッツ光ネクスト

au ひかり

NURO 光

- 4 -

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

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

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

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

- 6 -

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

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

7

通信事業者、ISP、 データセンター、

クラウド事業者等の在庫が残るのみ

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

Agenda

1. IPv6対応の話をする前に

2. IPv6対応Webサービスの作り方

3. LL(軽量プログラミング言語)の対応状況

4. VPS/IaaSのIPv6対応状況

- 8 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

1. IPv6対応の話をする前に 1. Webサービスを作る上で知っておくべきIPv6の基礎

2. 気を付けるべきこと

- 9 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

1.1. Webサービスを作る上で 知っておくべきIPv6の基礎

- 10 -

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

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文字以内

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

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固定

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

グローバルスコープ

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

13

リンクローカルスコープ

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

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

他にも機能的にIPv4と異なることがある

最も重要なこと:

- 14 -

IPv4とIPv6は互換性がない

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

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

ビジネス機会を損失する

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

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

通信事業者等によるCGN(Carrier Grade NAT)導入により、遅くなったり、利用できるセッション数が少なくなったりする可能性がある

16

IPv6に対応しなきゃ!

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

WebサービスのIPv6対応

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

接続は可能だが…

例えば

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

想定外の挙動をする

- 17 -

アプリケーションのIPv6対応が不可欠!

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

1.2. IPv6対応の前に気を付ける べきこと

- 18 -

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

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”; :

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

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アドレス直書き?

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

他にもイケてないコードがある

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

- 21 -

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

良い子はマネしちゃダメ

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv6対応の話をする前に…

22

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

ダメ。ゼッタイ。

$host = “www.example.com”

のようにFQDNで接続先を指定する

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

24

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

目的 変更・改修の理由

アプリケーション 機能の提供

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

インフラ 資源の提供

資源管理(IPアドレス、サーバリソース…)

性能

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

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

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

1章まとめ

Webサービスに重要なIPv4とIPv6の違い アドレス体系が異なる

アドレス利用設計が変わる

複数のアドレスを有効範囲に応じて使い分ける

IPv4とIPv6は互換性がない

WebサービスのIPv6対応にはアプリケーションの対応が不可欠

IPアドレスのハードコーディングは ダメ。ゼッタイ。

- 26 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

2. IPv6対応Webサービスの 作り方

2.1. プログラミング言語と実行環境

2.2. 通信処理のIPv6対応

2.3. データとしてIPアドレスを扱う箇所の対応

2.4. DMZのIPv6対応方式とサーバへのアクセス

- 27 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

Webサービス

28

Ethernet

IP(v4/v6)

TCP / UDP

アプリケーション

OS

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

アプリケーション

OS

フレームワーク

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

クライアント サーバ

アプリケーションを中心に解説します

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

29

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

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

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

30

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

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

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

31

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

2.1. プログラミング言語と 実行環境

- 33 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

ここでいうIPv4/IPv6両対応とは?

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

34

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

IPv4/IPv6両方で通信できる

これらを満たすプログラミング言語、実装環境を利用する

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

実装上の留意点

プログラミング言語、実行環境の選定における留意点

実際には各プロダクトでサポート状況に差異があるため、 開発するアプリケーションが提供する機能を考慮し、個別に判断する必要がある

プログラミングにおける留意点

IPv4/IPv6の双方に対応するライブラリ、オブジェクト、 関数、データ型を使う

従来(IPv4のみ)のものとは別に用意されていることがある

– C addrinfo構造体、getaddrinfo()

– Java InetAddressクラス

– Perl IO::Socket::IP など

アドレス検証、変換などはライブラリを有効活用

35

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

2.2. 通信処理のIPv6対応

- 36 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv4とIPv6の両方で通信できることとは?

クライアント

IPv4およびIPv6で 意図するサーバへ 接続できること

サーバ

IPv4およびIPv6で 接続を受付けること

- 37 -

IPv6 IPv6

IPv4 IPv4

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPアドレスを複数持つことがある

- 38 -

IPv6 IPv6

IPv4 IPv4

複数のアドレスを持つことがある

複数のアドレスを持つことがある

クライアントがどのアドレスにアクセスするかは サーバ側では予測できない

特定のアドレスに依存したシステムを構成すべきではない

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv6の名前解決①

FQDNで接続先を指定してIPv6で通信を行うには、DNSにてFQDNからIPv6アドレスが名前解決できることが必要不可欠

FQDNからIPv6アドレスを名前解決

権威DNSサーバ上で接続先サーバのAAAAレコードにIPv6 アドレスが登録されている

クライアントから接続先サーバのAAAAレコードが引ける

Webアプリケーション開発においては、FQDNのIPv6アドレスが正しく名前解決できることを確認する

- 39 -

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

通信の試行順序

RFC6724 Default Address Selection for IPv6

優先順位が変わるケース

デフォルトを変更している環境

RFC6724に準拠していない実装

- 41 -

IPv6 > IPv4

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

クライアントプログラム

IPv4/IPv6 両宛先アドレスに接続できるように する

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

- 42 -

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

ユーザの利便性を損なう

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

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)

フォールバック

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

想定されるフォールバックの主な原因

44

サーバ側の 問題

サーバが当該のサービスを提供して いない

DNS誤登録、障害等

経路の問題 ネットワークの接続性が失われている ISPの不具合

クライアント側の問題

サーバへの到達性がないアドレスを 選択して通信を行おうとしている

グローバルアドレスを使用している 閉域網

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

フォールバックの予防策

45

サーバ 設定の不備を修正する

サービスを提供していないIPアドレスをDNSに登録しない サービスを適切に提供する

ISP ネットワークの接続性を健全に保つ

クライアント IPv6インターネット接続可能なISPと 契約する

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

サーバプログラム

IPv4/IPv6 両プロトコルでの接続を処理

主要なWebサーバプログラムは対応済み

Apache HTTP Server

Microsoft Internet Information Server (IIS)

nginx

- 46 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

2.3. データとしてIPアドレスを 扱う箇所の対応

- 47 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

データとしてIPアドレスを扱う箇所

48

入力 出力

整列

検索

格納

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv4/IPv6アドレス比較

49

IPv4アドレス IPv6アドレス

アドレス長 32bit 128bit

文字列表記

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

16bitずつ区切り、16進数で表記 (省略表記あり)

区切り文字 . (ドット) : (コロン)

文字列長 15文字以内 39文字以内

サブネットマスク/プレフィックス長を考慮すると、上記+”/”+数字3文字

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

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

IPv6アドレスを扱えないIPアドレス入力・格納

15文字までの文字列(varchar(15))

1つの整数として扱う

1オクテットずつ4つの整数として扱う

- 52 -

そのままではIPv6アドレスを格納できず、エラーとなる

IPv4/IPv6両対応 39文字以内の文字列 [VARCHAR(39)]

Good!

Bad!

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

Webフォームからの入力

入力値の検証

IPアドレスを扱う場合、入力された文字列がIPアドレスとして取りうる値であることを検証

IPv4アドレス、IPv6アドレス いずれかとして取りうる値

2箇所で実施可能

ブラウザ側(HTML5のForm Validation等)

サーバ側

アドレス処理ライブラリを利用すると便利

例)PHP Net_IPv6::checkIPv6(); (PEARにて提供されるNet_IPv6パッケージに含まれる)

- 53 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

格納、検索、整列、出力

IPアドレス型が定義されている場合は、IPアドレス型を使う 例) PostgreSQLのネットワークアドレス型

IPアドレス型が定義されていない場合は、文字列型で完全表記を使う IPv6完全表記)

2001:0db8:0000:0000:0001:0000:0000:0001

見やすさを求めるときは、省略表記(RFC5952準拠)で出力 過去に開発されたシステム・ツールでは、RFC5952に準拠しない省

略表記が存在しうるので要注意

既存システムは、格納領域にIPv6アドレスが収まるかをチェック

- 54 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

PostgreSQLのネットワークアドレス型

- 55 -

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

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

省略表記の 整列は

アドレス昇順と 一致しない

アドレス昇順

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

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

(文字列) 整列

完全表記

完全表記の整列は アドレス昇順と

一致

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

文字列型として扱うときの注意点

省略表記 ⇔ 完全表記 の変換はライブラリを有効 活用する

過去に開発されたシステム・ツールでは、RFC5952に準拠しない省略表記が存在しうるので要注意

59

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

2.4. DMZのIPv6対応方式と サーバへのアクセス

- 61 -

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

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

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

DMZのIPv6対応方式とサーバへのアクセスの関係

64

パラレルスタック デュアルスタック トランスレーション

サーバへのアクセス

IPv4またはIPv6 (分離)

IPv4およびIPv6 (混在)

IPv4のみ

サーバが認識する接続元アドレス

クライアントの IPアドレス

クライアントの IPアドレス

トランスレータの IPアドレス

外部のIPv6システムへの能動的な接続

可能 可能 不可能 (別途対応が必要)

“X-Forwarded-For:” ヘッダを付与できる装置を用い、アプリケーション側でこのヘッダ値を取得する等の方法で対応可

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

3. LL(軽量プログラミング 言語)の対応状況

3.1. Perl

3.2. PHP

3.3. その他の言語

- 66 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

3.1. Perl

- 67 -

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

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 -

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

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 -

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

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でやっていたことをやりたい場合には、このモジュールを

使うのが良い

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

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 ここ

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

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非対応

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

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 -

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

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 -

既存のコード

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

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 -

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

3.2. PHP

- 77 -

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

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 -

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

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 -

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

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');

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

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アドレスを指定する場合には [ ] で括る

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

3.3. 他のLLの対応状況

- 83 -

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

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 -

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

4. VPS/IaaSのIPv6対応状況

- 86 -

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

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

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

VPS/IaaSのIPv6対応状況の注意事項

サービス提供企業がWebサイトで公開している 情報を元にまとめたものです

2014年10月20日現在の情報です

ここに記載されている特定のサービスの利用を 薦めるものではありません

- 88 -

情報に誤りがありましたら、ご指摘ください

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

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環境で利用できない

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

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 -

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

おわりに

- 92 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

まとめ①

IPv6を使える環境が増えている

IPv4とIPv6は互換性なし

WebサービスのIPv6対応にはアプリケーションの対応が不可欠

IPアドレスのハードコーディングは ダメ。ゼッタイ。

93

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

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

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

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 -

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

Copyright ©2014 FUJISOFT INCORPORATED, All rights reserved.

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

- 96 -