https://qiita.com/mksamba/items/b16e99170e666b68f194
https://tex2e.github.io/blog/linux/bind-dns-server
前提:
AWS側の作業OS: CentOS7(オンプレ)
GCP側の作業OS: CentOS7(オンプレ)
AWS側の作業ユーザ: testuser
GCP側の作業ユーザ: testuser
AWS側のASN: 64512
GCP側のASN: 64513
IPSec tunnel使用本数: 1本
AWS側のサブネット: 10.0.0.0/24,10.0.1.0/24
GCP側のサブネット: 10.1.0.0/24
AWS側のプライベートホストゾーン名: zone20220709-aws.local
GCP側のプライベートホストゾーン名: zone20220709-gcp.local
-- 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
※コンソールで実行
-- 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
-- 4.1 プロジェクトの作成
gcloud projects list
gcloud projects create project01-9999999 \
--name="project01"
gcloud projects describe project01-9999999
-- 4.2 プロジェクトを請求先アカウントに紐づける(GUIから実施)
-- 4.3 プロジェクト設定
gcloud config list
gcloud config set project project01-9999999
gcloud config list
-- 4.4 Compute Engineの有効化
gcloud services enable compute.googleapis.com
-- 4.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
-- 4.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
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
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=fw01}]'
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=fw02}]'
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=999999999999-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-9999999/zones/asia-northeast1-a/diskTypes/pd-standard \
--no-shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring \
--reservation-affinity=any
10.0.0.0/24からのアクセス許可
gcloud compute \
firewall-rules create fw11 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=all \
--source-ranges=10.0.0.0/24
0.0.0.0/0からのSSH許可追加
gcloud compute \
firewall-rules create fw12 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=0.0.0.0/0
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
-- 7. プライベートホストゾーンの作成【AWS】
aws route53 create-hosted-zone \
--name zone20220709-aws.local \
--vpc VPCRegion=ap-northeast-1,VPCId=vpc-11111111111111111 \
--caller-reference 2022-07-09-18:47
aws route53 list-hosted-zones
-- 8. EC2インスタンスのプライベートIPアドレスをAレコードで登録する【AWS】
{
"Comment": "CREATE/DELETE/UPSERT a record ",
"Changes": [
{ "Action": "UPSERT",
"ResourceRecordSet": { "Name": "test.zone20220709-aws.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.0.0.160" }
]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id XXXXXXXXXXXXXXXXXX \
--change-batch file://a.json
aws route53 list-resource-record-sets \
--hosted-zone-id XXXXXXXXXXXXXXXXXX
-- 9. enableDnsHostnames および enableDnsSupport を true に設定【AWS】
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 test.zone20220709-aws.local
-- 10. インバウンドエンドポイントの作成【AWS】
aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-07-09-18:47 \
--name iep01 \
--security-group-ids sg-55555555555555555 \
--direction INBOUND \
--ip-addresses SubnetId=subnet-44444444444444444 SubnetId=subnet-66666666666666666
aws route53resolver list-resolver-endpoints
-- 11. プライベートホストゾーンの作成【GCP】
インスタンスで実行
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/24;10.1.0.0/24; };
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 test.zone20220709-gcp.local. root.zone20220709-gcp.local.(
2022070901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS test.zone20220709-gcp.local.
test IN A 10.1.0.2
sudo vim /var/named/zone20220709-gcp.local.rev
$TTL 86400
@ IN SOA test.zone20220709-gcp.local. root.zone20220709-gcp.local.(
2022070901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS test.zone20220709-gcp.local.
2 IN PTR test.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 test.zone20220709-gcp.local 10.1.0.2
-- 12. アウトバウンドエンドポイントの作成【AWS】
aws route53resolver create-resolver-endpoint \
--creator-request-id 2022-07-09-19:50 \
--name oep01 \
--security-group-ids sg-55555555555555555 \
--direction OUTBOUND \
--ip-addresses SubnetId=subnet-44444444444444444 SubnetId=subnet-66666666666666666
aws route53resolver list-resolver-endpoints
ルールの作成
「zone20220709-gcp.local」ドメインだった場合、GCP側のDNSサーバ(10.1.0.2)にフォワード
aws route53resolver create-resolver-rule \
--creator-request-id 2022-07-09-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-77777777777777777
aws route53resolver list-resolver-rules
aws route53resolver associate-resolver-rule \
--resolver-rule-id rslvr-rr-88888888888888888 \
--vpc-id vpc-11111111111111111
-- 13. 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
-- 14. 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
-- 15. カスタマーゲートウェイ(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
-- 16. 仮想プライベートゲートウェイ(VGW)作成【AWS】
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 attach-vpn-gateway \
--vpc-id vpc-11111111111111111 \
--vpn-gateway-id vgw-99999999999999999
aws ec2 create-vpn-connection \
--customer-gateway-id cgw-aaaaaaaaaaaaaaaaa \
--type ipsec.1 \
--vpn-gateway-id vgw-99999999999999999 \
--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-bbbbbbbbbbbbbbbbb \
--vpn-connection-device-type-id 9005b6c1 \
--internet-key-exchange-version ikev1 \
--output text
IPSec Tunnel #1のPre-Shared KeyとInside IP Addressesを記録
gcloud compute external-vpn-gateways create pvg11 \
--interfaces 0=192.0.2.3
gcloud compute external-vpn-gateways list
gcloud compute external-vpn-gateways describe pvg11
gcloud compute vpn-tunnels create tun11 \
--shared-secret=zbcq_xtFs91234567oh2Zy.zEABCrdgX \
--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はAWS側IPSec Tunnel #1のPre-Shared Key
gcloud compute vpn-tunnels list
gcloud compute vpn-tunnels describe tun11 \
--region=asia-northeast1
-- 20. BGPセッションの構成【GCP】
gcloud compute routers add-interface cr11 \
--interface-name=bgp-interface11 \
--vpn-tunnel=tun11 \
--vpn-tunnel-region=asia-northeast1 \
--ip-address=169.254.211.114 \
--mask-length=30 \
--region=asia-northeast1
※ip-addressはAWS側IPSec 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.211.113 \
--region=asia-northeast1
※peer-ip-addressはAWS側IPSec Tunnel #1のVirtual Private GatewayのInside IP Addresses
-- 21. BGPステータス確認【AWS】
aws ec2 describe-vpn-connections
-- 22. 疎通確認
-- 22.1 GCP(10.1.0.0/24)への経路(ターゲットはVGW)をサブネットのルートテーブルに追加【AWS】
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/24 \
--gateway-id vgw-99999999999999999 \
--route-table-id rtb-33333333333333333
-- 22.2 AWS側(10.0.0.0/16)へのルーティングが動的に設定されていることを確認【GCP】
インスタンスで実行
ping 10.1.0.2
インスタンスで実行
ping 10.0.0.160
-- 23. インバウンドエンドポイントを利用した外部からの名前解決【GCP】
インスタンスで実行
nslookup test.zone20220709-aws.local 10.0.0.134
-- 24. アウトバウンドエンドポイントを利用した外部ドメインの名前解決【AWS】
インスタンスで実行
nslookup test.zone20220709-gcp.local 10.0.0.2
※VPC付属のRoute 53 Resolver (10.0.0.2)を使用
-- 25. クリーンアップ【GCP】
--プロジェクト削除
gcloud projects list
gcloud projects delete project01-9999999
-- 26. クリーンアップ【AWS】
-- アウトバウンドエンドポイントの削除
aws route53resolver list-resolver-rules
aws route53resolver list-resolver-rule-associations
aws route53resolver disassociate-resolver-rule \
--resolver-rule-id rslvr-rr-88888888888888888 \
--vpc-id vpc-11111111111111111
時間がかかる
aws route53resolver delete-resolver-rule \
--resolver-rule-id rslvr-rr-88888888888888888
aws route53resolver list-resolver-endpoints
aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-out-77777777777777777
-- インバウンドエンドポイントの削除
aws route53resolver list-resolver-endpoints
aws route53resolver delete-resolver-endpoint \
--resolver-endpoint-id rslvr-in-ccccccccccccccccc
-- プライベートホストゾーンの削除
{
"Comment": "CREATE/DELETE/UPSERT a record ",
"Changes": [
{ "Action": "DELETE",
"ResourceRecordSet": { "Name": "test.zone20220709-aws.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "10.0.0.160" }
]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id XXXXXXXXXXXXXXXXXX \
--change-batch file://a.json
aws route53 list-resource-record-sets \
--hosted-zone-id XXXXXXXXXXXXXXXXXX
aws route53 list-hosted-zones
aws route53 delete-hosted-zone \
--id XXXXXXXXXXXXXXXXXX
-- インスタンス削除
aws ec2 describe-instances
aws ec2 terminate-instances \
--instance-ids i-ddddddddddddddddd
-- VPN接続削除
aws ec2 describe-vpn-connections
aws ec2 delete-vpn-connection \
--vpn-connection-id vpn-bbbbbbbbbbbbbbbbb
-- 仮想プライベートゲートウェイ削除(VPCからデタッチしてから)
aws ec2 detach-vpn-gateway \
--vpc-id vpc-11111111111111111 \
--vpn-gateway-id vgw-99999999999999999
aws ec2 delete-vpn-gateway \
--vpn-gateway-id vgw-99999999999999999
-- カスタマーゲートウェイ削除
aws ec2 describe-customer-gateways
aws ec2 delete-customer-gateway \
--customer-gateway-id cgw-aaaaaaaaaaaaaaaaa
-- インターネットゲートウェイ削除(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-66666666666666666
-- VPC削除
aws ec2 delete-vpc \
--vpc-id vpc-11111111111111111
aws ec2 describe-vpcs
aws ec2 describe-vpcs | jq -r '.Vpcs.VpcId'