使用 IPv6 位址從內部部署主機存取 Google API

1. 簡介

地端部署主機專用的 Private Google Access 可讓地端部署系統透過 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 會決定可存取的服務。在本程式碼研究室中,我們將使用 private.googleapis.com。詳情請參閱網域選項

本程式碼研究室說明如何為使用 IPv6 位址的地端部署主機啟用私人 Google 存取權。您將設定名為 on-premises-vpc 的 VPC 網路,代表地端部署環境。在您的部署作業中,on-premises-vpc 不會存在,而是會使用混合式網路連線至地端部署資料中心或雲端供應商。

建構項目

在本程式碼研究室中,您將建構端對端 IPv6 網路,示範如何使用 CNAME *.googleapis.com 存取 private.googleapis.com IPv6 位址 2600:2d00:0002:2000::/64,從內部部署環境存取 Cloud Storage API,如圖 1 所示。

圖 1

a0fc56abf24f3535.png

課程內容

  • 如何建立雙重堆疊虛擬私有雲網路
  • 如何使用 IPv6 建立高可用性 VPN
  • 如何更新 DNS 以存取私人 Google 存取權
  • 如何建立及驗證私人 Google 存取權連線

軟硬體需求

  • Google Cloud 專案

2. 事前準備

更新專案以支援 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

建立中繼虛擬私有雲網路

在 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 網路代表地端部署環境。

建立地端虛擬私有雲網路

在 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. 為傳輸虛擬私有雲和內部部署虛擬私有雲建立高可用性 VPN

為 transit-vpc 建立高可用性 VPN 閘道

a0fc56abf24f3535.png

建立每個閘道時,系統會自動分配兩個外部 IPv4 位址,每個閘道介面各一個。請記下這些 IP 位址,以便稍後在設定步驟中使用。

在 Cloud Shell 中,建立堆疊類型為 IPV4_IPV6 的高可用性 VPN 閘道。

gcloud compute vpn-gateways create transit-vpc-vpngw \
   --network=transit-vpc\
   --region=us-central1 \
   --stack-type=IPV4_IPV6

為 on-premises-vpc 建立高可用性 VPN 閘道

在 Cloud Shell 中,建立堆疊類型為 IPV4_IPV6 的高可用性 VPN 閘道

gcloud compute vpn-gateways create on-premises-vpc-vpngw \
   --network=on-premises-vpc\
   --region=us-central1 \
   --stack-type=IPV4_IPV6

驗證高可用性 VPN 閘道建立作業

使用控制台前往「混合式連線」→「VPN」→「CLOUD VPN GATEWAYS」。

c8eed6ca929935bc.png

為 transit-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 通道

您會在每個高可用性 VPN 閘道上建立兩個 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

為 on-premises-vpc 建立 VPN 通道

您會在每個高可用性 VPN 閘道上建立兩個 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

為 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 正在透過高可用性 VPN 學習 IPv4 和 IPv6 路徑

由於已建立高可用性 VPN 通道和 BGP 工作階段,因此系統會從 transit-vpc 取得 on-premises-vpc 的路徑。使用控制台,依序前往「VPC network」(虛擬私有雲網路) →「VPC networks」(虛擬私有雲網路) →「transit-vpc」→「ROUTES」(路徑)。

請觀察下方圖示中學到的 IPv4 和 IPv6 動態路徑:

216bde7d08d75ec4.png

確認 on-premises-vpc 未透過高可用性 VPN 學習路徑

Transit-vpc 沒有子網路,因此 Cloud Router 不會向 on-premises-vpc 通告任何子網路。使用控制台前往「虛擬私有雲網路」→「虛擬私有雲網路」→「on-premises-vpc」→「ROUTES」。

6. 宣傳 IPv6 private.googleapis.com VIP

如要從內部部署環境存取私人 Google 存取權,您需要從 Transit 虛擬私有雲建立自訂路徑通告。IPv6 位址 2600:2d00:0002:2000:: 會向地端環境放送,並在更新本機 DNS 後,供工作負載存取 Google API,例如 Cloud Storage、Cloud BigQuery 和 Cloud Bigtable。

在本程式碼研究室中,您將啟用大多數 Google API 和服務的 API 存取權,無論這些 API 和服務是否受 VPC Service Controls 支援。

在控制台中,依序前往「Hybrid Connectivity」→「Cloud Routers」→「transit-vpc-cr-us-central1」,然後選取「EDIT」。

3e36e3b5ea741ec5.png

在「Advertised routes」(播送的路由) 專區中,選取「Create custom routes」(建立自訂路由) 選項,根據下方範例更新欄位,選取「DONE」(完成),然後按一下「SAVE」(儲存)

9283aba7b214f70d.png

確認 on-premises-vpc 正在學習 IPv6 路徑

現在,IPv6 private.googleapis.com VIP 會從 transit-vpc 通告,因此 on-premises-vpc 會取得 VIP 的 IPv6 動態路由。使用控制台前往「虛擬私有雲網路」→「虛擬私有雲網路」→「on-premises-vpc」→「ROUTES」。

觀察從 Transit VPC 宣傳的 IPv6 路由:

caf3b79b035b2a20.png

7. 使用私人 Google 存取權建立與 Google API 的通訊

在下一節中,我們將使用 IPv6 private.googleapis.com VIP,存取並驗證 Cloud Storage 的連線。為此,我們需要在 on-premises-vpc 中執行下列動作。

  • 建立輸入防火牆規則,允許 Identity-Aware Proxy (IAP) 存取 SSH。
  • 建立 Cloud Router 和 Cloud NAT,下載 tcpdump 和 dnsutils。
  • 為 googleapis.com 建立 Cloud DNS 私人區域。
  • 建立 Cloud Storage bucket。

建立 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

建立測試執行個體,即 on-premises-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 中,建立 *.googleapis.com 的 CNAME,指向 private.googleapis.com。

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,並將 bucket_name 替換為您偏好的全域不重複名稱,如果該名稱已在使用中,請嘗試其他名稱。

gsutil mb  -l us-central1 -b on gs://bucket_name

8. 使用 IPv6 位址存取及驗證 Google API

在下一節中,您將透過 SSH 連線至兩個 Cloud Shell 終端機。第一個終端機用於使用 tcpdump 驗證 IPv6 查閱,第二個終端機則用於存取 Cloud Storage bucket。

在 Cloud Shell 中,對測試執行個體 on-premises-testbox 執行 SSH。

 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 中,對測試執行個體 on-premises-testbox 執行 SSH。

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、私人 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 中檢查 tcpdump,進一步確認 DNS 解析為 AAAA 2600:2d00:2:2000::

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,我們可以得出結論:DNS 會透過 2600:2d00:2:2000:: (private.googleapis.com 的 IPv6 位址) 解析為 storage.googleapis.com。

執行 gsutil 清單,驗證雲端儲存空間的存取權

在 Cloud Shell 終端機 2 中,使用 gsutil 對先前建立的儲存空間 bucket 執行清單作業。將 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 中檢查 tcpdump,進一步確認 DNS 解析為 AAAA 2600:2d00:2:2000::

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)

從 on-premises-testbox 執行個體作業系統結束,返回 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 的 Private Google Access。

您已建立中繼和內部部署基礎架構,並建立私人 DNS 區域,透過 IPv6 解析 Google API 網域。您已學會如何使用 dig 和 Cloud Storage 測試及驗證 IPv6 存取權。

Cosmopup 認為程式碼研究室很棒!

8c2a10eb841f7b01.jpeg

後續步驟

查看一些程式碼研究室…

延伸閱讀和影片

參考文件