{VPN}Site-to-Site VPN(複数VPC)

https://aws.amazon.com/jp/blogs/news/aws-hands-on-for-beginners-16/

 

前提: 
AWS側の作業OS: CentOS7(オンプレ)
GCP側の作業OS: CentOS7(オンプレ)
AWS側の作業ユーザ: testuser
GCP側の作業ユーザ: testuser


AWS側のASN: 64512
GCP側のASN: 64513

IPSec tunnel使用本数: 1本

AWS側のVPC名(サブネット): vpc01(10.0.0.0/24,10.0.1.0/24)、vpc21(10.2.0.0/24,10.2.1.0/24)
GCP側のVPC名(サブネット): vpc11(10.1.0.0/24)

AWS側のプライベートホストゾーン名: zone20220709-aws.local
GCP側のプライベートホストゾーン名: zone20220709-gcp.local

 

vpc21-vpc01---vcp11

最初はVPCピアリングもちいた上記構成を考えていたが、vpc21へのルート情報をvpc11へアドバタイズする方法が分からなかった。
そのため、トランジットゲートウェイを用いる下記の構成に変更した。

vpc01--
       |---vpc11
vpc21--


作業概要
-- 1. 事前準備【AWS
-- 2. gcloudコマンドのインストール【GCP
-- 3. VPC、サブネット作成[vpc01]【AWS
-- 4. VPC、サブネット作成[vpc21]【AWS
-- 5. VPC、サブネット作成【GCP
-- 6. インバウンドエンドポイントの作成[vpc01]【AWS
-- 7. アウトバウンドエンドポイントの作成[vpc01]【AWS
-- 8. インバウンドエンドポイントの作成[vpc21]【AWS
-- 9. アウトバウンドエンドポイントの作成[vpc21]【AWS
-- 10. Cloud HA VPN ゲートウェイ作成 【GCP
-- 11. Cloud Router作成 【GCP
-- 12. カスタマーゲートウェイ(CGW)作成【AWS
-- 13. トランジットゲートウエイ作成【AWS
-- 14. Transit Gatewayアタッチメントの作成【AWS
-- 15. VPN接続の作成【AWS
-- 16. ピアVPNゲートウェイ作成【GCP
-- 17. VPNトンネル作成【GCP
-- 18. BGPセッションの構成【GCP
-- 19. BGPステータス確認【AWS
-- 20. Transit Gatewayのルートテーブルにルート追加【AWS
-- 21. サブネットのルートテーブルにルート追加【AWS
-- 22. ルートテーブル確認【GCP
-- 23. pingで疎通確認
-- 24. 名前解決確認
-- 25. クリーンアップ【GCP
-- 26. クリーンアップ[VPN関連]【AWS
-- 27. クリーンアップ[vpc21]【AWS
-- 28. クリーンアップ[vpc01]【AWS

 


-- 1. 事前準備【AWS

-- 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 epel-release

sudo yum -y install jq

 


-- 2. gcloudコマンドのインストール【GCP

 

curl https://sdk.cloud.google.com | bash

source ~/.bash_profile
gcloud --version

 


gcloud init

※コンソールで実行

gcloud auth list
gcloud config list

 


-- 3. VPC、サブネット作成[vpc01]【AWS

 

-- 3.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'


-- 3.2 サブネット(10.0.0.0/24,10.0.0.1/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 create-subnet \
--availability-zone ap-northeast-1c \
--cidr-block 10.0.1.0/24 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet02}]' 


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=igw01}]' 


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-22222222222222222 \
--vpc-id vpc-11111111111111111


-- 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-22222222222222222 \
--route-table-id rtb-33333333333333333

 


-- 3.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.1.0.0/24からのアクセス許可


aws ec2 authorize-security-group-ingress \
--group-id sg-55555555555555555 \
--protocol all \
--port all \
--cidr 10.1.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.7 プライベートホストゾーンの作成

aws route53 create-hosted-zone \
--name zone20220709-aws.local \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-11111111111111111 \
--caller-reference 2022-08-20-23:09

aws route53 list-hosted-zones


-- 3.8 EC2インスタンスのプライベートIPアドレスをAレコードで登録する


vim a.json

{
  "Comment": "CREATE/DELETE/UPSERT a record ",
  "Changes": [
    { "Action": "UPSERT",
      "ResourceRecordSet": { "Name": "instance01.zone20220709-aws.local.",
                             "Type": "A",
                             "TTL": 300,
                             "ResourceRecords": [
                                 { "Value": "10.0.0.239" }
                             ]
                           }
    }
  ]
}


aws route53 change-resource-record-sets \
--hosted-zone-id 66666666666666666666 \
--change-batch file://a.json

 

aws route53 list-resource-record-sets \
--hosted-zone-id 66666666666666666666

 

-- 3.9 enableDnsHostnames および enableDnsSupport  を true に設定


aws ec2 describe-vpc-attribute \
--attribute enableDnsSupport \
--vpc-id vpc-11111111111111111

aws ec2 describe-vpc-attribute \
--attribute enableDnsHostnames \
--vpc-id vpc-11111111111111111

aws ec2 modify-vpc-attribute \
--enable-dns-hostnames \
--vpc-id vpc-11111111111111111

aws ec2 modify-vpc-attribute \
--enable-dns-support \
--vpc-id vpc-11111111111111111

立ち上げたEC2インスタンスで確認
nslookup instance01.zone20220709-aws.local

反映まで時間がかかることがある

 

 


-- 4. VPC、サブネット作成[vpc21]【AWS

-- 4.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'


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


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

aws ec2 create-subnet \
--availability-zone ap-northeast-1c \
--cidr-block 10.2.1.0/24 \
--vpc-id vpc-77777777777777777 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=subnet22}]' 


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


-- 4.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'


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


-- 4.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-88888888888888888 \
--route-table-id rtb-99999999999999999

 


-- 4.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=instance21}]' \
--subnet-id subnet-00000000000000000 \
--associate-public-ip-address

 


0.0.0.0/0からのSSH許可追加

aws ec2 authorize-security-group-ingress \
--group-id sg-aaaaaaaaaaaaaaaaa \
--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-aaaaaaaaaaaaaaaaa \
--protocol all \
--port all \
--cidr 10.0.0.0/24 \
--tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Name,Value=fw22}]' 


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


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


-- 4.7 vpc01と同じプライベートホストゾーンにvpc21を追加


aws route53 associate-vpc-with-hosted-zone \
--hosted-zone-id 66666666666666666666 \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-77777777777777777


aws route53 list-hosted-zones

 

 


-- 4.8 EC2インスタンスのプライベートIPアドレスをAレコードで登録する


vim a.json

{
  "Comment": "CREATE/DELETE/UPSERT a record ",
  "Changes": [
    { "Action": "UPSERT",
      "ResourceRecordSet": { "Name": "instance21.zone20220709-aws.local.",
                             "Type": "A",
                             "TTL": 300,
                             "ResourceRecords": [
                                 { "Value": "10.2.0.202" }
                             ]
                           }
    }
  ]
}


aws route53 change-resource-record-sets \
--hosted-zone-id 66666666666666666666 \
--change-batch file://a.json

 

aws route53 list-resource-record-sets \
--hosted-zone-id 66666666666666666666

 

-- 4.9 enableDnsHostnames および enableDnsSupport  を true に設定


aws ec2 describe-vpc-attribute \
--attribute enableDnsSupport \
--vpc-id vpc-77777777777777777

aws ec2 describe-vpc-attribute \
--attribute enableDnsHostnames \
--vpc-id vpc-77777777777777777

aws ec2 modify-vpc-attribute \
--enable-dns-hostnames \
--vpc-id vpc-77777777777777777

aws ec2 modify-vpc-attribute \
--enable-dns-support \
--vpc-id vpc-77777777777777777

立ち上げたEC2インスタンスで確認
nslookup instance21.zone20220709-aws.local

反映まで時間がかかることがある

 

 

-- 5. VPC、サブネット作成【GCP

-- 5.1 プロジェクトの作成

gcloud projects list


gcloud projects create project01-bbbbbbb \
--name="project01"

gcloud projects describe project01-bbbbbbb

-- 5.2 プロジェクトを請求先アカウントに紐づける(GUIから実施)

-- 5.3 プロジェクト設定

gcloud config list
gcloud config set project project01-bbbbbbb
gcloud config list


-- 5.4 Compute Engineの有効化
gcloud services enable compute.googleapis.com

 

-- 5.5 VPCを作成する


gcloud compute networks create vpc11 \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=regional


gcloud compute networks list

gcloud compute networks describe vpc11


-- 5.6 サブネット(10.1.0.0/24)を作成する

 

gcloud compute networks subnets create subnet11 \
--range=10.1.0.0/24 \
--stack-type=IPV4_ONLY \
--network=vpc11 \
--region=asia-northeast1

gcloud compute networks subnets list


gcloud compute networks subnets describe subnet11 \
--region=asia-northeast1


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

 

gcloud iam service-accounts list

gcloud compute instances create instance11 \
--zone=asia-northeast1-a \
--machine-type=e2-micro \
--network-interface=network-tier=STANDARD,subnet=subnet11 \
--maintenance-policy=MIGRATE \
--provisioning-model=STANDARD \
--service-account=cccccccccccc-compute@developer.gserviceaccount.com \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
--create-disk=auto-delete=yes,boot=yes,device-name=instance11,image=projects/centos-cloud/global/images/centos-7-v20220621,mode=rw,size=20,type=projects/project01-bbbbbbb/zones/asia-northeast1-a/diskTypes/pd-standard \
--no-shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring \
--reservation-affinity=any

 

0.0.0.0/0からのSSH許可追加


gcloud compute \
firewall-rules create fw11 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=0.0.0.0/0


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

gcloud compute \
firewall-rules create fw12 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=all \
--source-ranges=10.0.0.0/24


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

gcloud compute \
firewall-rules create fw13 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=all \
--source-ranges=10.2.0.0/24


インスタンスに公開鍵を設定する
ssh-keygen

gcloud compute instances add-metadata instance11 \
--zone=asia-northeast1-a \
--metadata=ssh-keys="testuser:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPOfAbh3viQV5z8JtEfb4ruejb7LWI+5PLogAqrlAk4gJd70NTPROj1oIU4c8TDlV4Cb52dPdzjbzIV/KeDPyn03g4g6VWjev9ItJ3mHlP4hmtMujoslG8GaRQ63BSItB+ydX5zWmfDkCmRLbkFqqS2gSi5FlZeJMzl9s16nl73tG0Ge6E+SiIderNRWfViS3L0hX/+siXindfaB8jbMgYIQJ4ZCEhcRCw39LM1ESY7zhAj4BKfhqKoX3llHRZH4DZYvKYEeyHEWMSjVDcZqoOAPRNHgttpY3nx7lGNUcd2gADIe9mpXzAIPhWDLx3pnC9MH1DNAp+roxKbi9S8tih testuser@mmm127"

ssh testuser@192.0.2.1

 

-- 5.8 プライベートホストゾーンの作成

インスタンスで実行


sudo yum install -y bind bind-utils
sudo systemctl start named
sudo systemctl status named

 

sudo vim /etc/named.conf

options {
        #listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { 10.1.0.2; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        #allow-query     { localhost; };
        allow-query     { 10.0.0.0/16;10.1.0.0/24;10.2.0.0/16; };

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

# 正引き
zone "zone20220709-gcp.local" IN {
        type master;
        file "zone20220709-gcp.local";
        allow-update { none; };
};

# 逆引き
zone "0.1.10.in-addr.arpa" {
      type master;
      file "zone20220709-gcp.local.rev";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 


sudo vim /var/named/zone20220709-gcp.local

$TTL      86400
@         IN       SOA     instance11.zone20220709-gcp.local.  root.zone20220709-gcp.local.(
                                        2022070901 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
          IN NS instance11.zone20220709-gcp.local.
instance11      IN A  10.1.0.2


sudo vim /var/named/zone20220709-gcp.local.rev 

$TTL      86400
@         IN       SOA     instance11.zone20220709-gcp.local.  root.zone20220709-gcp.local.(
                                        2022070901 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
         IN NS  instance11.zone20220709-gcp.local.
2        IN PTR instance11.zone20220709-gcp.local.

sudo named-checkconf
sudo rndc reload
sudo ss -ualpn

 


sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl status firewalld


nslookup instance11.zone20220709-gcp.local 10.1.0.2

 

 

-- 6. インバウンドエンドポイントの作成[vpc01]【AWS


aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-08-20-18:47 \
--name iep01 \
--security-group-ids sg-55555555555555555 \
--direction INBOUND \
--ip-addresses SubnetId=subnet-44444444444444444 SubnetId=subnet-ddddddddddddddddd


aws route53resolver list-resolver-endpoints

 

-- 7. アウトバウンドエンドポイントの作成[vpc01]【AWS

 

aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-08-20-19:50 \
--name oep01 \
--security-group-ids sg-55555555555555555 \
--direction OUTBOUND \
--ip-addresses SubnetId=subnet-44444444444444444 SubnetId=subnet-ddddddddddddddddd


aws route53resolver list-resolver-endpoints


ルールの作成
「zone20220709-gcp.local」ドメインだった場合、GCP側のDNSサーバ(10.1.0.2)にフォワード

aws route53resolver create-resolver-rule \
--creator-request-id 2022-08-20-19:51 \
--name rule01 \
--rule-type FORWARD \
--domain-name zone20220709-gcp.local \
--target-ips="Ip=10.1.0.2,Port=53" \
--resolver-endpoint-id rslvr-out-eeeeeeeeeeeeeeeee


aws route53resolver list-resolver-rules

aws route53resolver associate-resolver-rule \
--resolver-rule-id rslvr-rr-fffffffffffffffff \
--vpc-id vpc-11111111111111111

 


-- 8. インバウンドエンドポイントの作成[vpc21]【AWS


aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-08-20-19:47 \
--name iep02 \
--security-group-ids sg-aaaaaaaaaaaaaaaaa \
--direction INBOUND \
--ip-addresses SubnetId=subnet-00000000000000000 SubnetId=subnet-ggggggggggggggggg


aws route53resolver list-resolver-endpoints

 

-- 9. アウトバウンドエンドポイントの作成[vpc21]【AWS

 

aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-08-20-21:50 \
--name oep02 \
--security-group-ids sg-aaaaaaaaaaaaaaaaa \
--direction OUTBOUND \
--ip-addresses SubnetId=subnet-00000000000000000 SubnetId=subnet-ggggggggggggggggg


aws route53resolver list-resolver-endpoints


ルールの作成
「zone20220709-gcp.local」ドメインだった場合、GCP側のDNSサーバ(10.1.0.2)にフォワード

aws route53resolver create-resolver-rule \
--creator-request-id 2022-08-20-21:51 \
--name rule01 \
--rule-type FORWARD \
--domain-name zone20220709-gcp.local \
--target-ips="Ip=10.1.0.2,Port=53" \
--resolver-endpoint-id rslvr-out-hhhhhhhhhhhhhhhhh


aws route53resolver list-resolver-rules

aws route53resolver associate-resolver-rule \
--resolver-rule-id rslvr-rr-iiiiiiiiiiiiiiiii \
--vpc-id vpc-77777777777777777

 


-- 10. Cloud HA VPN ゲートウェイ作成 【GCP

gcloud compute vpn-gateways create vpn11 \
--region=asia-northeast1 \
--network=vpc11 \
--stack-type=IPV4_ONLY

 

gcloud compute vpn-gateways list

gcloud compute vpn-gateways describe vpn11 \
--region=asia-northeast1

 

-- 11. Cloud Router作成 【GCP

 

gcloud compute routers create cr11 \
--region=asia-northeast1 \
--network=vpc11 \
--asn=64513

gcloud compute routers list

gcloud compute routers describe cr11 \
--region=asia-northeast1

 

-- 12. カスタマーゲートウェイ(CGW)作成【AWS


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

※ip-addressはGCPCloud HA VPN ゲートウェイのid=0のアドレスを指定する


aws ec2 describe-customer-gateways

 


-- 13. トランジットゲートウエイ作成【AWS

aws ec2 describe-transit-gateways

 

aws ec2 create-transit-gateway \
--options '{
  "AmazonSideAsn": 64512,
  "AutoAcceptSharedAttachments": "enable",
  "DefaultRouteTableAssociation": "enable",
  "DefaultRouteTablePropagation": "enable",
  "VpnEcmpSupport": "enable",
  "DnsSupport": "enable",
  "MulticastSupport": "disable"
}' \
--tag-specifications '[
  {
    "ResourceType": "transit-gateway",
    "Tags": [ {"Key": "Name", "Value" : "tgw01" } ]
  }
]'

 


-- 14. Transit Gatewayアタッチメントの作成【AWS


aws ec2 describe-transit-gateway-attachments
aws ec2 describe-transit-gateway-vpc-attachments
aws ec2 describe-transit-gateway-peering-attachments
aws ec2 describe-transit-gateway-route-tables

aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-jjjjjjjjjjjjjjjjj \
--vpc-id vpc-11111111111111111 \
--subnet-ids subnet-44444444444444444 \
--options '{
  "DnsSupport": "enable",
  "Ipv6Support": "disable",
  "ApplianceModeSupport": "disable"
}' \
--tag-specifications '[
  {
    "ResourceType": "transit-gateway-attachment",
    "Tags": [ {"Key": "Name", "Value" : "tgwa01" } ]
  }
]'


aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-jjjjjjjjjjjjjjjjj \
--vpc-id vpc-77777777777777777 \
--subnet-ids subnet-00000000000000000 \
--options '{
  "DnsSupport": "enable",
  "Ipv6Support": "disable",
  "ApplianceModeSupport": "disable"
}' \
--tag-specifications '[
  {
    "ResourceType": "transit-gateway-attachment",
    "Tags": [ {"Key": "Name", "Value" : "tgwa21" } ]
  }
]'

 


-- 15. VPN接続の作成【AWS

 

aws ec2 create-vpn-connection \
--customer-gateway-id cgw-kkkkkkkkkkkkkkkkk \
--type ipsec.1 \
--transit-gateway-id tgw-jjjjjjjjjjjjjjjjj \
--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 "Generic"


aws ec2 get-vpn-connection-device-sample-configuration \
--vpn-connection-id vpn-lllllllllllllllll \
--vpn-connection-device-type-id 9005b6c1 \
--internet-key-exchange-version ikev1 \
--output text


IPSec Tunnel #1のPre-Shared KeyとInside IP Addressesを記録

 

-- 16. ピアVPNゲートウェイ作成【GCP


gcloud compute external-vpn-gateways create pvg11 \
--interfaces 0=192.0.2.3

ipアドレスAWS側Tunnel 1の外部IPアドレス

 

gcloud compute external-vpn-gateways list

gcloud compute external-vpn-gateways describe pvg11

 

-- 17. VPNトンネル作成【GCP

 

gcloud compute vpn-tunnels create tun11 \
--shared-secret=mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm \
--peer-external-gateway=pvg11 \
--vpn-gateway=vpn11 \
--ike-version=1 \
--interface=0 \
--peer-external-gateway-interface=0 \
--region=asia-northeast1 \
--router=cr11 \
--router-region=asia-northeast1


※shared-secretはAWSIPSec Tunnel #1のPre-Shared Key

 

gcloud compute vpn-tunnels list

gcloud compute vpn-tunnels describe tun11 \
--region=asia-northeast1

 

-- 18. BGPセッションの構成【GCP

gcloud compute routers add-interface cr11 \
--interface-name=bgp-interface11 \
--vpn-tunnel=tun11 \
--vpn-tunnel-region=asia-northeast1 \
--ip-address=169.254.34.138 \
--mask-length=30 \
--region=asia-northeast1


※ip-addressはAWSIPSec Tunnel #1のCustomer GatewayのInside IP Addresses

 


gcloud compute routers add-bgp-peer cr11 \
--interface=bgp-interface11 \
--peer-asn=64512 \
--peer-name=bgp-peer11 \
--advertisement-mode=DEFAULT \
--no-enable-ipv6 \
--peer-ip-address=169.254.34.137 \
--region=asia-northeast1

 

※peer-ip-addressはAWSIPSec Tunnel #1のVirtual Private GatewayのInside IP Addresses

 

 

-- 19. BGPステータス確認【AWS

aws ec2 describe-vpn-connections

 

-- 20. Transit Gatewayのルートテーブルにルート追加【AWS
ピアリングされた Transit Gateway 間でトラフィックをルーティングするには、
Transit Gateway のピアリングアタッチメントをポイントする静的ルートを Transit Gateway のルートテーブルに追加する必要があります。

 

aws ec2 create-transit-gateway-route \
--destination-cidr-block 10.2.0.0/16 \
--transit-gateway-route-table-id tgw-rtb-nnnnnnnnnnnnnnnnn \
--transit-gateway-attachment-id tgw-attach-ooooooooooooooooo


aws ec2 create-transit-gateway-route \
--destination-cidr-block 10.0.0.0/16 \
--transit-gateway-route-table-id tgw-rtb-nnnnnnnnnnnnnnnnn \
--transit-gateway-attachment-id tgw-attach-ppppppppppppppppp

 


-- 21. サブネットのルートテーブルにルート追加【AWS


4ルートともに宛先はトランジットゲートウェイ

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

aws ec2 create-route \
--destination-cidr-block 10.1.0.0/16 \
--gateway-id tgw-jjjjjjjjjjjjjjjjj \
--route-table-id rtb-33333333333333333


aws ec2 create-route \
--destination-cidr-block 10.2.0.0/16 \
--gateway-id tgw-jjjjjjjjjjjjjjjjj \
--route-table-id rtb-33333333333333333

 


aws ec2 create-route \
--destination-cidr-block 10.0.0.0/16 \
--gateway-id tgw-jjjjjjjjjjjjjjjjj \
--route-table-id rtb-99999999999999999

aws ec2 create-route \
--destination-cidr-block 10.1.0.0/16 \
--gateway-id tgw-jjjjjjjjjjjjjjjjj \
--route-table-id rtb-99999999999999999

 

 

 

-- 22. ルートテーブル確認【GCP

AWS側(10.0.0.0/16、10.2.0.0/16)へのルーティングが動的に設定されていることを確認

gcloud compute routers get-status cr11 \
--region=asia-northeast1 \
--format="flattened(result.bestRoutes)"

 

 

 

-- 23. pingで疎通確認
下記6パターンで確認

AWSVPC間 vpc01 -> vpc21
ping 10.2.0.202

AWSVPC間 vpc01 <- vpc21
ping 10.0.0.239

AWS-GPC間 vpc01 -> vpc11
ping 10.1.0.2

AWS-GPC間 vpc01 <- vpc11
ping 10.0.0.239


AWS-GPC間 vpc21 -> vpc11
ping 10.1.0.2


AWS-GPC間 vpc21 <- vpc11
ping 10.2.0.202

 

 


-- 24. 名前解決確認
下記6パターンで確認

AWSVPC間 vpc01 -> vpc21
nslookup instance21.zone20220709-aws.local 10.0.0.2

AWSVPC間 vpc01 <- vpc21
nslookup instance01.zone20220709-aws.local 10.2.0.2

AWS-GPC間 vpc01 -> vpc11
nslookup instance11.zone20220709-gcp.local 10.1.0.2


AWS-GPC間 vpc01 <- vpc11
nslookup instance01.zone20220709-aws.local 10.0.0.10


AWS-GPC間 vpc21 -> vpc11
nslookup instance11.zone20220709-gcp.local 10.1.0.2

AWS-GPC間 vpc21 <- vpc11
nslookup instance21.zone20220709-aws.local 10.2.0.25

 

 

-- 25. クリーンアップ【GCP

--プロジェクト削除

gcloud projects list

gcloud projects delete project01-bbbbbbb

 


-- 26. クリーンアップ[VPN関連]【AWS

 

-- VPN接続削除


aws ec2 describe-vpn-connections

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


-- Transit Gatewayアタッチメントの削除


aws ec2 describe-transit-gateway-attachments
aws ec2 describe-transit-gateway-vpc-attachments
aws ec2 describe-transit-gateway-peering-attachments
aws ec2 describe-transit-gateway-route-tables

aws ec2 delete-transit-gateway-vpc-attachment \
--transit-gateway-attachment-id tgw-attach-ppppppppppppppppp


aws ec2 delete-transit-gateway-vpc-attachment \
--transit-gateway-attachment-id tgw-attach-ooooooooooooooooo


-- Transit Gatewayの削除


aws ec2 describe-transit-gateways

aws ec2 delete-transit-gateway \
--transit-gateway-id tgw-jjjjjjjjjjjjjjjjj

 

 


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

aws ec2 describe-customer-gateways

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

 

-- 27. クリーンアップ[vpc21]【AWS

 


-- アウトバウンドエンドポイントの削除

aws route53resolver list-resolver-rules

aws route53resolver list-resolver-rule-associations


aws route53resolver disassociate-resolver-rule \
--resolver-rule-id rslvr-rr-iiiiiiiiiiiiiiiii \
--vpc-id vpc-77777777777777777

時間がかかる


aws route53resolver delete-resolver-rule \
--resolver-rule-id rslvr-rr-iiiiiiiiiiiiiiiii

 

aws route53resolver list-resolver-endpoints

aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-out-hhhhhhhhhhhhhhhhh


-- インバウンドエンドポイントの削除

aws route53resolver list-resolver-endpoints

aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-in-qqqqqqqqqqqqqqqqq

 


-- Aレコードの削除


vim a.json

{
  "Comment": "CREATE/DELETE/UPSERT a record ",
  "Changes": [
    { "Action": "DELETE",
      "ResourceRecordSet": { "Name": "instance21.zone20220709-aws.local.",
                             "Type": "A",
                             "TTL": 300,
                             "ResourceRecords": [
                                 { "Value": "10.2.0.202" }
                             ]
                           }
    }
  ]
}


aws route53 change-resource-record-sets \
--hosted-zone-id 66666666666666666666 \
--change-batch file://a.json

 

aws route53 list-resource-record-sets \
--hosted-zone-id 66666666666666666666

 

-- インスタンス削除

aws ec2 describe-instances

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

 

 

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

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

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

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


-- サブネット削除


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

aws ec2  delete-subnet \
--subnet-id subnet-00000000000000000


aws ec2  delete-subnet \
--subnet-id subnet-ggggggggggggggggg

 

-- VPC削除

aws ec2  delete-vpc \
--vpc-id vpc-77777777777777777

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

 

-- 28. クリーンアップ[vpc01]【AWS


-- アウトバウンドエンドポイントの削除

aws route53resolver list-resolver-rules

aws route53resolver list-resolver-rule-associations


aws route53resolver disassociate-resolver-rule \
--resolver-rule-id rslvr-rr-fffffffffffffffff \
--vpc-id vpc-11111111111111111


時間がかかる


aws route53resolver delete-resolver-rule \
--resolver-rule-id rslvr-rr-fffffffffffffffff

 


aws route53resolver list-resolver-endpoints

aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-out-eeeeeeeeeeeeeeeee


-- インバウンドエンドポイントの削除

aws route53resolver list-resolver-endpoints

aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-in-sssssssssssssssss

 

-- Aレコードの削除

 


vim a.json

{
  "Comment": "CREATE/DELETE/UPSERT a record ",
  "Changes": [
    { "Action": "DELETE",
      "ResourceRecordSet": { "Name": "instance01.zone20220709-aws.local.",
                             "Type": "A",
                             "TTL": 300,
                             "ResourceRecords": [
                                 { "Value": "10.0.0.239" }
                             ]
                           }
    }
  ]
}


aws route53 change-resource-record-sets \
--hosted-zone-id 66666666666666666666 \
--change-batch file://a.json

 

aws route53 list-resource-record-sets \
--hosted-zone-id 66666666666666666666

 

-- プライベートホストゾーンの削除

aws route53 list-hosted-zones

aws route53 delete-hosted-zone \
--id 66666666666666666666

 

-- インスタンス削除

aws ec2 describe-instances

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

 


-- インターネットゲートウェイ削除(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


aws ec2  delete-subnet \
--subnet-id subnet-ddddddddddddddddd

 

-- VPC削除

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

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