[Amazon VPC] ハードウェアVPN接続を設定する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

前回、[Amazon VPC] ハードウェアVPN接続についてまとめてみた | Developers.IOという投稿にて、ハードウェアVPN接続の概要について記述しました。

今回は、実際にVPCでハードウェアVPN接続を設定する手順についてまとめました。設定手段としてはAWSマネージメントコンソールとCloudFormationの2つです。

設定のステップ

VPCでのハードウェアVPN接続の設定は、以下の4ステップで行います。

 

  1. Virtual Private Gatewayを作成する
  2. Customer Gatewayを作成する
  3. VPN Connectionを作成する
  4. Route TableにPropagationを設定する

 

Virtual Private GatewayはVPC側のVPNコンセントレータを、Customer Gatewayはユーザ側のVPN機器の定義を、VPN ConnectionはVirtual Private GatewayとCustomer Gatewayを繋ぐ定義を作るものです。

Propagationは「Virtual Private Gatewayが持つ経路情報をルートテーブルに自動的に反映」するための設定です。ルートテーブルに対して、ルート伝達をして欲しいVirtual Private Gatewayを指定すると、そのVirtual Private Gatewayが持つ経路情報が自動的にルートテーブルに反映されます。 もちろん本機能を有効にせず手動にて経路情報を追加することも可能ですが、ユーザ側のネットワークが大規模であったり細分化されている場合には手動で管理するのはとても大変ですので、経路設定はVirtual Private Gatewayにて行い、ルートテーブルについてはPropagationを有効にして自動反映にするほうが運用コストも管理コストも低く抑えられます。

routepropagation

AWSマネージメントコンソールでの設定手順

Virtual Private Gatewayを作成する

AWSマネジーメントコンソールのVPC Dashboard画面で、左側メニューから[Virtual Private Gateways]をクリックします。右画面上部の[Create Virtual Private Gateway]ボタンをクリックします。

VPC_Management_Console-1

すると以下ポップアップが表示されますので、[Yes, Create]ボタンをクリックします。

VPC_Management_Console-2-1

Virtual Private Gatewayが作成されます。[Attach to VPC]ボタンをクリックします。

VPC_Management_Console-2-2

[Attach to VPC]ポップアップが表示されるので、ハードウェアVPN接続を設定したいVPCを選択して、[Yes, Attach]ボタンをクリックします。

VPC_Management_Console-2-3

すると以下画面のように、VPCにアタッチされた状態になります。

VPC_Management_Console-2-4

Customer Gatewayを作成する

VPC Dashboard画面で、左側メニューから[Customer Gateways]をクリックします。右画面上部の[Create Customer Gateway]ボタンをクリックします。

VPC_Management_Console-3

[Create Customer Gateway]ポップアップが表示されますので、VPN接続で使うルーティング種類と、カスタマーゲートウェイが持つグローバルIPアドレスを設定します。以下の画面はVPN接続でスタティックルーティングを使う場合です。この場合は別途カスタマー側ネットワークとAWS側ネットワークが通信可能になるように静的経路情報を設定する必要があります(設定する方法については後述します) [Yes, Create]ボタンをクリックするとカスタマーゲートウェイが作成されます。

VPC_Management_Console-4 以下の画面はダイナミックルーティングを使う場合です。前回記述した通り、ハードウェアVPN接続ではBGPが使われます。ここではBGPのASNを設定しますが、IPSecトンネルの中で使われるものであり他のネットワークや機器に影響を与えるものでは無いので、適当な値で構いません。

VPC_Management_Console-5

カスタマーゲートウェイが作成されたことを確認します。

VPC_Management_Console-6

VPN Connectionを作成する

VPC Dashboard画面で、左側メニューから[VPN Connections]をクリックします。右画面上部の[Create VPN Connection]ボタンをクリックします。

VPC_Management_Console-7

[Create VPN Connection]画面が表示されます。VPN接続したいVirtual Private GatewayとCustomer Gatewayを指定します。 また[Specify the routing for the VPN connection]でルーティング情報を定義します。BGPを使っている場合には[Use dynamic routing]をクリックしてチェックします。スタティックルーティングの場合は[Use static routing]をクリックしてチェックし、必要な分だけスタティックルート情報を追加します。なお[VPN connection]画面の[Static Routes]タブにて、後から追加や削除を行うことも可能です。

VPC_Management_Console-9

VPN connection定義が作成されたことを確認します。

VPC_Management_Console-11

Route TableにPropagationを設定する

VPC Dashboard画面で、左側メニューから[Route Tables]をクリックします。Propagationを設定したいRoute Tableをクリックして選択し、右画面下部の[Route Propagation]タブをクリックします。Propagationして欲しいVirtual Private Gatewayを選択し、[Add]ボタンを左クリックします。

VPC_Management_Console-15-2

Virtual Private GatewayがRoute Propagation対象として追加されたことを確認します。

VPC_Management_Console-16-2

あとはカスタマーゲートウェイからVPN接続するだけです!

CloudFormationでの設定手順

Virtual Private Gatewayを作成する

Virtual Private GatewayはAWS::EC2::VPNGatewayでVirtual Private Gatewayの定義を作成し、AWS::EC2::AttachVPNGatewayでVirtual Private GatewayをVPCにAttachします。 VPNGatewayの[Type]定義は現時点では"ipsec.1"が固定値になっています。

 "Resources" : {
    "VPNGateway" : {
       "Type" : "AWS::EC2::VPNGateway",
       "Properties" : {
         "Type" : "ipsec.1",
         "Tags" : [ { "Key" : "Use", "Value" : "Customer" } ]
       }
    },
    "AttachVPNGateway" : {
      "Type" : "AWS::EC2::VPCGatewayAttachment",
      "DependsOn" : "VPNGateway",
      "Properties" : {
        "VpcId" : {"Ref" : "VPC"},
        "VpnGatewayId" : { "Ref" : "VPNGateway" }
      }
    }
 }

Customer Gatewayを作成する

AWS::EC2::CustomerGatewayでCustomerGatewayの定義を作成します。 こちらの[Type]定義も実質的に固定値となっています。

 "Resources" : {
    "CustomerGateway" : {
       "Type" : "AWS::EC2::CustomerGateway",
       "Properties" : {
          "Type" : "ipsec.1",
          "BgpAsn" : "65000",
          "IpAddress" : { "Ref" : "CustomerGatewayIpAddress" }
       }
    }
 }

VPN Connectionを作成する

AWS::EC2::VPNConnectionでVPN Connection定義を作成します。 Virtual Private GatewayとCustomer Gatewayを繋ぐ設定になりますので、[DependsOn]で依存関係を明示的に指定しています。またダイナミックルーティングを使わない場合は[StaticRouteOnly]を"true"にします。

 "Resources" : {
    "VPNConnection" : {
      "Type" : "AWS::EC2::VPNConnection",
      "DependsOn" : [ "VPNGateway", "CustomerGateway" ],
        "Properties" : {
          "Type" : "ipsec.1",
          "StaticRoutesOnly" : "false",
          "CustomerGatewayId" : {"Ref" : "CustomerGateway"},
          "VpnGatewayId" : {"Ref" : "VPNGateway"}
        }
     }
  }

Route TableにPropagationを設定する

AWS::EC2::VPNGatewayRoutePropagationでPropagationの設定を行います。 以下の例の場合、"RouteTable"というルートテーブルに"VPNGateway"というVirtual Private GatewayからPropaggationされるよう設定しています。

  "Resources" : {
    "VPNGatewayRouteProp" : {
      "Type" : "AWS::EC2::VPNGatewayRoutePropagation",
      "DependsOn" : [ "VPNGateway", "RouteTable" ],
      "Properties" : {
        "RouteTableIds" : [{"Ref" : "RouteTable"}],
        "VpnGatewayId" : {"Ref" : "VPNGateway"}
      }
    }
  }

試してみる

どうぞ!

vpnconnect-demoを起動

Stack Parametersは以下の通りです。 CloudFormation_Management_Console-2

  1. CustomerGatewayIpAddress ... カスタマーゲートウェイのグローバルIPアドレス。なおカスタマーゲートウェイのグローバルIPアドレスはリージョン内で一意である必要があるため、他のアカウントで作成されていたりすると、エラーになります。
  2. KeyName ... 認証鍵を指定します。同じStackの中でEC2を作るときに使えるようにParametersに含めていますが、今回のTemplateではEC2は作ってないので、特に設定しなくても構いません。

まとめ

VPC側のハードウェアVPN接続の設定自体はそれほど難しいものではありませんが、ユーザ側の既存ネットワーク環境を加味した上で、ルーティングポリシーの適用やルーティング設計を行う必要があります。スタティックルーティングを選択した場合には、ネットワークの拡張時にVPC側にも漏れなく設定が反映されるようきちんと管理する必要があることも意識しておきたいところです。