基礎から学ぶ? ec2マルチキャスト

25
基礎から学ぶ? EC2マルチキャスト @moomindani

Upload: noritaka-sekiyama

Post on 13-Jul-2015

273 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 基礎から学ぶ? EC2マルチキャスト

基礎から学ぶ?EC2マルチキャスト

@moomindani

Page 2: 基礎から学ぶ? EC2マルチキャスト
Page 3: 基礎から学ぶ? EC2マルチキャスト

そもそもなんで

使えないの?

Page 4: 基礎から学ぶ? EC2マルチキャスト

ネットワーク負荷増大を避けるため(たぶん)

Page 5: 基礎から学ぶ? EC2マルチキャスト

おさらい

Multicastってどんなんだっけ?

Page 6: 基礎から学ぶ? EC2マルチキャスト

IP Unicast172.31.3.106:D7:FD:ED:EF:01

172.31.3.206:D7:FD:ED:EF:02

172.31.3.306:D7:FD:ED:EF:03

172.31.3.406:D7:FD:ED:EF:04

172.31.3.506:D7:FD:ED:EF:05

172.31.3.106:D7:FD:ED:EF:06

宛先IPアドレス 宛先MACアドレス

172.31.3.2 06:D7:FD:ED:EF:02

ARP

Page 7: 基礎から学ぶ? EC2マルチキャスト

IP Broadcast172.31.3.106:D7:FD:ED:EF:01

172.31.3.206:D7:FD:ED:EF:02

172.31.3.306:D7:FD:ED:EF:03

172.31.3.406:D7:FD:ED:EF:04

172.31.3.506:D7:FD:ED:EF:05

172.31.3.106:D7:FD:ED:EF:06

宛先IPアドレス 宛先MACアドレス

172.31.15.255 FF:FF:FF:FF:FF:FF

既定

Page 8: 基礎から学ぶ? EC2マルチキャスト

IP Multicast

224.0.0.5

172.31.3.106:D7:FD:ED:EF:01

172.31.3.206:D7:FD:ED:EF:02

172.31.3.306:D7:FD:ED:EF:03

172.31.3.406:D7:FD:ED:EF:04

172.31.3.506:D7:FD:ED:EF:05

172.31.3.106:D7:FD:ED:EF:06

宛先IPアドレス 宛先MACアドレス

224.0.0.5 01:00:5E:00:00:05

RFC1112

Page 9: 基礎から学ぶ? EC2マルチキャスト

Multicast用のMACアドレスを

宛先に持つパケット

Page 10: 基礎から学ぶ? EC2マルチキャスト

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

01:00:5E:00:00:05

I/Gビット

Page 11: 基礎から学ぶ? EC2マルチキャスト

ブラックホール行

Page 12: 基礎から学ぶ? EC2マルチキャスト

クラウドはL2に厳しい

Page 13: 基礎から学ぶ? EC2マルチキャスト

でも使いたい

Page 14: 基礎から学ぶ? EC2マルチキャスト

何とかならないの?

Page 15: 基礎から学ぶ? EC2マルチキャスト

残された希望

• GRE tunnel

• L2 Peer-to-Peer VPN

–n2n

• Multi-Unicasting– MulticastがないならUnicastすればいいじゃない, JAWSDAYS 2014 by SA安川さん

Page 16: 基礎から学ぶ? EC2マルチキャスト

Multi-Unicasting?

Page 17: 基礎から学ぶ? EC2マルチキャスト

パケットを宛先の数だけコピーしてMulticast用MACアドレスをUnicast用MACアドレスに書き換えて送信すればいい

Page 18: 基礎から学ぶ? EC2マルチキャスト

IP Broadcastの場合172.31.3.106:D7:FD:ED:EF:01

172.31.3.206:D7:FD:ED:EF:02

172.31.3.306:D7:FD:ED:EF:03

172.31.3.406:D7:FD:ED:EF:04

172.31.3.506:D7:FD:ED:EF:05

172.31.3.106:D7:FD:ED:EF:06

宛先IPアドレス 宛先MACアドレス

172.31.15.255 FF:FF:FF:FF:FF:FF

宛先IPアドレス 宛先MACアドレス

172.31.15.255 06:D7:FD:ED:EF:02

172.31.15.255 06:D7:FD:ED:EF:03

172.31.15.255 06:D7:FD:ED:EF:04

172.31.15.255 06:D7:FD:ED:EF:05

172.31.15.255 06:D7:FD:ED:EF:06

CAPTURE!

Page 19: 基礎から学ぶ? EC2マルチキャスト

IP Multicastの場合

224.0.0.5

172.31.3.106:D7:FD:ED:EF:01

172.31.3.206:D7:FD:ED:EF:02

172.31.3.306:D7:FD:ED:EF:03

172.31.3.406:D7:FD:ED:EF:04

172.31.3.506:D7:FD:ED:EF:05

172.31.3.106:D7:FD:ED:EF:06

宛先IPアドレス 宛先MACアドレス

224.0.0.5 FF:FF:FF:FF:FF:FF

宛先IPアドレス 宛先MACアドレス

224.0.0.5 06:D7:FD:ED:EF:03

224.0.0.5 06:D7:FD:ED:EF:06

CAPTURE!

Page 20: 基礎から学ぶ? EC2マルチキャスト

Multi-Unicastingを試してみた

Page 21: 基礎から学ぶ? EC2マルチキャスト

環境

送信元インスタンス

宛先インスタンスA 宛先インスタンスB

VPC subnet

OS: Amazon Linux 2014.3

172.31.4.9306:A7:CE:8A:4F:13

172.31.3.13506:01:B8:62:20:C0

172.31.4.10506:52:D3:DC:8A:4A

Page 22: 基礎から学ぶ? EC2マルチキャスト

宛先インスタンスの準備

• Source/Dest. Checkを無効化

• (今回ICMPで試すため)ブロードキャストアドレスに対するICMPへの応答を許可– echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Page 23: 基礎から学ぶ? EC2マルチキャスト

送信元インスタンスの準備

• 必要なライブラリのインストール

– Ruby 1.9.x, libpcap, libpcap-devel

– Gem: pcaprub, packetfu

• Multi-Unicastingスクリプトを用意

–送信元インスタンスでパケットをキャプチャし、宛先MACアドレスのI/Gビットが1の場合にUnicastに書き換える

–安川さん作のRubyスクリプトを流用

Page 24: 基礎から学ぶ? EC2マルチキャスト

#!/usr/bin/rubyrequire 'rubygems'require 'packetfu'

dev = ARGV[0]mac=`ip link show #{dev} | awk '/ether/ {print $2}'`.chompARGV.shiftdests = ARGV

cap = PacketFu::Capture.new(:timeout => 4000,:iface => dev, :start => true,:filter => "ether src #{mac} and ether[0] & 1 = 1")

loop docap.stream.each do |pkt|frame = PacketFu::IPPacket.parse(pkt)i = 0dests.each do |dest|frame.eth_daddr = destframe.ip_header.ip_id = frame.ip_header.ip_id + iframe.ip_header.ip_sum = frame.ip_header.ip_calc_sum()frame.to_w(dev)i = i + 1

endend

end

Page 25: 基礎から学ぶ? EC2マルチキャスト

DEMO