More Related Content
Similar to 20150227 IPv6 Summit in FUKUI 2015 IPv6対応webサービスの作り方
Similar to 20150227 IPv6 Summit in FUKUI 2015 IPv6対応webサービスの作り方 (20)
20150227 IPv6 Summit in FUKUI 2015 IPv6対応webサービスの作り方
- 2. 渡辺 露文(わたなべ つゆふみ)
Twitter: @tsuyu23
普段は某SIer勤務
IPv6普及・高度化推進協議会 会員
IPv6導入に起因する問題検討SWG
アプリケーションのIPv6対応検討SWG
技術評論社
Software Design誌連載
(2012年12月号∼
2014年1月号)
2
About me
- 22. 22
そのコード、イケてない…
(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”;
:
:
- 60. 60
サンプルコード(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); //整列後配列の出力
?>
- 62. 62
ログ出力・解析への影響
例)Apache HTTP Server ログファイル
OSSログ解析プログラムは大抵問題なく処理できる
AWStats, Webalizer…
注:アクセス元の国/地域は解析できない場合がある
ログ解析を自作している人は要注意!
アドレス部分の文字列長が長くなる
アドレスの区切り文字が変わる
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
- 64. DMZのIPv6対応方式①
64
パラレルスタック デュアルスタック トランスレーション
構成
イメージ
概要 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
- 65. DMZのIPv6対応方式②
65
パラレルスタック デュアルスタック トランスレーション
メリット ■ 分界点が明確
■ ネットワークの安
定的な運用が確保
しやすい
■ 概念が単純
■ 低コスト ■ 変更が最小限
デメリット ■ 高コスト
■ 管理対象が増える
■ 運用・分析工数が増
加
■ 障害の影響範囲が広
い
■ セキュリティ機器の
実績不足
■ ネットワーク構造の
変更が必要な場合が
ある
■ 運用実績が少ない
■ 障害発生時に対応が
難しい
■ セキュリティ機器の
通信制御が難しくな
る
参考資料:「IPv6対応セキュリティガイドライン(第1.0版)」IPv6普及・高度化推進協議会セ
キュリティWG
http://www.v6pc.jp/jp/upload/pdf/swg-IPv6SecurityGuideline_v1.0.pdf
- 70. 70
Perlの概要
Perl のバージョン
最新版(Perl5): 5.20.2 (2015/2/14リリース)
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を使
うことは可能
- 71. 71
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により対応
- 72. 72
【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 の置
き換えとして設計され
ており、コンストラク
タやメソッドは互換性
がある (一部例外あり)
IO::Socket::INETで
やっていたことをやり
たい場合には、このモ
ジュールを
使うのが良い
- 73. 73
【Perl】Socket関連の
対応状況②
IO::Socket::INETとIO::Socket::IPの比較
IO::Socket::INET と IO::Socket::IP による TCP
クライアントの例 ($host の $port に TCP で接続)
赤字の部分 (use およびコンストラクタ) を変更するだけで IPv4専用だっ
たコードが IPv4 / IPv6 両対応になる (はず)
(変更後のプロトコルの優先順位はポリシーテーブルの設定に従う)
※ もちろん, IPv4 アドレスが直書きしてあるような部分については,
別途対応する必要あり
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
ここ
- 76. 76
【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};
既存のコード
- 77. 77
【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 アドレスを逆引きするときは :: で省略したアドレスを
渡すことも可能
- 78. 78
【Perl】アドレス処理
Net::IP
IPv4 / IPv6 アドレス処理のための様々な機能を
提供するCPANモジュール
http://search.cpan.org/dist/Net-IP/
次のようなメソッドを提供する
version() :IP のバージョンを返す (4 or 6)
ip() :IPv6 アドレスの場合, 最も冗長な表現を
返す
short() :できるだけ省略された表記を返す
reverse_ip() :逆引き用の表記 (PTR レコードの形式)
を返す
- 81. 81
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拡張パッケージ
- 91. 91
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/
※AWSの対応状況については、現状、VPC環境で利用できない
- 92. 92
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
さくらイン
ターネット
さくらのク
ラウド
トライアル提
供(2015年3
月末まで)
トンネル
(6rd)
http://research.sakura.ad.jp/6rd-
trial/
DTI ServerMan
@VPS ○
? http://dream.jp/vps/service.html
- 93. 93
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
- 97. 97
つづきは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