IPv6 주소를 사용하여 온프레미스 호스트에서 Google API 액세스

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 네트워크를 설정합니다. 배포 시 온프레미스 VPN이 존재하지 않는 대신 온프레미스 데이터 센터 또는 클라우드 제공업체에 대한 하이브리드 네트워킹이 사용됩니다.

빌드할 항목

이 Codelab에서는 그림 1과 같이 CNAME *.googleapis.com을 사용하여 private.googleapis.com IPv6 주소 2600:2d00:0002:2000::/64에 연결하는 클라우드 스토리지 API에 대한 온프레미스 액세스를 보여주는 엔드 투 엔드 IPv6 네트워크를 빌드합니다.

그림 1

a0fc56abf24f3535.png

학습할 내용

  • 이중 스택 VPC 네트워크를 만드는 방법
  • IPv6로 HA VPN을 만드는 방법
  • 비공개 Google 액세스에 액세스하도록 DNS를 업데이트하는 방법
  • 비공개 Google 액세스 연결을 설정하고 확인하는 방법

필요한 항목

  • Google Cloud 프로젝트

2. 시작하기 전에

Codelab을 지원하도록 프로젝트 업데이트

이 Codelab에서는 $variables를 사용하여 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 만들기

f6932f551b5acac0.png

전송 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. 온프레미스 네트워크 만들기

58d75cbc9cb20a51.png

이 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 만들기

transit-vpc의 HA VPN GW 만들기

a0fc56abf24f3535.png

각 게이트웨이가 생성되면 각 게이트웨이 인터페이스에 하나씩 두 개의 외부 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

on-premises-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 게이트웨이로 이동합니다.

c8eed6ca929935bc.png

transfer-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

transfer-vpc용 VPN 터널 만들기

각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.

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 내에서 터널1을 만듭니다.

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

on-premises-vpc용 VPN 터널 만들기

각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.

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 내에서 터널1을 만듭니다.

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 터널로 이동합니다.

85fd5aef4b2c4010.png

BGP 세션 만들기

이 섹션에서는 Cloud Router 인터페이스와 BGP 피어를 구성합니다.

IPv6 트래픽을 허용하는 VPN 터널을 만들 때는 add-bgp-peer 명령어를 실행할 때 --enable-ipv6을 지정합니다.

transit-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

on-premises-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 터널 세부정보를 확인합니다.

e100e31ea22c8124.png

transit-vpc가 HA VPN을 통해 IPv4 및 IPv6 경로를 학습하는지 확인

HA VPN 터널과 BGP 세션이 설정되므로 온프레미스 VPN의 경로는 transfer-vpc로부터 학습됩니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 →transit-vpc → ROUTES로 이동합니다.

아래에 표시된 학습된 IPv4 및 IPv6 동적 경로를 확인합니다.

216bde7d08d75ec4.png

on-premises-vpc가 HA VPN을 통해 경로를 학습하지 않는지 확인

transit-vpc에는 서브넷이 없으므로 Cloud Router는 on-premises-vpc에 서브넷을 공지하지 않습니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-premises-vpc → ROUTES로 이동합니다.

6. IPv6 private.googleapis.com VIP 공지

온프레미스에서 비공개 Google 액세스에 액세스하려면transit-vpc에서 커스텀 경로 공지를 만들어야 합니다. IPv6 주소 2600:2d00:0002:2000::는 온프레미스 환경에 광고되고 로컬 DNS가 업데이트된 후 워크로드에서 Cloud Storage, Cloud BigQuery, Cloud Bigtable과 같은 Google API에 액세스하는 데 사용됩니다.

이 Codelab에서는 VPC 서비스 제어에서 지원하는지 여부에 관계없이 대부분의 Google API 및 서비스에 대한 API 액세스를 사용 설정합니다.

콘솔에서 하이브리드 연결 → Cloud Routers(Cloud 라우터) → transit-vpc-cr-us-central1로 이동한 다음 수정을 선택합니다.

3e36e3b5ea741ec5.png

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

9283aba7b214f70d.png

온프레미스 VPN이 IPv6 경로를 학습하고 있는지 확인

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

transit-vpc에서 공지된 IPv6 경로를 확인합니다.

caf3b79b035b2a20.png

7. 비공개 Google 액세스를 사용하여 Google API와 통신 설정

다음 섹션에서는 IPv6 private.googleapis.com VIP를 사용하여 Cloud Storage에 액세스하고 연결을 확인합니다. 이렇게 하려면 on-premises-vpc에서 다음 작업을 실행해야 합니다.

  • SSH 액세스에 IAP (Identity Aware Proxy) 액세스를 허용하는 인그레스 방화벽 규칙을 만듭니다.
  • Cloud Router 및 Cloud NAT를 만들어 tcpdump 및 dnsutils를 다운로드합니다.
  • 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 주소가 없으므로 이 Codelab에서는 소프트웨어 패키지 설치에 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

테스트 인스턴스(온프레미스 테스트 상자) 만들기

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 내에서 private.googleapis.com을 가리키도록 *.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로 이동합니다.

455e355195a2a48f.png

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 Storage 버킷에 액세스하는 데 사용됩니다.

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"

확인을 수행하여 DNS 조회 확인

Cloud Shell 터미널 2에서 storage.googleapis.com에 대해 dig를 실행합니다.

dig AAAA storage.googleapis.com

답변 섹션, 비공개 DNS 영역 storage.googleapis.com CNAME을 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 list를 실행하여 Cloud Storage 액세스 권한 확인

Cloud Shell 터미널 2 내에서 gsutil을 사용하여 이전에 만든 스토리지 버킷에 대해 목록을 수행합니다. bucket_name을 이전에 만든 버킷으로 변경합니다.

gsutil -d ls gs://bucket_name

Cloud Storage 버킷 codelab-ipv6를 사용하는 예시입니다. storage.googleapis.comHTTP/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 액세스를 테스트하고 검증하는 방법을 알아봤습니다.

코스모퍼프는 Codelab이 멋지다고 생각합니다.

8c2a10eb841f7b01.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 리소스 및 동영상

참조 문서