YAMAHA RTX830 で AWS と VPN

概要

YAMAHA RTX830 を買ったので、AWS と VPN 接続をしたのでその備忘録です。 基本的には次の公式とクラメソのを見てもらえれば解決すると思います。

CFn テンプレート

VPN 接続するに当たって AWS 側の必要なリソースは次が挙げられます。

本テンプレートでは、VPC、プラベートサブネット、ルートテーブルまで作成しています。そのため、YAMAHA RTX830 と AWS 側で VPN 接続が完了した場合には、EC2 インスタンスを立てるだけで接続可能となっています。(ルートテーブルなどベット作成不要!) パラメータの CustomerGatewayIpAddress に RTX830 側のグローバル IP アドレスを指定ください。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
AWSTemplateFormatVersion: "2010-09-09"
Description: YAMAHA RTX830

Parameters:
  CustomerGatewayIpAddress:
    Type: String
    AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})
  VpcCidr:
    AllowedPattern: ^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])
    Default: "10.0"
    Description: VPC CIDR (*.*.0.0/16)
    Type: String

Resources:
  ### VPC AND SUBNETS RESOURCES
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Sub ${VpcCidr}.0.0/16
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  PrivateSubnet01:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Sub ${VpcCidr}.1.0/24
      AvailabilityZone: !Select
        - 0
        - !GetAZs
          Ref: AWS::Region
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-private-subnet-1
  PrivateSubnet02:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Sub ${VpcCidr}.2.0/24
      AvailabilityZone: !Select
        - 1
        - !GetAZs
          Ref: AWS::Region
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-private-subnet-2
  RouteTableForPrivateSubnets:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-route-table
  PrivateSubnetRouteTableAssociation01:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref RouteTableForPrivateSubnets
      SubnetId: !Ref PrivateSubnet01
  PrivateSubnetRouteTableAssociation02:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref RouteTableForPrivateSubnets
      SubnetId: !Ref PrivateSubnet02

  ### VPN RESOURCES
  VpnGateway:
    Type: AWS::EC2::VPNGateway
    Properties:
      Type: ipsec.1
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  VpnGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref Vpc
      VpnGatewayId: !Ref VpnGateway
  CustomerGateway:
    Type: AWS::EC2::CustomerGateway
    Properties:
      Type: ipsec.1
      BgpAsn: 65000
      IpAddress: !Ref CustomerGatewayIpAddress
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  VpnConnection:
    Type: AWS::EC2::VPNConnection
    Properties:
      Type: ipsec.1
      CustomerGatewayId: !Ref CustomerGateway
      VpnGatewayId: !Ref VpnGateway
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  VpnGatewayRoutePropagation:
    DependsOn: VpnConnection
    Type: AWS::EC2::VPNGatewayRoutePropagation
    Properties:
      RouteTableIds:
        - !Ref RouteTableForPrivateSubnets
      VpnGatewayId: !Ref VpnGateway

  ### VPN IAM USER AND SECRETKEY RESOURCES
  VpnUser:
    Type: AWS::IAM::User
    Properties:
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonVPCReadOnlyAccess
  AccessKey:
    Type: AWS::IAM::AccessKey
    Properties:
      UserName: !Ref VpnUser

Outputs:
  AccessKeyID:
    Description: IAM User Access Key
    Value: !Ref AccessKey
  SecretAccessKey:
    Description: IAM User Access Secret Key
    Value: !GetAtt AccessKey.SecretAccessKey
  VpnConnectonID:
    Description: VPN Connection ID
    Value: !Ref VpnConnection
  VpcID:
    Description: VPC ID, Private Gawateay exists
    Value: !Ref Vpc
    Export:
      Name: !Sub ${AWS::StackName}-vpcid

デプロイ

グルーバル IP の確認

1
2
curl inet-ip.info
xxx.xxx.xxx.xxx

デプロイ

1
aws cloudformation deploy --stack-name rtx830-vpn --template template.yaml --capabilities CAPABILITY_IAM --parameter-overrides CustomerGatewayIpAddress=xxx.xxx.xxx.xxx

テスト

作成した VPC のプライベートサブネットに EC2 インスタンスを立てる(パブリック IP アドレスなし)。セキュリティグループに自宅のローカル LAN からのアクセスのみ許可します。 きっと EC2 インスタンスのプライベート IP アドレスに対して ssh できるはずです。