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. transfer-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. transfer-vpc 및 on-Prem-Prem-vpc용 HA VPN 만들기

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

온프레미스 VPN의 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

온프레미스 VPN을 위한 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 내에서 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

온프레미스 VPN을 위한 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 내에서 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 터널로 이동합니다.

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

온프레미스 VPN을 위한 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

transfer-vpc가 HA VPN을 통해 IPv4 및 IPv6 경로를 학습하고 있는지 검증

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

아래에 설명된 학습된 IPv4 및 IPv6 동적 경로를 관찰합니다.

216bde7d08d75ec4.png

온프레미스 VPN이 HA VPN을 통한 경로를 학습하지 않는지 검증

Transit-vpc에는 서브넷이 없으므로 Cloud Router가 온프레미스-vpc에 서브넷을 공지하지 않습니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → 온프레미스-vpc → 경로로 이동합니다.

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 Router →transit-vpc-cr-us-central1로 이동한 다음 '수정'을 선택합니다.

3e36e3b5ea741ec5.png

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

9283aba7b214f70d.png

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

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

transfer-vpc에서 공지된 IPv6 경로를 관찰합니다.

caf3b79b035b2a20.png

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

다음 섹션에서는 IPv6 private.googleapis.com VIP를 사용하여 Cloud Storage에 액세스하고 연결을 검증해 보겠습니다. 이렇게 하려면 온프레미스 VPN에서 다음 작업을 수행해야 합니다.

  • 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

테스트 인스턴스, 온프레미스-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 내에서 private.googleapis.com의 AAAA 레코드를 만듭니다. IPv6 주소 2600:2d00:0002:2000::를 가리키고 있습니다.

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 Shell 내에서 SSH를 수행하여 on-Prem-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-prem-prem-testbox 인스턴스를 테스트합니다.

gcloud compute ssh --zone "us-central1-a" "on-premises-testbox" --project "$projectname"

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

Cloud Shell 터미널 2 내에서 storage.googleapis.com을 확인합니다.

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 내에서 DNS가 AAAA 2600:2d00:2:2000::로 변환되는지 추가로 확인하는 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 Shell 터미널 2 내에서 gsutil을 사용하여 이전에 만든 스토리지 버킷에 대해 목록을 수행합니다. bucket_name을 이전에 만든 버킷으로 변경합니다.

gsutil -d ls gs://bucket_name

클라우드 스토리지 버킷 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 내에서 DNS가 AAAA 2600:2d00:2:2000::로 변환되는지 추가로 확인하는 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이 멋지다고 생각합니다.

8c2a10eb841f7b01.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 자료 및 동영상

참조 문서