ほしいプロトコルはトンネルすればいいじゃない at JAWS DAYS 2014 Tech Deep Dive

3,834
-1

Published on

AWS VPCでも使えるトンネル入門

Published in: Technology

ほしいプロトコルはトンネルすればいいじゃない at JAWS DAYS 2014 Tech Deep Dive

  1. 1. ほしいプロトコルは カプセルすればいいじゃない ARAKI Yasuhiro (ar1@) JAWS DAYS 2014
  2. 2. ⾃自⼰己紹介 !   名前 •  荒⽊木  靖宏(twitter:  ar1) !   肩書 •  JAWS-‐‑‒UG→AWSへ •  プリンシパルソリューション アーキテクト !   好きなAWSサービス •  Amazon  Virtual  Private   Cloud •  AWS  Direct  Connect
  3. 3. IPv6 Multicast & More!
  4. 4. 方式! 対象! オーバー ヘッド! IP-in- IP! IP! 20バイト! 20バイトのヘッダ付与! GRE! IP,AppleT alk,Multic ast等! 24バイト! 20バイトのヘッダ+4バイトの GREヘッダ! TUN! IP,AppleT alk,Multic ast等! 小! ネットワーク層を模擬! TAP! イーサ ネット! 大! イーサネットデバイスを模擬! IPsec! IP(tunnel mode)! 54〜78! バイト! 暗号化コストのほうが。。! ESP-3DES/DES ESP-SHA1/MD5 54バイト! ESP-AES ESP-SHA512 78バイト!
  5. 5. 2001:db8::/32 ボーダールータ 6rd client 192.168.1.1 6rd  (IP-‐‑‒in-‐‑‒IP)によるIPv6 IPv4IPv6 IPv6 2001:db8:c048:101::/64 2001:db8:c048:101::1234/64 16進表記での 192.168.1.1
  6. 6. IPv6の⼿手順 !   VPCを作り、VPC⽤用のEIPを取得 !   IPv6トンネル先を登録 •  https://tunnelbroker.net/  あたりがおすすめ(無料料) •  EIPを⼊入れるとエンドポイントが作られる !   エンドポイント情報を⼊入⼿手 •  Server  IPv4  Address •  Client  IPv6  Address !   Server  IPv4  Addressへ !   Protocol番号41をServer  IPv4  Addressへ通す !   あとはEC2からトンネルを作る !   Route53で登録
  7. 7. IPv6 Internet IPv4 Internet 6rd tunnel Protocol: 41 6rd server 6rd client ⼿手順全体図 tunnelbroker.net (he.net)
  8. 8. Security  Groupの設定 Server IPv4 Address
  9. 9. Vyattaからトンネルを作る configure edit  interfaces  tunnel  tun0 set  encapsulation  sit set  local-‐‑‒ip  EC2のプライベートアドレス set  remote-‐‑‒ip  Server  IPv4  Address set  address  Client  IPv6  Address set  description  "HE.NET  IPv6  Tunnel" exit set  protocols  static  interface-‐‑‒route6  ::/0  next-‐‑‒hop-‐‑‒ interface  tun0 commit Simple Internet Transition (SIT) IPv6をIPv4に乗せるためのもの
  10. 10. tyo1.ipv6.he.net東京 バージニア ash1.ipv6.he.net
  11. 11. ⽶米国東海岸ー東京リージョン間  1    ar1-‐‑‒2.tunnel.tserv13.ash1.ipv6.he.net  (2001:470:7:b23::1)    4.608  ms    7.050   ms    9.707  ms  2    gige-‐‑‒g4-‐‑‒12.core1.ash1.he.net  (2001:470:0:90::1)    16.986  ms    16.954  ms     16.916  ms  3    10gigabitethernet1-‐‑‒2.core1.atl1.he.net  (2001:470:0:1b5::2)    22.150  ms     22.117  ms    22.078  ms  4    10gigabitethernet3-‐‑‒2.core1.dal1.he.net  (2001:470:0:1b6::1)    42.314  ms     42.283  ms    42.246  ms  5    10gigabitethernet2-‐‑‒4.core1.phx2.he.net  (2001:470:0:258::1)    69.700  ms     69.670  ms    69.637  ms  6    10gigabitethernet15-‐‑‒6.core1.lax2.he.net  (2001:470:0:24a::2)    73.184  ms     67.488  ms    66.650  ms  7    10gigabitethernet3-‐‑‒2.core1.tyo1.he.net  (2001:470:0:294::2)    162.600  ms     162.120  ms    162.333  ms  8    tserv1.tyo1.he.net  (2001:470:0:118::2)    163.306  ms    163.431  ms    162.635   ms  9    ar1-‐‑‒1-‐‑‒pt.tunnel.tserv22.tyo1.ipv6.he.net  (2001:470:23:12e::2)    166.556  ms     165.961  ms    166.215  ms
  12. 12. GRE
  13. 13. GRE:Generic  Routing  Encapsulation !  GREは名前の通りの汎⽤用カプセル⼿手法 !  IP以外 •  IPX •  AppleTalk •  DECNet !  もちろんIPも •  Multicast •  Broadcast •  IPv6
  14. 14. GREでMulticastの⼿手順 !   VPCを作る !   インスタンス起動 •  Protocol番号47(GRE)はお互い通信可能に設定 !   カーネルパラメータを設定 •  ICMP、IGMPに答える⽤用に設定 •  IP転送設定 •  経路路⾮非対称を有効化 !   GREトンネルを設定 •  169.254.x.yを使うことに !   マルチキャストアドレスに経路路設定 ! pimdを起動 インスタンス内設定 スクリプトは後述
  15. 15. ⼿手順全体図 /dev/tun0 169.254.0.1 /dev/tun0 169.254.0.2 /dev/eth0 10.3.8.118 /dev/eth0 10.3.8.119 10.3.8.x PIMD PIMD Multicast Enable (224.0.0.0/4)
  16. 16. インスタンス内設定スクリプト(例例) auto  tun0 iface  tun0  inet  static              address  169.254.0.1              netmask  255.255.255.0              broadcast  169.254.0.255              up  ifconfig  tun0  multicast              pre-‐‑‒up  ip  tunnel  add  tun0  mode  gre  remote  10.3.8.119  local   10.3.8.118  ttl  255              pre-‐‑‒up  echo  0  >  /proc/sys/net/ipv4/icmp_̲echo_̲ignore_̲broadcasts              pre-‐‑‒up  echo  1  >  /proc/sys/net/ipv4/ip_̲forward              pre-‐‑‒up  echo  0  >  /proc/sys/net/ipv4/conf/all/rp_̲filter              up  ip  route  add  224.0.0.0/4  dev  tun0              up  /etc/init.d/pimd  restart              pointopoint  169.254.0.2              post-‐‑‒down  iptunnel  del  tun0
  17. 17. Multicastの疎通を試す root@ip-‐‑‒10-‐‑‒3-‐‑‒8-‐‑‒119:/etc/network/interfaces.d#  ping  224.0.0.1 PING  224.0.0.1  (224.0.0.1)  56(84)  bytes  of  data. 64  bytes  from  169.254.0.2:  icmp_̲seq=1  ttl=64  time=0.035  ms 64  bytes  from  169.254.0.1:  icmp_̲seq=1  ttl=64  time=0.557  ms  (DUP!) 64  bytes  from  169.254.0.2:  icmp_̲seq=2  ttl=64  time=0.033  ms 64  bytes  from  169.254.0.1:  icmp_̲seq=2  ttl=64  time=0.512  ms  (DUP!)
  18. 18. TAP
  19. 19. TAP:simulates  a  link  layer  device !  network  tap  から  TAPと命名 !  イーサネットデバイスをシミュレート •  デバイスで使えるプロトコルに制限なし !  様々な利利⽤用実績 •  OpenVPN •  VTun •  tinc •  …
  20. 20. TAPでMulticastの⼿手順  w/  OpenVPN !   VPCを作る !   サーバインスタンス起動 •  ブリッジを作成 •  OpenVPNサーバをTAPモードで動作 •  ip  route  add  224.0.0.0/4  dev  br0 !   クライアントインスタンスを起動 •  OpenVPNクライアントでサーバに接続。同時にTAP作成。 •  ip  route  add  224.0.0.0/4  dev  tap0 ! pimd  start
  21. 21. ⼿手順全体図 /dev/tap0 10.8.0.50 /dev/eth0 10.3.8.118 /dev/eth0 10.3.8.119 10.3.8.x PIMD PIMD Multicast Enable (224.0.0.0/4) Open VPN Open VPN /dev/tap0 /dev/br0 10.8.0.4
  22. 22. Multicastの疎通を試す root@ip-‐‑‒10-‐‑‒3-‐‑‒8-‐‑‒118:/etc/openvpn#  ping  224.0.0.1 PING  224.0.0.1  (224.0.0.1)  56(84)  bytes  of  data. 64  bytes  from  10.8.0.50:  icmp_̲seq=1  ttl=64  time=0.041  ms 64  bytes  from  10.8.0.4:  icmp_̲seq=1  ttl=64  time=0.870  ms  (DUP!) 64  bytes  from  10.8.0.50:  icmp_̲seq=2  ttl=64  time=0.062  ms 64  bytes  from  10.8.0.4:  icmp_̲seq=2  ttl=64  time=0.834  ms  (DUP!)
  23. 23. 参考 !   Tunnels,  Reference  Guide,  Vyatta  System

×