{VPN}Site-to-Site VPN(AWS <-> VyOS)

 

https://qiita.com/sugimount-a/items/2f2e8d27ade90bb3b554
https://blog.serverworks.co.jp/tech/2020/03/03/post-71975/
https://www.yamamanx.com/vyo-aws-ohioregion/
https://dev.classmethod.jp/articles/vyos-aws-vpn-static-routing/
https://dev.classmethod.jp/articles/vyos-aws/
https://dev.classmethod.jp/articles/soracom-door/

 

 

前提: 

東京リージョンのASN: 64512
大阪リージョンのASN: 64515

IPSec tunnel使用本数: 2本

東京リージョンのVPC名(サブネット): vpc01(10.0.0.0/24)
大阪リージョンのVPC名(サブネット): vpc21(10.2.0.0/24)

 


-- 1. 事前準備

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

 

-- 1.2 jqインストール

sudo yum -y install jq


-- 2. VPC、サブネット作成[東京リージョン]

export AWS_DEFAULT_REGION=ap-northeast-1


-- 2.1 VPC(10.0.0.0/16)を作成する

aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--instance-tenancy default \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc01}]' 


aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'


-- 2.2 サブネット(10.0.0.0/24)を作成する


aws ec2 create-subnet \
--availability-zone ap-northeast-1a \
--cidr-block 10.0.0.0/24 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet01}]' 


aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'


-- 2.3 インターネットゲートウェイを作成する


aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=igw01}]' 


aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'


-- 2.4 インターネットゲートウェイVPCにアタッチする
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-22222222222222222 \
--vpc-id vpc-11111111111111111


-- 2.5 ルートテーブルのデフォルトゲートウェイとしてインターネットゲートウエイを指定する

aws ec2 describe-route-tables
aws ec2 describe-route-tables | jq -r '.RouteTables.RouteTableId'

aws ec2 create-route \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-22222222222222222 \
--route-table-id rtb-33333333333333333

 


-- 2.6 インスタンス作成(FW設定含む)

aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance01}]' \
--subnet-id subnet-44444444444444444 \
--associate-public-ip-address


0.0.0.0/0からのSSH許可追加

aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw01}]' 


10.0.0.0/24からのアクセス許可


aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol all \
--port all \
--cidr 10.0.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw02}]' 


10.2.0.0/24からのアクセス許可


aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol all \
--port all \
--cidr 10.2.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw03}]' 

 


-- 3. VPC、サブネット作成[大阪リージョン]

export AWS_DEFAULT_REGION=ap-northeast-3


-- 3.1 VPC(10.2.0.0/16)を作成する

aws ec2 create-vpc \
--cidr-block 10.2.0.0/16 \
--instance-tenancy default \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vpc21}]' 


aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'


-- 3.2 サブネット(10.2.0.0/24)を作成する


aws ec2 create-subnet \
--availability-zone ap-northeast-3a \
--cidr-block 10.2.0.0/24 \
--vpc-id vpc-66666666666666666 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet21}]' 

aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'


-- 3.3 インターネットゲートウェイを作成する


aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=igw21}]' 


aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'


-- 3.4 インターネットゲートウェイVPCにアタッチする
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-77777777777777777 \
--vpc-id vpc-66666666666666666


-- 3.5 ルートテーブルのデフォルトゲートウェイとしてインターネットゲートウエイを指定する

aws ec2 describe-route-tables
aws ec2 describe-route-tables | jq -r '.RouteTables.RouteTableId'

aws ec2 create-route \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-77777777777777777 \
--route-table-id rtb-88888888888888888

 


-- 3.6 インスタンス作成(FW設定含む)

aws ec2 run-instances \
--image-id ami-0bfdfe2977c12e24b \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance21}]' \
--subnet-id subnet-99999999999999999 \
--associate-public-ip-address

 


0.0.0.0/0からのSSH許可追加

aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw21}]' 

 

10.0.0.0/24からのアクセス許可


aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol all \
--port all \
--cidr 10.0.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw22}]' 


10.2.0.0/24からのアクセス許可


aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol all \
--port all \
--cidr 10.2.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw23}]' 

 


-- 4. VyOSインスタンスの作成[大阪リージョン]

export AWS_DEFAULT_REGION=ap-northeast-3

 

-- 4.1 VyOSインスタンス作成(FW設定含む)

aws ec2 run-instances \
--image-id ami-095cbae03c2bd9ced \
--instance-type t3.small \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=VyOS}]' \
--subnet-id subnet-99999999999999999


UDP 500へのアクセス許可

aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol udp \
--port 500 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw24}]' 

UDP 4500へのアクセス許可

aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol udp \
--port 4500 \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw25}]' 

ESP ALLへのアクセス許可

aws ec2 authorize-security-group-ingress \
--group-id sg-00000000000000000 \
--protocol 50 \
--port all \
--cidr 0.0.0.0/0 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw26}]' 

 

 

 


-- 4.2 送信元/送信先の変更チェックを無効化


aws ec2 modify-instance-attribute \
--instance-id=i-aaaaaaaaaaaaaaaaa \
--no-source-dest-check

 

-- 4.3 EIPの割り当て

aws ec2  allocate-address

aws ec2 describe-addresses

-- 4.4 EIPの関連付け

aws ec2 associate-address \
--allocation-id eipalloc-bbbbbbbbbbbbbbbbb \
--instance-id i-aaaaaaaaaaaaaaaaa

 

 


-- 5. カスタマーゲートウェイ(CGW)作成[東京リージョン]
export AWS_DEFAULT_REGION=ap-northeast-1


aws ec2 create-customer-gateway \
--bgp-asn 64515 \
--type ipsec.1 \
--tag-specifications 'ResourceType=customer-gateway,Tags=[{Key=Name,Value=cgw01}]' \
--ip-address 192.0.2.1


※ip-addressはVyOSインスタンスのパブリックアドレスを指定する


aws ec2 describe-customer-gateways


-- 6. 仮想プライベートゲートウェイ作成[東京リージョン]
export AWS_DEFAULT_REGION=ap-northeast-1

aws ec2 create-vpn-gateway \
--availability-zone ap-northeast-1a \
--type ipsec.1 \
--tag-specifications 'ResourceType=vpn-gateway,Tags=[{Key=Name,Value=vgw01}]' \
--amazon-side-asn 64512

aws ec2 describe-vpn-gateways

 

aws ec2 attach-vpn-gateway \
--vpc-id vpc-11111111111111111 \
--vpn-gateway-id vgw-ccccccccccccccccc


-- 7. VPN接続の作成[東京リージョン]
export AWS_DEFAULT_REGION=ap-northeast-1


aws ec2 create-vpn-connection \
--customer-gateway-id cgw-ddddddddddddddddd \
--type ipsec.1 \
--vpn-gateway-id vgw-ccccccccccccccccc \
--tag-specifications 'ResourceType=vpn-connection,Tags=[{Key=Name,Value=vpn01}]'


aws ec2 describe-vpn-connections


aws ec2 get-vpn-connection-device-types
aws ec2 get-vpn-connection-device-types | grep -C 5 "Vyatta"


aws ec2 get-vpn-connection-device-sample-configuration \
--vpn-connection-id vpn-eeeeeeeeeeeeeeeee \
--vpn-connection-device-type-id f1647754 \
--internet-key-exchange-version ikev1 \
--output text

 

 


-- 8. VyOSの設定[大阪リージョン]


VyOSインスタンスsshログインして作業

ユーザ名: vyos


configure

vpn接続からダウンロードした設定コマンド投入

※ただし、下記の変更を実施(それぞれトンネル1用とトンネル2用の2か所ある)

set vpn ipsec site-to-site peer 192.0.2.2 local-address '192.0.2.3'
のlocal-addressはVyOSのプライベートアドレスに変更

set protocols bgp 64515 network 0.0.0.0/0

set protocols bgp 64515 address-family ipv4-unicast network 10.2.0.0/16

また、下記コマンドのエラーは無視
set protocols bgp 64515 neighbor 192.0.2.4 soft-reconfiguration 'inbound'


commit
save


exit


show vpn ike sa

show ip bgp
ip route show

 

 

 

-- 9. サブネットのルートテーブルにルート伝播の設定[東京リージョン]
export AWS_DEFAULT_REGION=ap-northeast-1


aws ec2 enable-vgw-route-propagation \
--gateway-id vgw-ccccccccccccccccc \
--route-table-id rtb-33333333333333333

 


-- 10. サブネットのルートテーブルに東京リージョンへのルート追加[大阪リージョン]
export AWS_DEFAULT_REGION=ap-northeast-3

aws ec2 describe-route-tables
aws ec2 describe-route-tables | jq -r '.RouteTables.RouteTableId'

aws ec2 create-route \
--destination-cidr-block 10.0.0.0/24 \
--instance-id i-aaaaaaaaaaaaaaaaa \
--route-table-id rtb-88888888888888888

 

-- 11. pingで疎通確認

ping 10.2.0.200


ping 10.0.0.54

 

 

-- 12. クリーンアップ[大阪リージョン、VPN関連]
export AWS_DEFAULT_REGION=ap-northeast-3

-- EIPの関連付けの開放
aws ec2 describe-addresses

aws ec2 disassociate-address \
--association-id eipassoc-fffffffffffffffff


-- VyOSインスタンス削除

aws ec2 describe-instances

aws ec2 terminate-instances \
--instance-ids i-aaaaaaaaaaaaaaaaa


-- EIP解放

aws ec2 release-address \
--allocation-id eipalloc-bbbbbbbbbbbbbbbbb

 

-- 13. クリーンアップ[東京リージョン、VPN関連]
export AWS_DEFAULT_REGION=ap-northeast-1

-- VPN接続削除


aws ec2 describe-vpn-connections

aws ec2 delete-vpn-connection \
--vpn-connection-id vpn-eeeeeeeeeeeeeeeee

 


-- 仮想プライベートゲートウェイ削除(VPCからデタッチしてから)


aws ec2 describe-vpn-gateways

aws ec2 detach-vpn-gateway \
--vpc-id vpc-11111111111111111 \
--vpn-gateway-id vgw-ccccccccccccccccc


aws ec2 delete-vpn-gateway \
--vpn-gateway-id vgw-ccccccccccccccccc

 


-- カスタマーゲートウェイ削除

aws ec2 describe-customer-gateways

aws ec2 delete-customer-gateway \
--customer-gateway-id cgw-ddddddddddddddddd

 


-- 14. クリーンアップ[大阪リージョン、VPC関連]
export AWS_DEFAULT_REGION=ap-northeast-3

-- インスタンス削除

aws ec2 describe-instances

aws ec2 terminate-instances \
--instance-ids i-ggggggggggggggggg

 


-- インターネットゲートウェイ削除(VPCからデタッチしてから)

aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'

aws ec2 detach-internet-gateway \
--internet-gateway-id igw-77777777777777777 \
--vpc-id vpc-66666666666666666

aws ec2 delete-internet-gateway \
--internet-gateway-id igw-77777777777777777


-- サブネット削除


aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'

aws ec2  delete-subnet \
--subnet-id subnet-99999999999999999

 

-- VPC削除

aws ec2  delete-vpc \
--vpc-id vpc-66666666666666666

aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'

 

-- 15. クリーンアップ[東京リージョン、VPC関連]
export AWS_DEFAULT_REGION=ap-northeast-1


-- インスタンス削除

aws ec2 describe-instances

aws ec2 terminate-instances \
--instance-ids i-hhhhhhhhhhhhhhhhh

 


-- インターネットゲートウェイ削除(VPCからデタッチしてから)

aws ec2 describe-internet-gateways
aws ec2 describe-internet-gateways | jq -r '.InternetGateways.InternetGatewayId'

aws ec2 detach-internet-gateway \
--internet-gateway-id igw-22222222222222222 \
--vpc-id vpc-11111111111111111

aws ec2 delete-internet-gateway \
--internet-gateway-id igw-22222222222222222

 


-- サブネット削除


aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets.SubnetId'

aws ec2  delete-subnet \
--subnet-id subnet-44444444444444444


-- VPC削除

aws ec2  delete-vpc \
--vpc-id vpc-11111111111111111

aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs[].VpcId'