1. 소개
온프레미스 호스트의 비공개 Google 액세스는 온프레미스 시스템이 Cloud VPN 터널이나 Cloud Interconnect용 VLAN 연결을 통해 트래픽을 라우팅하여 Google API 및 서비스에 연결하는 방법을 제공합니다. 온프레미스 호스트용 비공개 Google 액세스는 인터넷을 통해 Google API 및 서비스에 연결하는 대안입니다.
온프레미스 호스트의 비공개 Google 액세스를 사용하려면 Google API 요청을 가상 IP 주소 (VIP)로 전달해야 합니다. IPv6의 경우 다음 IP 주소가 사용됩니다.
- private.googleapis.com: 2600:2d00:0002:2000::/64
- restricted.googleapis.com: 2600:2d00:0002:1000::/64
선택한 VIP에 따라 액세스할 수 있는 서비스가 결정됩니다. 이 Codelab에서는 private.googleapis.com을 사용합니다. 자세한 내용은 도메인 옵션을 참고하세요.
이 Codelab에서는 IPv6 주소를 사용하는 온프레미스 호스트에 비공개 Google 액세스를 사용 설정하는 방법을 설명합니다. 온프레미스 환경을 나타내는 on-premises-vpc라는 VPC 네트워크를 설정합니다. 배포의 경우 on-premises-vpc가 존재하지 않으며 대신 온프레미스 데이터 센터 또는 클라우드 제공업체에 대한 하이브리드 네트워킹이 사용됩니다.
빌드할 항목
이 Codelab에서는 그림 1에 나와 있는 것처럼 CNAME *.googleapis.com을 private.googleapis.com IPv6 주소 2600:2d00:0002:2000::/64로 사용하여 클라우드 스토리지 API에 온프레미스로 액세스하는 방법을 보여주는 엔드 투 엔드 IPv6 네트워크를 빌드합니다.
그림 1

학습할 내용
- 이중 스택 VPC 네트워크를 만드는 방법
- IPv6로 HA VPN을 만드는 방법
- 비공개 Google 액세스에 액세스하기 위해 DNS를 업데이트하는 방법
- 비공개 Google 액세스 연결을 설정하고 검증하는 방법
필요한 항목
- Google Cloud 프로젝트
2. 시작하기 전에
코드랩을 지원하도록 프로젝트 업데이트
이 Codelab에서는 Cloud Shell에서 gcloud 구성 구현을 지원하기 위해 $변수를 사용합니다.
Cloud Shell 내에서 다음을 실행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
3. transit-vpc 만들기

전송 VPC 네트워크 만들기
Cloud Shell 내에서 다음을 실행합니다.
gcloud compute networks create transit-vpc --project=$projectname --subnet-mode=custom --mtu=1460 --enable-ula-internal-ipv6 --bgp-routing-mode=regional
4. 온프레미스 네트워크 만들기

이 VPC 네트워크는 온프레미스 환경을 나타냅니다.
온프레미스 VPC 네트워크 만들기
Cloud Shell 내에서 다음을 실행합니다.
gcloud compute networks create on-premises-vpc --project=$projectname --subnet-mode=custom --mtu=1460 --enable-ula-internal-ipv6 --bgp-routing-mode=regional
서브넷 만들기
Cloud Shell 내에서 다음을 실행합니다.
gcloud compute networks subnets create on-premises-subnet1-us-central1 --project=$projectname --range=172.16.10.0/27 --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL --network=on-premises-vpc --region=us-central1
5. transit-vpc 및 on-premises-vpc용 HA VPN 만들기
전송 VPC의 HA VPN GW 만들기

각 게이트웨이가 생성되면 게이트웨이 인터페이스마다 외부 IPv4 주소 두 개가 자동으로 할당됩니다. 나중에 구성 단계에서 사용할 수 있도록 이 IP 주소를 기록해 둡니다.
Cloud Shell 내에서 스택 유형이 IPV4_IPV6인 HA VPN GW를 만듭니다.
gcloud compute vpn-gateways create transit-vpc-vpngw \
--network=transit-vpc\
--region=us-central1 \
--stack-type=IPV4_IPV6
온프레미스-vpc의 HA VPN GW 만들기
Cloud Shell 내에서 스택 유형이 IPV4_IPV6인 HA VPN GW를 만듭니다.
gcloud compute vpn-gateways create on-premises-vpc-vpngw \
--network=on-premises-vpc\
--region=us-central1 \
--stack-type=IPV4_IPV6
HA VPN GW 생성 확인
콘솔을 사용하여 하이브리드 연결 → VPN → CLOUD VPN 게이트웨이로 이동합니다.

전송 VPC의 Cloud Router 만들기
Cloud Shell 내에서 us-central1에 있는 Cloud Router를 만듭니다.
gcloud compute routers create transit-vpc-cr-us-central1 \
--region=us-central1 \
--network=transit-vpc\
--asn=65001
on-premises-vpc의 Cloud Router를 만듭니다.
Cloud Shell 내에서 us-central1에 있는 Cloud Router를 만듭니다.
gcloud compute routers create on-premises-vpc-cr-us-central1 \
--region=us-central1 \
--network=on-premises-vpc \
--asn=65002
transit-vpc용 VPN 터널 만들기
각 HA VPN 게이트웨이에 VPN 터널 2개를 만듭니다.
VPN 터널0 만들기
Cloud Shell 내에서 tunnel0을 만듭니다.
gcloud compute vpn-tunnels create transit-vpc-tunnel0 \
--peer-gcp-gateway on-premises-vpc-vpngw \
--region us-central1 \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router transit-vpc-cr-us-central1 \
--vpn-gateway transit-vpc-vpngw \
--interface 0
VPN 터널1 만들기
Cloud Shell 내에서 tunnel1을 만듭니다.
gcloud compute vpn-tunnels create transit-vpc-tunnel1 \
--peer-gcp-gateway on-premises-vpc-vpngw \
--region us-central1 \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router transit-vpc-cr-us-central1 \
--vpn-gateway transit-vpc-vpngw \
--interface 1
온프레미스-vpc용 VPN 터널 만들기
각 HA VPN 게이트웨이에 VPN 터널 2개를 만듭니다.
VPN 터널0 만들기
Cloud Shell 내에서 tunnel0을 만듭니다.
gcloud compute vpn-tunnels create on-premises-tunnel0 \
--peer-gcp-gateway transit-vpc-vpngw \
--region us-central1 \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router on-premises-vpc-cr-us-central1 \
--vpn-gateway on-premises-vpc-vpngw \
--interface 0
VPN 터널1 만들기
Cloud Shell 내에서 tunnel1을 만듭니다.
gcloud compute vpn-tunnels create on-premises-tunnel1 \
--peer-gcp-gateway transit-vpc-vpngw \
--region us-central1 \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router on-premises-vpc-cr-us-central1 \
--vpn-gateway on-premises-vpc-vpngw \
--interface 1
VPN 터널 생성 검증
콘솔에서 하이브리드 연결 → VPN → Cloud VPN 터널로 이동합니다.

BGP 세션 만들기
이 섹션에서는 Cloud Router 인터페이스와 BGP 피어를 구성합니다.
IPv6 트래픽을 허용하는 VPN 터널을 만들 때 add-bgp-peer 명령어를 실행할 때 --enable-ipv6을 지정합니다.
전송 VPC의 BGP 인터페이스 및 피어링 만들기
Cloud Shell 내에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface transit-vpc-cr-us-central1 \
--interface-name if-tunnel1-to-onpremise \
--ip-address 169.254.1.1 \
--mask-length 30 \
--vpn-tunnel transit-vpc-tunnel0 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer transit-vpc-cr-us-central1 \
--peer-name bgp-on-premises-tunnel0 \
--interface if-tunnel1-to-onpremise \
--peer-ip-address 169.254.1.2 \
--peer-asn 65002 \
--region us-central1 \
--enable-ipv6 \
--ipv6-nexthop-address 2600:2d00:0:3:0:0:0:1 \
--peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:2
Cloud Shell 내에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface transit-vpc-cr-us-central1 \
--interface-name if-tunnel2-to-onpremise \
--ip-address 169.254.2.1 \
--mask-length 30 \
--vpn-tunnel transit-vpc-tunnel1 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer transit-vpc-cr-us-central1 \
--peer-name bgp-on-premises-tunnel2 \
--interface if-tunnel2-to-onpremise \
--peer-ip-address 169.254.2.2 \
--peer-asn 65002 \
--region us-central1 \
--enable-ipv6 \
--ipv6-nexthop-address 2600:2d00:0:3:0:0:0:11 \
--peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:12
온프레미스 VPC의 BGP 인터페이스 및 피어링 만들기
Cloud Shell 내에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface on-premises-vpc-cr-us-central1\
--interface-name if-tunnel1-to-hub-vpc \
--ip-address 169.254.1.2 \
--mask-length 30 \
--vpn-tunnel on-premises-tunnel0 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer on-premises-vpc-cr-us-central1 \
--peer-name bgp-transit-vpc-tunnel0 \
--interface if-tunnel1-to-hub-vpc \
--peer-ip-address 169.254.1.1 \
--peer-asn 65001 \
--region us-central1 \
--enable-ipv6 \
--ipv6-nexthop-address 2600:2d00:0:3:0:0:0:2 \
--peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:1
Cloud Shell 내에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface on-premises-vpc-cr-us-central1\
--interface-name if-tunnel2-to-hub-vpc \
--ip-address 169.254.2.2 \
--mask-length 30 \
--vpn-tunnel on-premises-tunnel1 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer on-premises-vpc-cr-us-central1\
--peer-name bgp-transit-vpc-tunnel1\
--interface if-tunnel2-to-hub-vpc \
--peer-ip-address 169.254.2.1 \
--peer-asn 65001 \
--region us-central1 \
--enable-ipv6 \
--ipv6-nexthop-address 2600:2d00:0:3:0:0:0:12 \
--peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:11
하이브리드 연결 → VPN으로 이동하여 VPN 터널 세부정보를 확인합니다.

transit-vpc가 HA VPN을 통해 IPv4 및 IPv6 경로를 학습하는지 확인
HA VPN 터널과 BGP 세션이 설정되어 있으므로 transit-vpc에서 on-premises-vpc의 경로를 학습합니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → transit-vpc → 경로로 이동합니다.
아래에 표시된 학습된 IPv4 및 IPv6 동적 경로를 확인합니다.

on-premises-vpc가 HA VPN을 통해 경로를 학습하지 않는지 확인
Transit-vpc에는 서브넷이 없으므로 Cloud Router는 on-premises-vpc에 서브넷을 공지하지 않습니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-premises-vpc → 경로로 이동합니다.
6. IPv6 private.googleapis.com VIP 광고
온프레미스에서 비공개 Google 액세스에 액세스하려면 트랜싯 VPC에서 커스텀 경로 공지를 만들어야 합니다. IPv6 주소 2600:2d00:0002:2000::는 온프레미스 환경에 공지되며, 로컬 DNS가 업데이트된 후 워크로드에서 Cloud Storage, Cloud BigQuery, Cloud Bigtable과 같은 Google API에 액세스하는 데 사용됩니다.
이 Codelab에서는 VPC 서비스 제어에서 지원하는지 여부에 관계없이 대부분의 Google API 및 서비스에 대한 API 액세스를 사용 설정합니다.
콘솔에서 하이브리드 연결 → Cloud 라우터 → transit-vpc-cr-us-central1로 이동한 다음 '수정'을 선택합니다.

'공지된 경로' 섹션에서 커스텀 경로 만들기 옵션을 선택하고 아래 예에 따라 필드를 업데이트한 후 완료를 선택하고 저장을 클릭합니다.

온프레미스-vpc가 IPv6 경로를 학습하는지 확인
이제 IPv6 private.googleapis.com VIP가 transit-vpc에서 공지되므로 on-premises-vpc가 VIP의 IPv6 동적 경로를 학습합니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-premises-vpc → 경로로 이동합니다.
전송 VPC에서 공지된 IPv6 경로를 확인합니다.

7. 비공개 Google 액세스를 사용하여 Google API와 통신 설정
다음 섹션에서는 IPv6 private.googleapis.com VIP를 사용하여 Cloud Storage에 대한 연결을 액세스하고 검증합니다. 이렇게 하려면 온프레미스 VPC에서 다음 작업을 실행해야 합니다.
- SSH 액세스를 위한 IAP (Identity-Aware Proxy) 액세스를 허용하는 인그레스 방화벽 규칙을 만듭니다.
- tcpdump 및 dnsutils를 다운로드하기 위해 Cloud Router 및 Cloud NAT를 만듭니다.
- googleapis.com의 비공개 Cloud DNS 영역을 만듭니다.
- Cloud Storage 버킷을 만듭니다.
IAP 방화벽 규칙 만들기
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서의 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell 내에서 IAP 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ssh-iap-on-premises-vpc \
--network on-premises-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
Cloud Router 및 NAT 구성
VM 인스턴스에 외부 IP 주소가 없으므로 소프트웨어 패키지 설치를 위해 코드랩에서 Cloud NAT가 사용됩니다.
Cloud Shell 내에서 Cloud Router를 만듭니다.
gcloud compute routers create on-premises-cr-us-central1-nat --network on-premises-vpc --region us-central1
Cloud Shell 내에서 NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create on-premises-nat-us-central1 --router=on-premises-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
테스트 인스턴스 만들기(온프레미스-testbox)
IPv6 private.googleapis.com VIP에 대한 연결을 테스트하고 검증하는 데 사용될 테스트 인스턴스를 만듭니다.
Cloud Shell 내에서 인스턴스를 만듭니다.
gcloud compute instances create on-premises-testbox \
--project=$projectname \
--machine-type=e2-micro \
--stack-type=IPV4_IPV6 \
--image-family debian-10 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=on-premises-subnet1-us-central1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump -y
sudo apt-get install dnsutils -y"
Cloud DNS 비공개 영역 만들기
Cloud DNS를 사용하여 *.googleapis.com의 비공개 영역과 레코드를 만듭니다. 아래는 필요한 단계입니다.
Cloud Shell에서 비공개 DNS 영역 v6-googleapis.com을 만듭니다.
gcloud dns --project=$projectname managed-zones create v6-googleapis --description="" --dns-name="googleapis.com." --visibility="private" --networks="on-premises-vpc"
Cloud Shell 내에서 IPv6 주소 2600:2d00:0002:2000::를 가리키는 private.googleapis.com의 AAAA 레코드를 만듭니다.
gcloud dns --project=$projectname record-sets create private.googleapis.com. --zone="v6-googleapis" --type="AAAA" --ttl="300" --rrdatas="2600:2d00:0002:2000::"
Cloud Shell 내에서 *.googleapis.com이 private.googleapis.com을 가리키도록 CNAME을 만듭니다.
gcloud dns --project=$projectname record-sets create *.googleapis.com. --zone="v6-googleapis" --type="CNAME" --ttl="300" --rrdatas="private.googleapis.com."
Cloud DNS 비공개 영역 검증
네트워크 서비스 → Cloud DNS → v6-googleapis로 이동합니다.

Cloud Storage 버킷 만들기
Cloud Shell 내에서 Cloud Storage 버킷을 만들고 bucket_name을 원하는 전역적으로 고유한 이름으로 바꿉니다. 이미 사용 중인 경우 다른 이름을 사용해 보세요.
gsutil mb -l us-central1 -b on gs://bucket_name
8. IPv6 주소를 사용하여 Google API에 액세스하고 검증
다음 섹션에서는 두 개의 Cloud Shell 터미널에 SSH로 연결합니다. 첫 번째 터미널은 tcpdump를 사용하여 IPv6 조회를 검증하는 데 사용되고 두 번째 터미널은 클라우드 스토리지 버킷에 액세스하는 데 사용됩니다.
Cloud Shell 내에서 ssh를 실행하여 on-premises-testbox 테스트 인스턴스를 테스트합니다.
gcloud compute ssh --zone "us-central1-a" "on-premises-testbox" --project "$projectname"
Cloud Shell 터미널 1에서 tcpdump를 시작하고 포트 53에서 DNS 트래픽을 모니터링합니다.
sudo tcpdump -nn -i ens4 port 53
예를 들어 다음과 같습니다.
user@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53
'+'를 선택하여 새 Cloud Shell 터미널을 엽니다. 새 탭이 열리면 프로젝트 이름 변수를 업데이트합니다.
Cloud Shell 내에서 프로젝트 이름 변수를 업데이트합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
Cloud Shell 2에서 SSH를 실행하여 on-premises-testbox 테스트 인스턴스를 테스트합니다.
gcloud compute ssh --zone "us-central1-a" "on-premises-testbox" --project "$projectname"
dig를 실행하여 DNS 조회 확인
Cloud Shell 터미널 2에서 storage.googleapis.com에 대해 dig를 실행합니다.
dig AAAA storage.googleapis.com
ANSWER SECTION, private DNS zone storage.googleapis.com CNAME to private.googleapis.com AAAA 2600:2d00:2:2000::를 검사합니다(아래 예 참고).
user@on-premises-testbox:~$ dig AAAA storage.googleapis.com
; <<>> DiG 9.11.5-P4-5.1+deb10u8-Debian <<>> AAAA storage.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2782
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;storage.googleapis.com. IN AAAA
;; ANSWER SECTION:
storage.googleapis.com. 300 IN CNAME private.googleapis.com.
private.googleapis.com. 300 IN AAAA 2600:2d00:2:2000::
;; Query time: 9 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon Feb 20 01:56:33 UTC 2023
;; MSG SIZE rcvd: 101
Cloud Shell 터미널 1에서 AAAA 2600:2d00:2:2000::에 대한 DNS 변환을 추가로 확인하는 tcpdump를 검사합니다.
user@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
01:56:33.473208 IP 172.16.10.3.41476 > 169.254.169.254.53: 2782+ [1au] AAAA? storage.googleapis.com. (63)
01:56:33.482580 IP 169.254.169.254.53 > 172.16.10.3.41476: 2782 2/0/1 CNAME private.googleapis.com., AAAA 2600:2d00:2:2000:: (101)
dig 및 tcpdump를 기반으로 storage.googleapis.com에 대한 DNS 확인이 private.googleapis.com의 IPv6 주소인 2600:2d00:2:2000::를 통해 이루어진다고 결론 내릴 수 있습니다.
gsutil 목록을 실행하여 클라우드 스토리지에 대한 액세스 확인
Cloud Shell 터미널 2에서 gsutil을 사용하여 이전에 만든 스토리지 버킷에 대해 목록을 실행합니다. bucket_name을 이전에 만든 버킷으로 변경합니다.
gsutil -d ls gs://bucket_name
Cloud Storage 버킷 codelab-ipv6을 사용하는 예시에서 storage.googleapis.com 및 HTTP/1.1 200 OK를 나타내는 디버그 출력을 검사합니다.
user@on-premises-testbox:~$ gsutil -d ls gs://codelab-ipv6
***************************** WARNING *****************************
*** You are running gsutil with debug output enabled.
*** Be aware that debug output includes authentication credentials.
*** Make sure to remove the value of the Authorization header for
*** each HTTP request printed to the console prior to posting to
*** a public medium such as a forum post or Stack Overflow.
***************************** WARNING *****************************
gsutil version: 5.19
checksum: 49a18b9e15560adbc187bab09c51b5fd (OK)
boto version: 2.49.0
python version: 3.9.16 (main, Jan 10 2023, 02:29:25) [Clang 12.0.1 ]
OS: Linux 4.19.0-23-cloud-amd64
multiprocessing available: True
using cloud sdk: True
pass cloud sdk credentials to gsutil: True
config path(s): /etc/boto.cfg
gsutil path: /usr/lib/google-cloud-sdk/bin/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
shim enabled: False
Command being run: /usr/lib/google-cloud-sdk/platform/gsutil/gsutil -o GSUtil:default_project_id=myprojectid -o GoogleCompute:service_account=default -d ls gs://codelab-ipv6
config_file_list: ['/etc/boto.cfg']
config: [('working_dir', '/mnt/pyami'), ('debug', '0'), ('https_validate_certificates', 'true'), ('working_dir', '/mnt/pyami'), ('debug', '0'), ('default_project_id', 'myproject'), ('default_api_version', '2')]
DEBUG 0220 02:01:14.713012 multiprocess_file_storage.py] Read credential file
INFO 0220 02:01:14.714742 base_api.py] Calling method storage.objects.list with StorageObjectsListRequest: <StorageObjectsListRequest
bucket: 'codelab-ipv6'
delimiter: '/'
maxResults: 1000
projection: ProjectionValueValuesEnum(noAcl, 1)
versions: False>
INFO 0220 02:01:14.715939 base_api.py] Making http GET to https://storage.googleapis.com/storage/v1/b/codelab-ipv6/o?alt=json&fields=prefixes%2Citems%2Fname%2CnextPageToken&delimiter=%2F&maxResults=1000&projection=noAcl&versions=False
INFO 0220 02:01:14.716369 base_api.py] Headers: {'accept': 'application/json',
'accept-encoding': 'gzip, deflate',
'content-length': '0',
'user-agent': 'apitools Python/3.9.16 gsutil/5.19 (linux) analytics/disabled '
'interactive/True command/ls google-cloud-sdk/416.0.0'}
INFO 0220 02:01:14.716875 base_api.py] Body: (none)
connect: (storage.googleapis.com, 443)
send: b'GET /storage/v1/b/codelab-ipv6/o?alt=json&fields=prefixes%2Citems%2Fname%2CnextPageToken&delimiter=%2F&maxResults=1000&projection=noAcl&versions=False HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nuser-agent: apitools Python/3.9.16 gsutil/5.19 (linux) analytics/disabled
<SNIP>
reply: 'HTTP/1.1 200 OK\r\n'
header: X-GUploader-UploadID: ADPycdvunHlbN1WQBxDr_LefzLaH_HY1bBH22X7IxX9sF1G2Yo_7-nhYwjxUf6N7AF9Zg_JDwPxYtuNJiFutfd6qauEfohYPs7mE
header: Content-Type: application/json; charset=UTF-8
header: Date: Mon, 20 Feb 2023 02:01:14 GMT
header: Vary: Origin
header: Vary: X-Origin
header: Cache-Control: private, max-age=0, must-revalidate, no-transform
header: Expires: Mon, 20 Feb 2023 02:01:14 GMT
header: Content-Length: 3
header: Server: UploadServer
INFO 0220 02:01:14.803286 base_api.py] Response of type Objects: <Objects
items: []
prefixes: []>
user@on-premises-testbox:~$
Cloud Shell 터미널 1에서 AAAA 2600:2d00:2:2000::에 대한 DNS 변환을 추가로 확인하는 tcpdump를 검사합니다.
eepakmichael@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
02:01:14.725000 IP 172.16.10.3.48792 > 169.254.169.254.53: 7056+ A? storage.googleapis.com. (40)
02:01:14.725106 IP 172.16.10.3.48792 > 169.254.169.254.53: 50841+ AAAA? storage.googleapis.com. (40)
02:01:14.732516 IP 169.254.169.254.53 > 172.16.10.3.48792: 50841 2/0/0 CNAME private.googleapis.com., AAAA 2600:2d00:2:2000:: (90)
온프레미스 테스트박스 인스턴스 운영체제에서 종료하여 Cloud Shell 프롬프트로 돌아갑니다.
9. 삭제
Cloud Shell 내에서 다음을 실행합니다.
gcloud compute vpn-tunnels delete transit-vpc-tunnel0 transit-vpc-tunnel1 on-premises-tunnel1 --region=us-central1 --quiet
gcloud compute vpn-tunnels delete on-premises-tunnel0 on-premises-tunnel1 --region=us-central1 --quiet
gcloud compute vpn-gateways delete on-premises-vpc-vpngw transit-vpc-vpngw --region=us-central1 --quiet
gcloud compute routers delete transit-vpc-cr-us-central1 on-premises-vpc-cr-us-central1 on-premises-cr-us-central1-nat --region=us-central1 --quiet
gcloud compute instances delete on-premises-testbox --zone=us-central1-a --quiet
gcloud compute networks subnets delete on-premises-subnet1-us-central1 --region=us-central1 --quiet
gcloud compute firewall-rules delete ssh-iap-on-premises-vpc --quiet
gcloud compute networks delete on-premises-vpc --quiet
gcloud compute networks delete transit-vpc --quiet
gsutil rb gs://bucket_name
gcloud dns record-sets delete *.googleapis.com. \
--type=CNAME \
--zone=v6-googleapis
gcloud dns record-sets delete private.googleapis.com. \
--type=AAAA \
--zone=v6-googleapis
gcloud dns managed-zones delete v6-googleapis
10. 축하합니다
축하합니다. IPv6를 사용하여 비공개 Google 액세스를 성공적으로 구성하고 검증했습니다.
전송 및 온프레미스 인프라를 만들고 IPv6를 사용하여 Google API 도메인을 확인할 수 있는 비공개 DNS 영역을 만들었습니다. dig 및 Cloud Storage를 사용하여 IPv6 액세스를 테스트하고 검증하는 방법을 알아봤습니다.
Cosmopup은 Codelab이 멋지다고 생각합니다.

다음 단계
다음 Codelab을 확인하세요.