はじめてのAmazon VPC - 1. ルーターからVPCへVPN接続する

ぼちぼちAmazon VPCを触り始めてみました。
今更な感じもしますが、Amazon VPCのPrivate SubnetにHardware VPN(IPsec VPN)を使って接続できる今時点での詳しい手順を残しておこうと思います。(シリーズ化します。多分。)


Amazon VPCの概要は、下記公式サイトの説明に任せますが、簡単に説明すると、Amazon VPCを使うことで、AWSクラウド内にプライベートネットワークを作成することができるので、従来よりネットワークレベルでの細やかなアクセスコントロールを実現できます。
また、VPN接続をサポートしているので、会社やデータセンターと接続することで、プライベートネットワーク内でAWSのリソースをシームレスに扱うことができるようになります。つまり、自社ネットワークのアドレスをAmazon EC2のインスタンスに振ることができる、みたいなイメージです。

前提となる構成

VPCの初期ウィザードで、一番盛り込んだ、Public/Private Subnetを用意し、Private SubnetにはVPNでつなぐパターンを選択してみました。


パターンは他も含めると以下の通りです。

  1. 1つのパブリック サブネットのみを持つ VPC
  2. パブリックとプライベート サブネットを持つ VPC
  3. パブリックとプライベート サブネットおよびハードウェア VPN アクセスを持つ VPC
  4. 1つのプライベート サブネットのみ、およびハードウェア VPN アクセスを持つ VPC
http://aws.amazon.com/jp/vpc/faqs/#G4


ちなみに、VPNをはるために利用したルーターは、Cisco社の1921シリーズです。

使えるルーター(VPN)の要件

Amazon VPCに接続するパターンとして、静的ルーティングを使ったVPN接続と、動的ルーティング(要BGP)を使ったVPN接続があります。
今回は、(大掛かりなものでもないので)静的ルーティングを設定して使うことにします。(以降、静的ルーティングでの設定に絞って書きます。)


その際、こちら側でVPCへ接続するために必要となるルーター(カスタマーゲトウェイ)の要件は以下となるみたいです。

  • Pre-shared キーを使用して、IKE セキュリティ接続を確立する
  • トンネルモードで、IPsec セキュリティ接続を確立する
  • AES 128ビット暗号化機能を利用する
  • SHA-1 ハッシュ機能を利用する
  • 「グループ2」モードで、Diffie-Hellman Perfect Forward Secrecy を利用する
  • 暗号化の前にパケットの断片化を実行する
http://aws.amazon.com/jp/vpc/faqs/#C8


尚、(現時点で)以下のデバイスについては、VPN接続に必要な(カスタマーゲートウェイでの)設定ファイルを、AWS側で自動生成してくれます。

  • Cisco ASA 5500 シリーズバージョン 8.2 以降のソフトウェア
  • Cisco ISR(IOS 12.4 以降のソフトウェアを実行)
  • Juniper J シリーズサービスルーター(JunOS 9.5 以降のソフトウェアを実行)
  • Juniper SRX シリーズサービスゲートウェイ(JunOS 9.5 以降のソフトウェアを実行)
  • ScreenOS 6.1 もしくは 6.2(またはそれ以降)を実行する Juniper SSG
  • ScreenOS 6.1 もしくは 6.2(またはそれ以降)を実行する Juniper ISG
  • Microsoft Windows Server 2008 R2 以降のソフトウェア
  • ヤマハ RTX1200 ルーター
http://aws.amazon.com/jp/vpc/faqs/#C9

VPCの作成

では、早速VPCを作成してみましょう。
GUIで簡単にオペレーションするべく、まずはAWS Management Consoleにアクセス(ログイン)して、サービス一覧のところから"VPC"を選択します。
リージョンについては、接続したい(VPCを作成したい)リージョンを選んでおいてください。


まず、最初の段階では、全くVPCの設定がされていないはずですので、↑のようなウィザードへ誘導される感じになっています。"Get started creating a VPC"をクリックしましょう。


次に、構成パターンとして4通りの内、1つだけ選びます。先ほども書きましたが、以下の4つです。

  1. 1つのパブリック サブネットのみを持つ VPC
  2. パブリックとプライベート サブネットを持つ VPC
  3. パブリックとプライベート サブネットおよびハードウェア VPN アクセスを持つ VPC
  4. 1つのプライベート サブネットのみ、およびハードウェア VPN アクセスを持つ VPC
http://aws.amazon.com/jp/vpc/faqs/#G4


今回は、3つ目のPublic/Private Subnetの両方を作成し、Private SubnetにはVPNでつなぐパターンを選択してみました。


さて、ここからはネットワークの設定です。
1つ目は、カスタマーゲートウェイとなる、VPNトンネルを掘るルーターのIPアドレスを入力します。
2つ目、今回は静的ルーティングでの接続なので、"Use static routing"を選択し、下部のテキストボックスには、VPC側から、自ネットワーク側へのルーティングを記載します。つまり、自ネットワークから、AWSのVPC網にアクセスさせたいサーバ等のネットワークセグメントであったり、AWSのVPC網内のサーバ(EC2インスタンス)からアクセスさせたい先(自ネットワークのセグメント)のネットワークを記載します。
ここは、ネットワークアドレス/サブネットマスクを入力して、"Add"をクリックすることで複数追加できます。

全て入力できたら、"Continue"をクリックしましょう。


この部分は必要があれば、編集しましょう。
"One VPC with an Internet Gateway"の部分は、VPC側で付与したいネットワークのセグメントを指定します。特にこだわりがない(既存の自ネットワークで使っていない)のであれば、デフォルトのままでもいいと思います。
"Two Subnets"のところでは、VPCネットワーク内で分割すべきサブネットの指定をします。この辺もアクセスコントロールしたい単位とかで、適宜ネットワークを区切りましょう。また、各サブネットをどのAvailability Zoneに配置するかを指定できます。
"One VPN Connection"のところは、先ほどの画面で設定したものが入っているはず。
"Hardware Tenancy"は、VPC網内で動く、Amazon EC2インスタンスでDedicated Instance(ハードウェア占有インスタンス)を利用するかどうかの選択となります。


全て確認(編集)した後、"Create VPC"をクリックします。


VPC作成中のダイアログが出ます。しばし待つ。


無事、VPCが作成されました。ここで"Download Configuration"をクリックすると、カスタマーゲートウェイのデバイスにあわせた設定ファイルがダウンロードできます。(ので、クリックします。)


すると、↑のようなウィンドウが出るので、デバイスのベンダー、機種(シリーズ)、ソフトウェア(OS)等を選択して、"Yes, Download"をクリックすると、設定ファイルがダウンロードできます。

VPNルーターに設定を投入

VPCを作成したら、次はカスタマーゲトウェイとなるルーターに、先ほどダウンロードした設定を投入していきます。
カスタマーゲートウェイからは、AWS側のゲートウェイに2本分のIPsecトンネルをはることになります。トンネル1本分の設定としては、サンプルではありますが実際には、(ちょっと長いですが)以下のようなテンプレートになっています。(Cisco IOS向け、若干マスキングしています)

crypto isakmp policy 200
  encryption aes 128
  authentication pre-share
  group 2
  lifetime 28800
  hash sha
exit
!
crypto keyring keyring-vpn-xxxxxxxx-x
  local-address xxx.xxx.xxx.xxx
  pre-shared-key address 27.0.1.xx key xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxy
exit
!
crypto isakmp profile isakmp-vpn-xxxxxxxx-x
  local-address xxx.xxx.xxx.xxx
  match identity address 27.0.1.xx
  keyring keyring-vpn-xxxxxxxx-x
exit
!
crypto ipsec transform-set ipsec-prop-vpn-xxxxxxxx-x esp-aes 128 esp-sha-hmac 
  mode tunnel
exit
!
crypto ipsec profile ipsec-vpn-xxxxxxxx-x
  set pfs group2
  set security-association lifetime seconds 3600
  set transform-set ipsec-prop-vpn-xxxxxxxx-x
exit
!
crypto ipsec df-bit clear
!
crypto isakmp keepalive 10 10 on-demand
!
crypto ipsec security-association replay window-size 128
!
crypto ipsec fragmentation before-encryption
!
interface Tunnel1
  ip address 169.254.252.2 255.255.255.252
  ip virtual-reassembly
  tunnel source xxx.xxx.xxx.xxx
  tunnel destination 27.0.1.xx 
  tunnel mode ipsec ipv4
  tunnel protection ipsec profile ipsec-vpn-xxxxxxxx-x
  ip tcp adjust-mss 1387 
  no shutdown
exit
!
ip route 10.96.0.0 255.255.0.0 Tunnel1 track 100
!
ip sla 100
   icmp-echo 169.254.252.1 source-interface Tunnel1
   timeout 1000
   frequency 5
exit
!
ip sla schedule 100  life forever start-time now
!
track 100 ip sla 100 reachability 

AWS Management Consoleからダウンロードした設定ファイルには、IPsecトンネル2本分の設定が入っている(上記サンプルは1本分)ので、2本分設定しちゃいます。
(AWS側のゲートウェイに疎通できるよう、自ネットワーク構成に応じてルーティングの設定は確認してください。)

#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src                state          conn-id status
27.0.1.xx       xxx.xxx.xxx.xxx    QM_IDLE           1001 ACTIVE
27.0.1.yy       xxx.xxx.xxx.xxx    QM_IDLE           1002 ACTIVE

"show crypto isakmp sa"コマンドを実行して、問題なく設定されれば、まず上記のようにISAKMP(鍵交換)のステータスが正常になっているかと思います。今回の例だとstateがQM_IDLE、statusがACTIVEになっていればOKです。

#show crypto ipsec sa 

interface: Tunnel1

〜〜〜〜〜省略〜〜〜〜〜

     inbound esp sas:
      spi: 0x2F74367A(796145274)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2687, flow_id: Onboard VPN:687, sibling_flags 80000040, crypto map: Tunnel1-head-0
        sa timing: remaining key lifetime (k/sec): (4281963/1734)
        IV size: 16 bytes
        replay detection support: Y  replay window size: 128
        Status: ACTIVE(ACTIVE)

〜〜〜〜〜省略〜〜〜〜〜

     outbound esp sas:
      spi: 0xE7B8E672(3887654514)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2688, flow_id: Onboard VPN:688, sibling_flags 80000040, crypto map: Tunnel1-head-0
        sa timing: remaining key lifetime (k/sec): (4281963/1734)
        IV size: 16 bytes
        replay detection support: Y  replay window size: 128
        Status: ACTIVE(ACTIVE)

〜〜〜〜〜省略〜〜〜〜〜

次に"show crypto ipsec sa"コマンドを実行し、IPsecトンネルの状態を確認します。
上記のようにinbound/outbound esp sasの部分に何かしらステータスが表示されていれば、IPsecトンネルが確立されていることになります。


AWS Management Consoleの[Amazon VPC] - [VPN Connections]でも上図のようにVPNの接続状況が確認できます。

サーバから疎通確認

さて、トンネルが確立されたところで、自ネットワークのサーバとAWS側のサーバ(EC2)の疎通確認をしてみます。

まず、Amazon EC2のインスタンスを起動してみます。インスタンスの起動方法については、多くの解説サイトが存在するので、詳しくは割愛しますが、インスタンス起動の際に、VPCまわりが関連する部分の設定は以下の通り。


EC2インスタンス起動時に、そのインスタンスをVPCのどのサブネットに所属させるかを選択します。(割り当て可能な残りIPアドレス数とかも表示されていますね。)


一番下部にネットワークインターフェースの設定をする部分があります。
インターフェースの数や、割り振るIPアドレスの指定(デフォルトでは自動で割り振り)、Public IPを振るかどうかや、エイリアスの指定など。

と、主なところは、こんなところでしょうか。
EC2インスタンスが起動したら、自ネットワーク内のサーバからアクセスしてみましょう。正しく設定されていたら、通信できるはずです。

うまく疎通できない場合

以下のルーティングまわりとかを確認してみるといいかも。

  • 自ネットワークから、VPC(およびそのサブネット)のネットワークセグメントへの通信
  • VPCのネットワークから、自ネットワークセグメントへの通信
    • VPNゲートウェイ(VPN ConnectionsのStatic Routesで設定)
    • VPCのサブネット(Route Tablesで設定)

あとは、ベタに、Network ACLやSecurity Groupsでフィルタされていないかを確認する、あたりでしょうか。


ちょっと長くなったので、今日はこの辺まで。(続きは別のエントリにします。)
それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́

あわせて読みたい

AWS公式のプレゼン資料が、概略を掴む資料としてはわかりやすくてオススメでございます。

追記

続きを書きました。




まとめ


クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

Cisco ISR ルータ教科書

Cisco ISR ルータ教科書