1. 簡介
總覽
在本實驗室中,使用者將瞭解如何透過支援虛擬私有雲輪輻,使用 Network Connectivity Center(NCC) 大規模建立虛擬私有雲間的連線。使用者將 VPC 定義為 VPC 輪輻時,即可透過 NCC 中樞將其連線至多個 VPC 網路。透過虛擬私有雲輻射設定使用 NCC,可減少透過虛擬私有雲對等互連管理成對虛擬私有雲連線的操作複雜度,改用集中式連線管理模型。
請回想一下,Network Connectivity Center (NCC) 是在 Google Cloud 中管理網路連線的中樞與輪輻控制平面模式。中樞資源提供集中式連線管理模式,可互連輪輻。
建構項目
在本程式碼研究室中,您將使用 NCC 中樞建立邏輯中樞和輪輻拓撲,在三個不同的虛擬私有雲之間,實作完全網狀的虛擬私有雲連線架構。
課程內容
- 使用 NCC 建立全網格虛擬私有雲連線
- 虛擬私有雲之間的 Private NAT
軟硬體需求
- 瞭解 GCP 虛擬私有雲網路
- 瞭解 Cloud Router 和 BGP 路由
- 兩個不同的 GCP 專案
- 本程式碼研究室需要 5 個 VPC。其中一個虛擬私有雲必須位於與 NCC 中樞不同的專案中
- 檢查「配額:網路」,並視需要要求新增網路,如下方螢幕截圖所示:

目標
- 設定 GCP 環境
- 設定 Network Connectivity Center,並將虛擬私有雲設為輪輻
- 驗證資料路徑
- 探索 NCC 服務功能
- 清除使用的資源
事前準備
Google Cloud 控制台和 Cloud Shell
在本實驗室中,我們將使用 Google Cloud 控制台和 Cloud Shell 與 GCP 互動。
NCC Hub 專案 Google Cloud 控制台
如要使用 Cloud 控制台,請前往 https://console.cloud.google.com。
在 Google Cloud 中設定下列項目,方便您設定 Network Connectivity Center:
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
啟動 Cloud Shell。本程式碼研究室會使用 $variables,協助在 Cloud Shell 中實作 gcloud 設定。
gcloud auth list
gcloud config list project
gcloud config set project [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM 角色
NCC 需要 IAM 角色才能存取特定 API。請務必視需要為使用者設定 NCC IAM 角色。
角色/說明 | 權限 |
networkconnectivity.networkAdmin:允許網路管理員管理中樞和輪輻。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - 允許在中樞新增及管理輪輻。在共用虛擬私有雲中使用,主專案擁有 Hub,但其他專案中的其他管理員可以為其附件新增 Spoke 至 Hub。 | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允許網路使用者查看中樞和輻輪的不同屬性。 | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
2. 設定網路環境
總覽
在本節中,我們會在單一專案中部署虛擬私有雲網路和防火牆規則。邏輯圖說明您將在本步驟中設定的網路環境。
為展示跨專案的 Spoke 支援功能,我們會在稍後的步驟中,於不同專案中部署虛擬私有雲和防火牆規則。

建立虛擬私有雲和子網路
虛擬私有雲網路包含子網路,您將安裝 GCE VM 來驗證資料路徑
gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom
gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1
gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1
虛擬私有雲支援的子網路範圍
NCC 支援所有有效的 IPv4 子網路範圍,包括私用公開 IP 位址。在這個步驟中,請在 VPC4 中建立有效 IP 範圍,並匯入至中心路徑表。
gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1
gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1
gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1
gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1
gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1
gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1
gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1
gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1
建立重疊的子網路範圍
NCC 不會將重疊的 IP 範圍匯入中樞路由表。使用者會在後續步驟中解決這項限制。目前,請為 VPC2 和 VPC3 建立兩個重疊的 IP 範圍。
gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1
gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1
設定虛擬私有雲防火牆規則
在每個虛擬私有雲上設定防火牆規則,允許
- SSH
- 內部 IAP
- 10.0.0.0/8 範圍
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
在每個 VPC 中設定 GCE VM
您需要暫時連上網際網路,才能在「vm1-vpc1-ncc」上安裝套件。
建立四部虛擬機器,每部 VM 都會指派給先前建立的其中一個 VPC
gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
apt-get install tcpdump -y
service apache2 restart
echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address
gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address
gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address
3. Network Connectivity Center 中樞
總覽
在本節中,我們將使用 gcloud 指令設定 NCC Hub。NCC 中樞會做為控制層,負責在每個虛擬私有雲輪輻之間建立轉送設定。

啟用 API 服務
如果尚未啟用 Network Connectivity API,請啟用:
gcloud services enable networkconnectivity.googleapis.com
建立 NCC 中樞
使用 gCloud 指令建立 NCC 中樞
gcloud network-connectivity hubs create ncc-hub
輸出範例
Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.
Created hub [ncc-hub]
描述新建立的 NCC 中樞。記下名稱和相關聯的路徑。
gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'
NCC Hub 導入了路由表,可定義控制層,用於建立資料連線。找出 NCC 中樞路由資料表的名稱
gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:
找出 NCC 預設路由表的 URI。
gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'
列出 NCC 中樞預設路由資料表的內容。注意* 輪輻建立完成前,NCC 中樞的路由表會是空的
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
NCC 中樞的路由表應為空白。
4. NCC 搭配虛擬私有雲輪輻
總覽
在本節中,您將使用 gCloud 指令,將三個 VPC 設定為 NCC Spoke。

將虛擬私有雲設定為 NCC Spoke
依序將下列 VPC 設定為 NCC Spoke
- VPC4
- VPC1
- VPC2
- VPC3
將 VPC4 設定為 NCC 輪輻,並指派給先前建立的 NCC 中樞。NCC 說話 API 呼叫必須指定位置。「--global」旗標可讓使用者在設定新的 NCC Spoke 時,不必指定完整的 URI 路徑,簡化 gcloud 語法。
gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global
將 VPC1 設定為 NCC 輪輻。
管理員可以排除子網路路徑,避免從虛擬私有雲輪輻匯出至 NCC 中樞的路由表。在本程式碼研究室的這部分,請根據摘要前置字元建立排除匯出規則,防止 VPC1 的子網路匯出至 NCC 中樞路徑表。
使用這個 gcloud 指令列出屬於 VPC1 的所有子網路。
gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc
請注意先前在設定區段中建立的 /25 子網路配對。
NAME REGION NETWORK RANGE STACK_TYPE
vpc1-ncc-subnet1 us-central1 vpc1-ncc 10.1.1.0/24 IPV4_ONLY
vpc1-ncc-subnet2 us-central1 vpc1-ncc 10.1.2.0/25 IPV4_ONLY
vpc1-ncc-subnet3 us-central1 vpc1-ncc 10.1.2.128/25 IPV4_ONLY
將 VPC1 設為 NCC 輪輻,並使用「export-exclude-ranges」關鍵字,從該特定範圍篩除 /24 摘要路徑,將 /25 子網路配對排除在匯入中樞轉送表之外。
gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global
注意* 每位 NCC 輪輻使用者最多可篩選 16 個不重複的 IP 範圍。
列出 NCC 中樞預設路由資料表的內容。NCC 中樞路由表上的 /25 子網路配對發生了什麼事?
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.1.1.0/24 ACTIVE VPC_PRIMARY_SUBNET vpc1-ncc ncc-hub default
將 VPC2 設定為 NCC 輪輻
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global
將 VPC3 設定為 NCC 輪輻,並指派給先前建立的 NCC 中樞。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global
為什麼會這樣?
ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)
NCC 中樞偵測到與 VPC2 重疊的 IP 範圍。請注意,VPC2 和 VPC3 都是使用相同的 10.3.3.0/24 IP 子網路設定。
使用「排除匯出」功能篩除重疊的 IP 範圍
使用 gcloud 指令更新 VPC2 輪輻,排除重疊的 IP 範圍。
gcloud network-connectivity spokes linked-vpc-network update vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
使用 gcloud 指令更新 VPC3 的 NCC 輪輻,排除重疊的子網路範圍。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
列出 NCC 中樞預設路由資料表的內容,並檢查輸出內容。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
系統會排除 VPC2 和 VPC3 中重疊的 IP 範圍。NCC 中樞轉送表支援所有有效的 IPv4 有效範圍類型。
根據預設,私用公開 IP 位址 (PUPI) 子網路範圍不會從虛擬私有雲輪輻匯出至 NCC 中心路由表。
使用 gcloud 指令確認網路 50.50.50.0/24 不在 NCC 中樞的轉送表。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc-ncc4"
使用下列 gcloud 指令更新 VPC4-Spoke,以便在 NCC VPC 之間啟用 PUPI 位址交換。
gcloud network-connectivity spokes linked-vpc-network update vpc4-spoke4 \
--include-export-ranges=ALL_IPV4_RANGES \
--global
使用 gcloud 指令,在 NCC 中樞的轉送表找出網路 50.50.50.0/24。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default | grep 50.50.50.0/24
5. NCC 搭配跨專案輪輻
總覽
到目前為止,您已設定與 Hub 屬於同一專案的 NCC Spoke。在本節中,您將使用 gcloud 指令,從 NCC Hub 以外的專案,將 VPC 設定為 NCC Spoke。
這樣一來,管理自家虛擬私有雲的專案擁有者,就能透過 NCC 中樞參與網路連線。

跨專案:Google Cloud 控制台和 Cloud Shell
在本實驗室中,我們將使用 Google Cloud 控制台和 Cloud Shell 與 GCP 互動。
跨專案 Spoke Google Cloud 控制台
如要使用 Cloud 控制台,請前往 https://console.cloud.google.com。
在 Google Cloud 中設定下列項目,方便您設定 Network Connectivity Center:
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
啟動 Cloud Shell。本程式碼研究室會使用 $variables,協助在 Cloud Shell 中實作 gcloud 設定。
gcloud auth list
gcloud config list project
gcloud config set project [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM 角色
NCC 需要 IAM 角色才能存取特定 API。請務必視需要為使用者設定 NCC IAM 角色。
至少須將「networkconnectivity.networkSpokeManager」IAM 角色授予跨專案的 spoke 管理員。」
下表列出 NCC Hub 和 Spoke 管理員所需的 IAM 角色,以供參考。
角色/說明 | 權限 |
networkconnectivity.networkAdmin:允許網路管理員管理中樞和輪輻。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - 允許在中樞新增及管理輪輻。在共用虛擬私有雲中使用,主專案擁有 Hub,但其他專案中的其他管理員可以為其附件新增 Spoke 至 Hub。 | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允許網路使用者查看中樞和輻輪的不同屬性。 | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
在跨專案中建立虛擬私有雲和子網路
虛擬私有雲網路包含子網路,您將安裝 GCE VM 來驗證資料路徑
gcloud compute networks create xproject-vpc \
--subnet-mode custom
gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1
gcloud compute networks subnets create xprj-net-2 \
--network xproject-vpc \
--range 10.100.2.0/24 \
--region us-central1
NCC Hub 專案 URI
使用這項 gcloud 指令找出 NCC Hub URI。您需要 URI 路徑,才能在下一個步驟中設定跨專案 NCC 輪輻。
gcloud network-connectivity hubs describe ncc-hub
跨專案 Spoke VPC
登入其他專案,該專案的 VPC 不屬於 NCC Hub 專案。在 Cloud Shell 中,使用這個指令將 VPC 設定為 NCC 輪輻。
- HUB_URI 應為其他專案中樞紐的 URI。
- VPC_URI 應與輪輻位於相同專案
- VPC 網路會指定這個跨專案中的 VPC 加入另一個專案中的 NCC Hub
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc
。
Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'
跨專案 NCC 輪輻的狀態為何?為什麼?
6. 拒絕或接受跨專案 Spoke
總覽
NCC Hub 管理員必須明確接受跨專案的 Spoke,才能加入 Hub。這可防止專案擁有者將惡意 NCC 輪輻附加至 NCC 全域路由表。接受或拒絕某個子網後,只要執行上述指令,即可視需要多次拒絕或接受該子網。
登入 Cloud Shell,返回 NCC 中樞所在的專案。
找出要檢閱的跨專案 Spoke
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reason:PENDING_REVIEW"
接受輪輻
gcloud network-connectivity hubs accept-spoke ncc-hub --spoke=xproj-spoke
選用:拒絕子帳戶
gcloud network-connectivity spokes reject-spoke ncc-hub --spoke=xproj-spoke
--details="some reason to reject"
列出 Hub 上的有效 Spokes
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="state:ACTIVE"
NAME PROJECT LOCATION TYPE STATE STATE REASON
Xproj-spoke xproj global VPC_NETWORK ACTIVE
vpc4-spoke4 user-3p-dev global VPC_NETWORK ACTIVE
vpc1-spoke1 user-3p-dev global VPC_NETWORK ACTIVE
vpc2-spoke2 user-3p-dev global VPC_NETWORK ACTIVE
vpc3-spoke3 user-3p-dev global VPC_NETWORK ACTIVE
列出 Hub 上的子網路路徑
從輸出內容中,您是否可以看到跨虛擬私有雲輪輻的子網路路徑?
gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.100.1.0/24 ACTIVE VPC_PRIMARY_SUBNET xprj-vpc ncc-hub default
使用 Include-Export 篩選器更新跨專案輪輻虛擬私有雲
登入 VPC 不屬於 NCC Hub 專案的專案。在 Cloud Shell 中,使用這個指令將 VPC 設定為 NCC 輪輻。
- HUB_URI 應為其他專案中樞紐的 URI。
- VPC_URI 應與輪輻位於相同專案
- VPC 網路會指定這個跨專案中的 VPC 加入另一個專案中的 NCC Hub
- 只將子網路範圍 10.100.2.0/24 匯入 NCC 中樞路由表
- 請記下輸出內容中的「ETAG」值。這個值是由 NCC 產生,您需要提供給 NCC 中樞管理員。NCC 中心管理員接受跨專案 Spoke 加入中心的請求時,需要參考這個值。
gcloud network-connectivity spokes linked-vpc-network update xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--include-export-ranges=10.100.2.0/24
Update request issued for: [xprj-vpc]
Waiting for operation [projects]/xproject/locations/global/operations/operation-1742936388803-6313100521cae-020ac5d2-58
52fbba] to complete...done.
Updated spoke [xprj-vpc].
createTime: '2025-02-14T14:25:41.996129250Z'
etag: '4'
fieldPathsPendingUpdate:
- linked_vpc_network.include_export_ranges
group: projects/xxxxxxxx/locations/global/hubs/ncc-hub/groups/default
hub: projects/xxxxxxxx/locations/global/hubs/ncc-hub
linkedVpcNetwork:
includeExportRanges:
- 10.100.2.0/24
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/vpc1-spoke
name: projects/xproject/locations/global/spokes/xprj-vpc
reasons:
- code: UPDATE_PENDING_REVIEW
message: Spoke update is Pending Review
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 182e0f8f-91cf-481c-a081-ea6f7e40fb0a
updateTime: '2025-03-25T20:59:51.995734879Z'
找出要查看的更新跨專案 Spoke
登入託管 NCC 中樞的專案。在 Cloud Shell 中,使用下列指令檢查跨專案虛擬私有雲輻條更新的狀態。
- ETAG 值為何?這個值應與 VPC 支線更新的輸出內容相符。
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reasons:UPDATE_PENDING_REVIEW" \
--format=yaml
接受跨專案子專案的更新變更
使用指令接受跨專案 Spoke 加入 NCC 中樞的要求
gcloud network-connectivity hubs accept-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--spoke-etag={etag value}
(選用) 拒絕跨專案子專案的更新變更
使用指令拒絕跨專案 Spoke 加入 NCC 中樞的要求
gcloud network-connectivity hubs reject-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--details="not today" \
--spoke-etag={etag value}
確認跨專案的輻射網路已加入 NCC 中心
gcloud network-connectivity hubs list-spokes ncc-hub \ --filter="name:xproj-spoke"
7. 虛擬私有雲之間的 Private NAT
總覽
在本節中,您將為兩個虛擬私有雲之間重疊的子網路範圍設定 Private NAT。請注意,虛擬私有雲之間的 Private NAT 需要 NCC。
在上一節中,VPC2 和 VPC3 設定的子網路範圍重疊,都是「10.3.3.0/24」。兩個 VPC 都設定為 NCC 輪輻,排除將重疊子網路插入 NCC 中樞路由表,這表示沒有第 3 層資料路徑可連線至位於該子網路的主機。
在 NCC 中心專案中使用這些指令,找出重疊的子網路範圍。
gcloud compute networks subnets list --network vpc2-ncc
gcloud compute networks subnets list --network vpc3-ncc
在 vpc2-ncc 上,包含重疊 IP 範圍的子網路名稱為何?
*請記下子網路名稱並儲存在其他位置,您將為這個範圍設定來源 NAT。
設定 Private NAT
為來自 VPC2 重疊子網路的來源 NAT 流量,專門提供可路由傳輸的子網路範圍。使用「–purpose=PRIVATE_NAT」旗標設定不重疊的子網路範圍。
gcloud beta compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT
建立專屬雲端路由器,執行私有 NAT
gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1
設定 Cloud Router,從 vpc2-ncc 來源 NAT 10.3.3.0/24 的重疊範圍。在下列範例設定中,「overlapping-vpc3」是重疊子網路的名稱。「ALL」關鍵字表示子網路中的所有 IP 範圍都會經過來源 NAT。
gcloud beta compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1
先前的步驟已建立 NAT IP 範圍集區,以及要翻譯的特定子網路。在這個步驟中,請建立 NAT 規則「1」,如果目的地網路採用 NCC 中樞轉送表的路徑,則轉送與重疊子網路範圍來源相符的網路封包。
gcloud beta compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat
驗證 Private NAT 的資料路徑
gcloud beta compute routers nats describe ncc2-nat --router=private-nat-cr
輸出範例
enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
sourceNatActiveRanges:
- https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/ncc2-spoke-nat
match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/xxxxxxxx/locations/global/hubs/ncc-hub"
ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/overlapping-vpc3
sourceIpRangesToNat:
- ALL_IP_RANGES
type: PRIVATE
(選用)
- 切換至網頁版控制台
- 依序前往「網路服務」>「Cloud NAT」>「ncc2-nat」
確認系統預設啟用動態通訊埠分配。

接著,您會驗證使用為 VPC2 設定的私人 NAT 路徑的資料路徑。

開啟 「vm1-vpc1-ncc」的 SSH 工作階段,並使用下列 tcpdump 指令,擷取來自 NAT 集區範圍「10.10.10.0/29」的封包。
vm1-vpc1-ncc
sudo tcpdump -i any net 10.10.10.0/29 -n
撰寫本程式碼研究室時,Private NAT 不支援 ICMP 封包。透過 SSH 連線至「pNat-vm-vpc2」,然後使用 curl 指令 (如下所示) 連線至「vm1-vpc1-ncc」的 TCP 通訊埠 80。
pnat-vm-vpc2
curl 10.1.1.2 -v
檢查「vm1-vpc1-ncc.」的 tcpdump 輸出內容。在 「vm1-vpc1-ncc」上,啟動 TCP 工作階段連線至我們網路伺服器的來源 IP 位址為何?
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4 In IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4 Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>
8. NCC 支援 IPv6 子網路
Network Connectivity Center 支援 NCC 虛擬私有雲輪輻和混合型輪輻之間的 IPv6 子網路交換和動態路徑交換。在本節中,請設定 NCC,支援僅限 IPv6 和雙重堆疊 IPv4 與 IPv6 子網路路徑交換模式。

建立新的 IPv6 虛擬私有雲,並以虛擬私有雲輪輻的形式加入 NCC 中樞。GCP 會自動從 fd20::/20 範圍指派所有 ULA 位址。
gcloud compute networks create vpc5-ncc \
--subnet-mode custom \
--enable-ula-internal-ipv6
gcloud compute networks subnets create vpc5-ext-ipv6 \ --network=vpc5-ncc \
--stack-type=IPV6 \
--ipv6-access-type=EXTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc5-ipv4-subnet1 \
--network vpc5-ncc \
--range 10.5.5.0/24 \
--region us-central1
使用這項指令將 VPC5 設為 NCC 輪輻,並排除從中樞路徑表匯出的 IPv4 子網路路徑。將 IPv6 ULA 網路匯出至 NCC 中樞路由表。
gcloud network-connectivity spokes linked-vpc-network create vpc5-spoke5 \
--hub=ncc-hub \
--vpc-network=vpc5-ncc \
--exclude-export-ranges=10.5.5.0/24
--global
為私有 IPv6 唯一本機位址 (ULA) 啟用 VPC1 和 VPC4。GCP 會自動從 fd20::/20 範圍指派所有 ULA 位址。
gcloud compute networks update vpc-ncc4 \
--enable-ula-internal-ipv6
gcloud compute networks update vpc-ncc1 \
--enable-ula-internal-ipv6
在 VPC1 中建立原生 IPv6 和雙重堆疊 IPv4_v6 子網路
gcloud compute networks subnets create vpc1-ipv6-sn1 \
--network=vpc-ncc1 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc1-ipv64-sn2 \
--network=vpc-ncc1 \
--range=10.10.10.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
在 VPC4 中建立原生 IPv6 和雙重堆疊 IPv4_V6 子網路
gcloud compute networks subnets create vpc4-ipv6-sn1 \
--network=vpc-ncc4 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc4-ipv64-sn2 \
--network=vpc-ncc4 \
--range=10.40.40.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
在 VPC1 上,建立 IPv6 虛擬私有雲防火牆規則,允許來自 IPv6 ULA 範圍的流量。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc1 \
--network=vpc-ncc1 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
在 VPC4 上,建立 IPv6 虛擬私有雲防火牆規則,允許來自 IPv6 ULA 範圍的流量。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc4 \
--network=vpc-ncc4 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
建立三個 GCE IPv6 執行個體,以便在下一節中驗證資料路徑連線。注意:「vpc1-dualstack-vm」將做為防禦主機,用來取得原生 IPv6 GCE VM 的頻外存取權。
gcloud compute instances create vpc4-ipv6-vm \
--zone us-central1-a \
--subnet=vpc4-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-ipv6-vm \
--zone us-central1-a \
--subnet=vpc1-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-dual-stack-vm \
--zone us-east1-b \
--network=vpc-ncc1 \
--subnet=vpc2-ipv64-sn2 \
--stack-type=IPV4_IPV6
檢查 NCC Hub 的 IPv6 子網路
檢查 NCC 中樞路徑表中的 IPv6 ULA 子網路。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
請注意,上述指令的輸出內容未列出 IPv6 子網路。根據預設,系統不會將虛擬私有雲輪輻的 IPv6 子網路匯出至 NCC 中樞路徑表。
Listed 0 items.
使用下列 gcloud 指令更新 VPC1 和 VPC4 輪輻,將 IPv6 子網路匯出至 NCC 中樞路徑表。
gcloud network-connectivity spokes linked-vpc-network update vpc1-spoke1 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
gcloud network-connectivity spokes linked-vpc-network update vpc4-spoke4 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
再次檢查 NCC 中樞路徑表,確認是否有 IPv6 ULA 子網路。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
輸出範例
IP_CIDR_RANGE PRIORITY LOCATION STATE TYPE SITE_TO_SITE NEXT_HOP HUB ROUTE_TABLE
fd20:c95:95d2:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:c95:95d2:1:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:670:3823:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 ncc-hub default
fd20:90:6768:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc2 ncc-hub default
fd20:90:6768:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc2 ncc-hub default
使用 NCC 虛擬私有雲輪輻篩選 IPv6 子網路
檢查 NCC 中樞路由表中的外部 IPv6 子網路路徑
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:vpc-ncc5"
範例輸出內容:ncc 中樞路徑表已瞭解外部 IPv6 範圍。
IP_CIDR_RANGE PRIORITY LOCATION STATE TYPE SITE_TO_SITE NEXT_HOP HUB ROUTE_TABLE
10.5.5.0/24 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 ncc-hub default
2600:1900:4001:ce6:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 ncc-hub default
fd20:670:3823:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 ncc-hub default
10.50.10.0/24 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 ncc-hub default
使用下列 gcloud 指令更新 VPC5 輪輻,從 NCC 中心路由表排除兩個特定內部 IPv6 子網路和一個外部 IPv6 子網路。
gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
--global \
--include-export-ranges=fd20:670:3823:0:0:0:0:0/48 \
--exclude-export-ranges=fd20:670:3823:1::/64,fd20:670:3823:2::/64
使用 gcloud 指令驗證 VPC5 輪輻的匯出篩選器
gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
--global \
--include-export-ranges=fd20:670:3823:0:0:0:0:0/48 \
--exclude-export-ranges=fd20:670:3823:1::/64,fd20:670:3823:2::/64
檢查 NCC 中樞路由表中的外部 IPv6 子網路路徑
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:vpc-ncc5"
範例輸出內容:ncc 中樞路徑表已瞭解外部 IPv6 範圍。
IP_CIDR_RANGE PRIORITY LOCATION STATE TYPE SITE_TO_SITE NEXT_HOP HUB ROUTE_TABLE
fd20:670:3823:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc5 demo-mesh-hub default
9. 驗證資料路徑連線
IPv4 資料路徑連線
請參閱圖表,確認每部虛擬機器之間的 IPv4 資料路徑。

透過 SSH 連線至「vm1-vpc1-ncc」,並啟動 TCP 傾印,追蹤來自「vm2-vpc2-ncc」的 ICMP 封包。提醒您,這個 VM 位於 VPC2。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
建立「vm1-vpc2-ncc」的 SSH 工作階段,並「ping」連線至「vm1-vpc1-ncc」的 IP 位址。
vm1-vpc2-ncc
ping 10.1.1.2
建立「vm1-vpc2-ncc」的 SSH 連線,並「ping」連線至「vm1-vpc4-ncc」的 IP 位址。
vm1-vpc2-ncc
ping 240.0.0.2
IPv6 資料路徑連線
請參閱圖表,確認每部虛擬機器之間的 IP64 資料路徑。

使用 gcloud 指令列出每個啟用 IPv6 的執行個體 IP 位址。
gcloud compute instances list --filter="INTERNAL_IP:fd20"
輸出範例
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
vpc1-ipv6-vm us-central1-a n1-standard-1 fd20:90:6768:0:0:1:0:0/96 RUNNING
vpc4-ipv6-vm us-central1-a n1-standard-1 fd20:c95:95d2:1:0:1:0:0/96 RUNNING
vpc1-dual-stack-vm us-east1-b n1-standard-1 10.10.10.3 XXX.196.137.107 RUNNING
fd20:90:6768:1000:0:1:0:0/96
建立「vpc1-dualstack-vm」的 SSH 工作階段,並「ping」vpc1-ipv6-vm 的 IPv6 位址,驗證全域虛擬私有雲內的 IPv6 連線
ping fd20:90:6768:1000:0:1::
建立「vpc1-dualstack-vm」的 SSH 工作階段,並「ping」vpc4-ipv6-vm 的 IPv6 位址,驗證 NCC 連線的 IPv6 連線能力。
ping fd20:c95:95d2:1:0:1::
10. 清除
登入 Cloud Shell,並刪除中樞和分支機構網站網路中的 VM 執行個體
刪除私有虛擬私有雲 NAT 設定
gcloud beta compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet
gcloud beta compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet
gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet
刪除 NCC 輪輻
gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet
gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet
拒絕跨專案輪輻
從 NCC 中樞拒絕跨專案虛擬私有雲輪輻。
gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global
刪除 NCC 中樞
gcloud network-connectivity hubs delete ncc-hub --quiet
刪除防火牆規則
gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc1
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc4
刪除 GCE 執行個體
gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet
gcloud compute instances delete vpc4-ipv6-vm --zone us-central1-a --quiet
gcloud compute instances delete vpc2-dual-stack-vm --zone us-east1-b --quiet
gcloud compute instances delete vpc2-ipv6-vm --zone us-central1-a --quiet
刪除虛擬私有雲子網路
gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet
gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv6-sn1 --region=us-central1 --quiet
gcloud compute networks subnets delete vpc4-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc4-ipv6-sn1 --region=us-central1 --quiet
gcloud compute networks subnets delete vpc5-ext-ipv6 --region=us-central1 --quiet
刪除虛擬私有雲
gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc, vpc5-ncc --quiet
11. 恭喜!
您已完成 Network Connectivity Center 實驗室!
涵蓋範圍
- 使用 NCC 中樞設定全網格虛擬私有雲對等互連網路
- NCC 輪輻排除篩選器
- 跨專案輪輻支援
- 虛擬私有雲之間的 Private NAT
後續步驟
©Google LLC 或其關係企業。版權所有。請勿散布。