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

目標
- 設定 GCP 環境
- 設定 Network Connectivity Center,將 VPC 設為輪輻
- 驗證資料路徑
- 探索 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 - 允許在中樞新增及管理輪輻。在 Shared VPC 中使用,其中主專案擁有中樞,但其他專案中的其他管理員可以為其連結新增輪輻至中樞。 | 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
在每個虛擬私有雲中設定 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 中樞。NCC 中樞會做為控制層,負責在每個 VPC 輪輻之間建立路由設定。

啟用 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 中樞提供路由表,可定義用於建立資料連線的控制層。找出 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 輪輻。

將 VPC 設為 NCC 輪輻
依下列順序將 VPC 設為 NCC 輪輻
- VPC4
- VPC1
- VPC2
- VPC3
將 VPC4 設為 NCC 輪輻,並指派給先前建立的 NCC 中樞。NCC 輪輻 API 呼叫必須指定位置。使用者可採用「--global」旗標,避免在設定新的 NCC 輪輻時指定完整的 URI 路徑,簡化 gcloud 語法。
gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global
將 VPC1 設為 NCC 輪輻。
管理員可排除子網路路由,避免從 VPC 輪輻匯出至 Network Connectivity Center 中樞的路由表。在本程式碼研究室的這一部分,您將根據匯總前置字串建立排除匯出規則,避免 VPC1 的子網路匯出至 Network Connectivity Center 中樞路由表。
使用這個 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 範圍
撰寫本程式碼實驗室時,我們發現一個已知問題:使用者必須刪除並重新建立 NCC 輪輻,才能變更匯出篩選器設定。
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
注意:如要刪除與特定虛擬私有雲相關聯的虛擬私有雲輪輻,必須等待 10 分鐘的等待期結束,才能重新建立參照該虛擬私有雲的新輪輻。
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
將 VPC3 設為 NCC 輪輻,並指派給先前建立的 NCC 中樞。這次嘗試將 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) 除外。
5. NCC 跨專案輪輻
總覽
到目前為止,您已設定與中樞屬於同一專案的 NCC 輪輻。在本節中,您將使用 gcloud 指令,從 NCC 中樞以外的專案,將 VPC 設定為 NCC 輪輻。
這樣一來,管理自家 VPC 的專案擁有者就能透過 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 中樞和輪輻管理員所需的 IAM 角色,以供參考。
角色/說明 | 權限 |
networkconnectivity.networkAdmin:允許網路管理員管理中樞和輪輻。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - 允許在中樞新增及管理輪輻。在 Shared VPC 中使用,其中主專案擁有中樞,但其他專案中的其他管理員可以為其連結新增輪輻至中樞。 | 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 中樞 URI。您會在下一個步驟中設定跨專案 NCC 輪輻時,需要用到 URI 路徑。
gcloud network-connectivity hubs describe ncc-hub
跨專案 Spoke VPC
登入其他專案,該專案的 VPC 不屬於 NCC Hub 專案。在 Cloud Shell 中,使用下列指令將 VPC 設為 NCC 輪輻。
- HUB_URI 應為其他專案中樞的 URI。
- VPC_URI 應與輪輻位於相同專案
- VPC 網路會指定這個跨專案的 VPC 加入另一個專案中的 NCC 中樞
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 中樞管理員必須明確接受跨專案的 Spoke,才能加入中樞。這樣一來,專案擁有者就無法將惡意 NCC 輪輻附加至 NCC 全域路由表。接受或拒絕 Spoke 後,只要執行上述指令,即可視需要多次拒絕或接受。
登入 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 上的有效 Spoke
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 上的子網路路徑
從輸出內容中,您是否能看到跨 VPC 輪輻的子網路路由?
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 中樞
- 僅將子網路範圍 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}
確認跨專案的 Spoke 已加入 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
(選用)
- 切換至網頁版控制台
- 依序前往「Network Services」(網路服務) >「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 封包。建立連至「pNat-vm-vpc2」的 SSH 工作階段,並使用 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 中樞
gcloud compute networks create vpc5-ncc \
--subnet-mode custom \
--enable-ula-internal-ipv6
gcloud compute networks subnets create vpc4-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 \
--include-export-ranges=ALL_IPV6_RANGES
--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 執行個體,以便在下一節中驗證資料路徑連線
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 子網路。根據預設,VPC 輪輻的 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
再次檢查 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:1:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-hub default
fd20:c95:95d2:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-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 delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc
--quiet
11. 恭喜!
您已完成 Network Connectivity Center 實驗室!
涵蓋範圍
- 使用 NCC 中樞設定全網狀 VPC 對等互連網路
- NCC 輪輻排除篩選器
- 跨專案輪輻支援
- 虛擬私有雲之間的 Private NAT
後續步驟
©Google LLC 或其關係企業。版權所有。請勿散布。