Multicastが出来ないならUnicastすればいいじゃない

6,561 views

Published on

EC2ではマルチキャストが使えないから○○が動かないってよく聞きます。確かにVPCであってもEC2ではL2ブロードキャストはサポートされていないので、ENIにブロードキャスト/マルチキャストパケットを投げても誰にも届きません。でも当たり前ですが、ユニキャストはできますよね?であればアプリケーションがマルチキャストのつもりで投げたパケットを捕まえて、L3アドレスはそのままにL2で複数のユニキャストフレームとして送ってしまえばいいのでは?そんな事を試して実際動く事を確認したところをデモを含めてお届けします。

Published in: Technology

Multicastが出来ないならUnicastすればいいじゃない

  1. 1. マルチキャストが出来ないなら ユニキャストすればいいじゃない 安川 健太 シニアソリューションアーキテクト Amazon Data Services Japan
  2. 2. 自己紹介 名前 • 安川 健太 • アマゾンデータサービスジャパン ソリューションアーキテクト 好きなAWSのサービス • CloudFormation ソーシャル • @thekentiest • www.facebook.com/kenta.yasukawa 趣味 • 車いじり • パケットキャプチャ
  3. 3. 本日の発表 EC2の上でレイヤーの低いところでいろいろ試してみた 体験談のうち、マルチキャストに関して皆さんと共有 • せいぜいL3とかL2とかくらいです • L1までは行きません (行けません)
  4. 4. VPC使ってますか? AWSパブリック クラウド環境 Amazon Virtual Private Cloud (VPC)環境 ユーザごとの プライベート領域で インスタンスを利用
  5. 5. Privateネットワークの為だけじゃないVPC VPCでは出来て、EC2-Classicでは出来ないこと • 静的IPアドレス設定 • 複数IPアドレス • 複数ネットワークインターフェース • セキュリティグループのメンバーシップの動的変更 • セキュリティグループによるOutboundフィルタリング • NACL • Subnetを区切って利用 • …
  6. 6. EC2インスタンスから見たL2の違い EC2-Classicの場合 • どんなARPリクエストを送ってもいつも同じ答え EC2-VPCの場合 • 見慣れた出力結果!
  7. 7. VPCならいろいろL2を使ったトリックが使えそう L2 NAT (ebtablesとか) L2のアドレッシングに頼るソフトウェア (LVSとか) DSR (Direct Server Return)なロードバランサ これは出来そうで出来ませんでした。興味があれば話します IPブロードキャスト/マルチキャストを擬似的に これが今日のトピックです
  8. 8. 擬似L2ブロードキャストの原理 VPC Subnet IPマルチキャスト Dst: Ethernetブロードキャストアドレス Src: 送信者のMACアドレス コピー ユニキャスト化! 注:ENIのSrc/Destチェックは無効化すること
  9. 9. まずはProof of Concept パケットキャプチャによる実装なら簡単 • 通過パケットの少ないENIで動かせば実用的にもそんなに問題ない • supervisordなどでデーモンとして動かせばそこそこ使えるかも https://gist.github.com/kntyskw/5231182
  10. 10. 動作確認したのでカーネルで動かす方法を模 索 tc mirred + pedit + csumでできます Tcをその目的で使うためにコンフィグするシェルスクリプト https://gist.github.com/kntyskw/5633755 パケットキャプチャベースに比べて高い性能、プロセス監視不要 若干わかりにくい構成に Tc mirredがパケットループが起こる可能性のある構成を許さないので2つのENI を用意して、パケットのコピー元とコピー先が異なるような設定が必要 # ec2_multicast.sh <interface to grab multicast packets from> <interface to send modified packets to> [target MAC address 1] [target MAC address 2] ... # ec2_multicast.sh eth0 eth1 00:11:22:33:44:55 66:77:88:99:aa:bb Example: Usage:
  11. 11. 同一サブネット内のENIのMACアドレス取得 AWS APIを使えば取得可能 • 例: https://gist.github.com/kntyskw/5413698
  12. 12. LVS + Keepalivedを動かしてみた VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elastic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.101 VRRP 平常時 リクエストの流れ
  13. 13. LVS + Keepalivedを動かしてみた VPC Subnet LVS + keepalived LVS + keepalived WebWebWeb 172.31.0.0/20 Elastic IP Secondary: 172.31.24.1 Primary: 172.31.24.100 Primary: 172.31.24.101 VRRP フェイルオーバー時 リクエストの流れ
  14. 14. EC2でIPアドレスを引き継ぐには VPCはARPベースで動いているわけではない • 明示的なIPアドレスとENIの対応関係を要プロビジョニング フェイルオーバ時にAWS APIを叩いてVIPをMasterに要再割当て https://gist.github.com/kntyskw/5417140
  15. 15. Keepalivedの設定例 Master昇格時に実行するスクリプトを指定 vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.31.24.1 dev eth0 } notify_master /etc/keepalived/assign_vip.sh }
  16. 16. UPnPを動かしてみた VPC Subnet UPnP Media Server UPnP Media Renderer UPnP Control Point 172.31.0.0/20 Discovery / Browse Media stream Discovery / Play, Stop, Pause, etc
  17. 17. UPnPのDevice DiscoveryはMulticast Simple Service Discovery Protocol (SSDP) • ssdp:discover • ssdp:alive • ssdp:bybye UPnP Control Point UPnP Device 1 UPnP Device 2 1. Search (HTTPMU) 2. Response (HTTPU) 2. Response (HTTPU) HTTPU --- HTTP over UDP HTTPMU – HTTP over Multicast UDP
  18. 18. UPnPを動かしてみた: デモセットアップ VPC Subnet UPnP Media Server UPnP Media Renderer UPnP Control Point 172.31.0.0/20 Discovery / Browse Media stream Discovery / Play, Stop, Pause, etc STX protocol VNC Virtual Private Living 的な?
  19. 19. まとめ VPCならL2まで自由が利く • L2 NAT • 擬似ブロードキャスト、などなど 擬似マルチキャストを使えばVRRPも動く • LVS + Keepalivedで検証 • 設定例や注意点など 擬似マルチキャストを使えばUPnPも動く • Virtual Private Living Roomも VPCを使ってより柔軟なシステム構築を!

×