iT邦幫忙

2026 iThome 鐵人賽

0
Build on Google AI

將考國際證照的應用程式變成開源系列 第 75 篇

理解 VPC 網路架構、自動模式子網(Auto mode subnets)、防火牆規則機制,以及 Compute Engine VM 實例之間的網路連線性

  • 分享至 

  • xImage
  •  

實驗筆記:Get Started with Virtual Private Cloud Networking and Compute Engine

本篇筆記整理自 Google Cloud 網路基礎實驗,重點在於透過 Google Cloud SDK (gcloud CLI) 理解 VPC 網路架構、自動模式子網(Auto mode subnets)、防火牆規則機制,以及 Compute Engine VM 實例之間的網路連線性。


核心概念速覽

  1. VPC(Virtual Private Cloud):Google Cloud 的全域虛擬網路資源。所有 Compute Engine 實例、GKE 容器都必須依附於某個 VPC 網路,沒有 VPC 就無法建立 VM。
  2. Auto mode VPC:自動在每個 Google Cloud Region 建立一個子網(Subnet),並預設分配 RFC 1918 私有 IP 位址範圍(通常落在 10.128.0.0/9 區段內)。
  3. 隱含防火牆規則(Implied Firewall Rules):
  • 預設拒絕所有傳入(Deny all ingress):優先權最低(Priority 65535)。
  • 預設允許所有傳出(Allow all egress):優先權最低(Priority 65535)。
  • 因此任何想要進來的流量(如 SSH、ICMP、內部溝通),都必須明確設定允許的防火牆規則(優先權小於 65535)。

Task 1:探索與刪除預設網路 (Explore & Delete Default Network)

說明

每個專案預設都有一個 default 網路與四條基本防火牆規則。本步驟示範檢視預設資源、清空防火牆、刪除預設 VPC,並驗證「失去 VPC 後無法建立 VM」的情境。

1. 檢視預設資源

# 查看 default 網路下的子網清單
gcloud compute networks subnets list --network=default

# 查看目前網路路由
gcloud compute routes list --filter="network:default"

# 查看 default 網路的防火牆規則
gcloud compute firewall-rules list --filter="network:default"

2. 刪除預設防火牆規則與預設網路

注意:VPC 內若還有自訂/預設防火牆規則,直接刪除 VPC 會被阻擋,因此必須先刪除所有關聯的防火牆規則。

# 刪除 default 網路內建的四條防火牆規則
gcloud compute firewall-rules delete \
    default-allow-icmp \
    default-allow-internal \
    default-allow-rdp \
    default-allow-ssh \
    --quiet

# 刪除 default VPC 網路
gcloud compute networks delete default --quiet

3. 驗證缺少 VPC 時建立 VM 會失敗

# 嘗試在無網路環境下建立 VM(預期會報錯:No more networks / network interface error)
gcloud compute instances create test-vm --zone=us-east1-c --machine-type=e2-micro


Task 2:建立 VPC 網路與 VM 實例 (Create VPC & VM Instances)

說明

重建一個名為 mynetwork 的 Auto mode VPC,手動補齊四條標準防火牆規則,並分別在 us-east1 與 asia-south1 兩個地區各建立一台 e2-micro VM。

1. 建立 Auto Mode VPC

# --subnet-mode=auto 會自動在所有地區建立子網路
gcloud compute networks create mynetwork --subnet-mode=auto

2. 建立四條標準防火牆規則

# 1. 允許任何來源 ping 本網路實例 (ICMP)
gcloud compute firewall-rules create mynetwork-allow-icmp \
    --network=mynetwork \
    --action=ALLOW \
    --rules=icmp \
    --source-ranges=0.0.0.0/0 \
    --description="Allow ICMP from anywhere"

# 2. 允許 VPC 內部所有子網互相通訊 (全部協定)
# 10.128.0.0/9 涵蓋所有 Auto mode 預設指派的內部子網網段
gcloud compute firewall-rules create mynetwork-allow-custom \
    --network=mynetwork \
    --action=ALLOW \
    --rules=all \
    --source-ranges=10.128.0.0/9 \
    --description="Allow internal traffic on the VPC"

# 3. 允許 RDP 遠端桌面 (tcp:3389)
gcloud compute firewall-rules create mynetwork-allow-rdp \
    --network=mynetwork \
    --action=ALLOW \
    --rules=tcp:3389 \
    --source-ranges=0.0.0.0/0 \
    --description="Allow RDP from anywhere"

# 4. 允許 SSH 連線 (tcp:22)
gcloud compute firewall-rules create mynetwork-allow-ssh \
    --network=mynetwork \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=0.0.0.0/0 \
    --description="Allow SSH from anywhere"

3. 建立兩台 Compute Engine VM

# 建立美國東部 VM (mynet-us-vm)
gcloud compute instances create mynet-us-vm \
    --zone=us-east1-c \
    --machine-type=e2-micro \
    --network=mynetwork

# 建立印度南部 VM (mynet-r2-vm)
gcloud compute instances create mynet-r2-vm \
    --zone=asia-south1-b \
    --machine-type=e2-micro \
    --network=mynetwork


Task 3:連線測試與防火牆規則驗證 (Connectivity & Firewall Testing)

說明

藉由查詢 IP、連入 VM 互相 ping,並逐步刪除防火牆規則,觀察封包遺失(packet loss)現象以驗證各規則的具體作用。

1. 查詢 VM 內部與外部 IP

# 列出實例名稱、內部 IP (INTERNAL_IP) 與外部 IP (EXTERNAL_IP)
gcloud compute instances list

2. 透過 SSH 登入實例進行連線測試

# SSH 連線到 mynet-us-vm
gcloud compute ssh mynet-us-vm --zone=us-east1-c

在 mynet-us-vm 的終端機內執行:

# 測試連線到 mynet-r2-vm 的「內部 IP」(由 mynetwork-allow-custom 規則放行)
ping -c 3 <mynet-r2-vm-INTERNAL-IP>

# 測試連線到 mynet-r2-vm 的「外部 IP」(由 mynetwork-allow-icmp 規則放行)
ping -c 3 <mynet-r2-vm-EXTERNAL-IP>

# 離開 SSH 終端機
exit

課堂問答重點:

  • 題目:Which firewall rule allows the ping to mynet-r2-vm's external IP address?
  • 答案:mynetwork-allow-icmp(因為 external IP 走公開網際網路路由進來,來源不屬於 10.128.0.0/9,只能由允許 0.0.0.0/0 的 ICMP 規則放行)。

3. 依序刪除規則並觀察效果

A. 刪除 ICMP 規則

gcloud compute firewall-rules delete mynetwork-allow-icmp --quiet

  • 測試方式:再次 SSH 進入 mynet-us-vm,分別 ping 內部 IP 與外部 IP。
  • 結果說明:
  • Ping 內部 IP:正常通過(因為 mynetwork-allow-custom 仍允許 VPC 內所有協定)。
  • Ping 外部 IP:100% packet loss(外部 ICMP 規則已被移除,觸發隱含的 deny-all-ingress)。

B. 刪除內部通訊規則 (Custom)

gcloud compute firewall-rules delete mynetwork-allow-custom --quiet

  • 測試方式:在 mynet-us-vm 內 ping 內部 IP。
  • 結果說明:
  • Ping 內部 IP:100% packet loss(VPC 內部子網互通的規則已移除)。

C. 刪除 SSH 規則

# 先確認已退出 VM 終端機,回到 Cloud Shell 執行
gcloud compute firewall-rules delete mynetwork-allow-ssh --quiet

  • 測試方式:嘗試再次透過 CLI SSH 連入實例:
gcloud compute ssh mynet-us-vm --zone=us-east1-c

  • 結果說明:
  • 連線失敗並出現逾時錯誤(Connection failed / timeout),因為 TCP Port 22 的傳入規則已不存在。

指令速查表 (Cheat Sheet)

操作類別 gcloud 指令 說明
VPC 建立 gcloud compute networks create <NAME> --subnet-mode=auto 建立自動模式 VPC 網路
VPC 刪除 gcloud compute networks delete <NAME> 刪除指定 VPC
建立防火牆 gcloud compute firewall-rules create <NAME> --network=<NET> --action=ALLOW --rules=<RULES> [--source-ranges=<CIDR>] 新增傳入允許規則
刪除防火牆 gcloud compute firewall-rules delete <NAME> 移除指定防火牆規則
建立 VM gcloud compute instances create <NAME> --zone=<ZONE> --machine-type=<TYPE> --network=<NET> 在指定區域與 VPC 內建立 VM
查看 VM gcloud compute instances list 顯示所有 VM 及其內外部 IP
SSH 連線 gcloud compute ssh <NAME> --zone=<ZONE> 自動處理金鑰並登入實例

上一篇
做到「不再每次模型更迭都手動翻找程式碼修改、免重新打包上架審查、完全自動自適應」
下一篇
GCP 實戰筆記:Cloud Storage 與 Cloud SQL 整合應用
系列文
將考國際證照的應用程式變成開源 共 77 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言