第8回JAWS-UGに参加して、そこで富士ソフトの飯尾さんが話したVPCの話題、面白かったです。
ということで、年内にAWS東京リージョンに追加されるはずのVPCを試しおかなきゃ、、、、
といっても、ネットワーク装置なんて持ってないので、さくらのVPSにVyattaを入れて接続することを試みたのでそれをメモしておく。
Amazon VPCの構築
今回は、AWS Management Consoleを使ってVPCを構築する。
以下のような流れで画面を操作する。
- VPC タブを選択
- Region は "US East" を選択
- "Get started creating a VPC" ボタンをクリック
- "VPC with a Private Subnet Only and Hardware VPN Access" を選択して、"Continue"。
- "Customer Gateway" にさくらのVPSのIPを入力して、"Continue"。
- デフォルトをそのまま受け入れて、"Create VPC"。
以上で、VPCの構築がはじまるのでしばし待つ。
構築が終わると、Customer Gateway を設定するための設定データをダウンロードできる。
- "Download Configutaion" をクリック。
- "Vendor" を "Generic" に変更。
- "Yes, Download" をクリック。
ダウンロードしたファイルは後で使うので保存しておく。
VPCのSecurity Groups
VPCの構築後、そのVPC内で立ち上げるEC2 インスタンスのためのSecurity Groupsを設定する。
これも AWS Management Console の VPC タブで以下のように操作をする。
- 左ペインの"Security Groups"をクリック。
- "default"にチェック。
- 下ペインに表示される"Inbound"タブをクリック。
- "Create a new rule"で"SSH"を選択。
- "Source"を"172.22.0.0/24"に変更。
- 今回、さくらのVPSにダミーで用意した内部ネットワークのアドレス帯が"172.22.0.0/24"。
- "Add Rule"をクリック。
- 引き続き、"Create a new rule"で"Custom ICMP rule"を選択。
- "Type"を"Echo Request"に変更。
- "Source"を"172.22.0.0/24"に変更。
- "Add Rule"をクリック。
- "Apply Rule Changes"をクリック。
これでSecurity Groupsの設定は完了。
VPC内にEC2インスタンスを起動
AWS Management ConsoleのEC2タブから、"US East" Regionにインスタンスを作成する。
今回の手順。
- "Launch Instance"をクリック
- "Basic 32-bit Amazon Linux AMI 2011.02.1 Beta"を選択。
- "Launch Instances Into Your Virtual Private Cloud"を選択する。SubnetID はここまでの手順であれば1つしか作っていないので、そのままにして "Continue"。
- "IP Adderess"はからのままで "Continue"。
- Tag は必要であれば適宜入力して "Continue"。
- Key Pairsは適宜設定して "Continue"。
- "Choose one or more of your existing Security Groups"から、先に修正した default Security Groupsを選択して"Continue"。
- 最後に内容を確認して "Launch"。
Vyattaを構成
VyattaでAmazon VPCに接続するために参考にさせてもらったのは以下のページ
まずさくらのVPS側の情報としては以下を使う。
グルーバルIPv4アドレス: 49.212.xx.xx/23 Gateway : 49.212.22.1
なお、今回はさくらのVPSサーバ内に仮想的なプライベートアドレスとして 172.22.0.101/24 も用意している。
また、先にVPCの構成時にダウロードしたファイルから使う値(ファイル毎に違うもの)は以下の通り。
ちなみに、今回使うのは IPSec Tunnel #1 の情報のみ。(Pre-Shared Key は本来秘密にしておくもの。以下のKeyはすでに破棄したVPCのKeyです)
Pre-Shared Key : vvFWtUb7xtBcKkYsTInb8g.6CveKDdS0 Outside IP Addresses: - Customer Gateway: : 49.212.xx.xx - VPN Gateway : 72.21.209.225 Inside IP Addresses - Customer Gateway : 169.254.255.2/30 - VPN Gateway : 169.254.255.1/30 BGP Configuration Options: - Customer Gateway ASN : 65000 - VPN Gateway ASN : 7224 - Neighbor IP Address : 169.254.255.1
あと、VPCのネットワーク情報としては、
10.0.0.0/16
を使う。
これらの情報をもとにすると、Vyattaに流し込む設定は以下のようになる。
interfaces { ethernet eth0 { address 49.212.xx.xx/23 address 172.22.0.101/24 address 169.254.255.2/32 } } protocols { bgp 65000 { neighbor 169.254.255.1 { remote-as 7224 update-source 169.254.255.2 } network 0.0.0.0/0 { } } static { route 0.0.0.0/0 { next-hop 49.212.22.1 { } } } } vpn { ipsec { disable-uniqreqids esp-group ESP1 { compression disable lifetime 3600 mode tunnel pfs enable proposal 1 { encryption aes128 hash sha1 } } ike-group IKE1 { lifetime 28800 proposal 1 { dh-group 2 encryption aes128 hash sha1 } } ipsec-interfaces { interface eth0 } site-to-site { peer 72.21.209.225 { authentication { mode pre-shared-secret pre-shared-secret vvFWtUb7xtBcKkYsTInb8g.6CveKDdS0 } ike-group IKE1 local-ip 49.212.xx.xx tunnel 1 { allow-nat-networks disable allow-public-networks disable esp-group ESP1 local-subnet 169.254.255.2/32 remote-subnet 169.254.255.1/30 } tunnel 2 { allow-nat-networks disable allow-public-networks disable esp-group ESP1 local-subnet 172.22.0.101/24 remote-subnet 10.0.0.0/16 } } } } }
これをファイルに記述して scp などで Vyatta のサーバにアップし
$ configure # merge /path/to/vpc.config # commit
すればよい。
さらにパケットの転送制御をするために、以下の内容のファイルをアップする。
#!/bin/sh BGP_LOCAL_IP_SUBNET=169.254.255.0 BGP_LOCAL_IP_1=169.254.255.2 VPN_1_IP=72.21.209.225 MY_WAN_IP=49.212.xx.xx MY_LOCAL_SUBNET_IP=172.22.0.101 VPC_CIDR=10.0.0.0/16 ip xfrm policy update dir fwd src $BGP_LOCAL_IP_SUBNET/30 dst $BGP_LOCAL_IP_1/32 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel ip xfrm policy update dir in src $BGP_LOCAL_IP_SUBNET/30 dst $BGP_LOCAL_IP_1/32 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel ip xfrm policy update dir fwd src $VPC_CIDR dst $MY_LOCAL_SUBNET_IP/24 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel ip xfrm policy update dir in src $VPC_CIDR dst $MY_LOCAL_SUBNET_IP/24 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel
これを Vyatta サーバ上で実行する。
以上で、うまくいっていれば
ping -I 169.254.255.2 169.254.255.1
さらに
ping -I 172.22.0.101 10.0.1.111
で(10.0.1.111 は EC2 インスタンスのIP)、インスタンスとの疎通が確認できる。
ここまでくれば、あとは EC2 インスタンスに ssh でログインできる。
sudo ssh -i /path/to/key.pem ec2-user@10.0.1.111
netstat で確認したら、172.22.0.101 からの接続があるので、IPSec VPN 接続が成功しているようだ。
長くなったけど、こんな感じでVPCを試すことができた。
最後に、、、
VPC、早く東京に来い!