跳至主要內容
ESC
GCP 核心服務 — 第 9/10 篇

GCP-114:Cloud DNS 入門——全託管 DNS 服務完全指南

GCP-114:Cloud DNS 入門——全託管 DNS 服務完全指南
Updated: 2026-07-19

前言

每個上線的服務都離不開 DNS——它就是那本「把網域名稱翻成 IP 位址」的電話簿。Cloud DNS 是 GCP 的全託管權威 DNS 服務,跑在 Google 的全球 Anycast 網路(Anycast,同一個 IP 由全球多個節點對外宣告,誰離你近就由誰回應你)上。最讓人印象深刻的是它的 SLA:100% 可用性——在雲端服務裡這個數字很罕見,多數服務頂多寫到 99.9% 或 99.99%,Google 敢直接寫 100%,等於承諾「停機就賠你」。

這課我們來把 Cloud DNS 的核心概念和實際操作一次搞懂。動手前建議先讀過 VPC 那一課——後面講 Private Zone、Split-Horizon 都會用到 VPC 的概念,沒底子的話容易卡。

Cloud DNS 查詢與政策:Public client 經 Recursive resolver 向 Public zone 取得公開 Authoritative answer,VPC VM 則從 Private zone 取得不同私有位址形成 Split-horizon;公開回應可由 DNSSEC 信任鏈驗證,Routing policy 支援 Weighted、Geo、Failover 與 Health check,VPC 內的 Response policy 可覆寫或封鎖特定名稱

Cloud DNS 儲存並回答 Zone 的權威紀錄,使用者實際先問的是遞迴解析器。相同名稱可在 Public 與 Private zone 回傳不同位址形成 split-horizon;私有 Zone 只對授權 VPC 可見。DNSSEC 用於公開 Zone 的簽章驗證,Routing policy 選擇健康端點,Response policy 則在內部解析路徑覆寫或封鎖名稱。


什麼是 Cloud DNS?

Cloud DNS 是 GCP 的全託管權威 DNS 服務,負責將域名(如 example.com)解析為 IP 位址:

Cloud DNS 是權威 DNS,不是一般使用者直接查詢的遞迴 Resolver。Resolver 先利用快取;沒有答案時沿 DNS 委派找到 Cloud DNS,取得權威記錄後依 TTL 快取再回給用戶端。

核心特性

  • 100% SLA——所有 Google Cloud 服務中最高的可用性保證
  • 全球 Anycast 網路——自動路由到最近的節點以降低查詢延遲。對你的意義是:不管使用者在台北還是巴黎,查你的域名都是就近回應,不用自己架一堆海外 DNS 伺服器
  • 自動擴展——支援數百萬 DNS Zone 和記錄
  • 完整 API——Console、gcloud CLI、REST API、Terraform 全支援

Zone 類型

Cloud DNS 有好幾種 Zone 類型,各自對應不同的使用情境:

Zone 類型說明適用場景
Public Zone對外公開的 DNS 記錄網站、API 對外服務
Private Zone僅限指定 VPC 內部存取內部服務、微服務
Forwarding Zone將查詢轉發到指定 DNS 伺服器混合雲連接地端 DNS
Peering Zone跨 VPC 的 DNS 解析Shared VPC、跨專案
Managed Reverse LookupPTR 記錄(IP → 域名)反向 DNS 查詢

建立 Zone

# 建立 Public Zone
gcloud dns managed-zones create my-zone \
  --dns-name="example.com." \
  --description="Production zone" \
  --visibility=public

# 建立 Private Zone(綁定到 VPC)
gcloud dns managed-zones create my-private-zone \
  --dns-name="internal.example.com." \
  --description="Internal services" \
  --visibility=private \
  --networks=my-vpc-network

Forwarding、Peering 與 Managed Reverse Lookup 都是私有 Zone 的特殊形式。Forwarding 把特定 DNS 尾碼送到目標伺服器;Peering 則讓 Consumer VPC 依 Producer VPC 的名稱解析順序查詢。


Cloud DNS 建立 DNS 區域表單,可用區類型選「公開」(另有「私人」),區域名稱 demo-public-zone,DNS 名稱 example.com.,DNSSEC 欄位顯示「已停用」(可切換啟用),Cloud Logging 為停用

建 Zone 的表單長這樣。最上面可用區類型「公開 vs 私人」就是上面 Zone 類型表的分水嶺——公開對外、私人綁 VPC 對內。中間填區域名稱(Console 內部識別)跟真正的 DNS 名稱( example.com.)。順帶一提,DNSSEC 在這裡就是一個下拉,預設停用、要防 DNS 欺騙就切成啟用——後面 DNSSEC 那節會細講,Google 全託管、還不加錢。

Cloud DNS 建立區域選「私人」後展開的「選項」下拉選單,項目有:預設(私人)、將查詢轉送至其他伺服器、DNS 對等互連、代管反向查詢區、使用 Service Directory 命名空間

選了「私人」之後,這個選項下拉才是上面 Zone 類型表的完整版: 將查詢轉送至其他伺服器=Forwarding Zone(混合雲接地端 DNS)、 DNS 對等互連=Peering Zone(跨 VPC)、代管反向查詢區=PTR 反解。原來 Forwarding、Peering、Reverse 都是私人 Zone 底下的變體,不是各自獨立的東西。

DNS 記錄管理

支援的記錄類型

記錄類型說明範例
AIPv4 位址203.0.113.1
AAAAIPv6 位址2001:db8::1
CNAMEDNS 別名www → example.com
MX郵件伺服器10 mail.example.com
TXT文字記錄SPF、DKIM 驗證
SRV服務位置主機 + 埠號
CAACA 授權限制發行 SSL 的 CA
NS名稱伺服器委派子域名
PTR反向解析IP → 域名

使用 Transaction 管理記錄

Cloud DNS 使用 Transaction 確保記錄變更的原子性:

# 新增 A 記錄
gcloud dns record-sets transaction start --zone=my-zone
gcloud dns record-sets transaction add "203.0.113.1" \
  --name="www.example.com." \
  --ttl=300 \
  --type=A \
  --zone=my-zone
gcloud dns record-sets transaction execute --zone=my-zone

# 新增 MX 記錄
gcloud dns record-sets transaction start --zone=my-zone
gcloud dns record-sets transaction add "10 mail.example.com." \
  --name="example.com." \
  --ttl=300 \
  --type=MX \
  --zone=my-zone
gcloud dns record-sets transaction execute --zone=my-zone

# 列出所有記錄
gcloud dns record-sets list --zone=my-zone

Transaction 保證 Cloud DNS 端的變更一起成功或失敗,但不會清除全球 Resolver 已快取的舊答案。切換前要先規劃 TTL,不能把「權威端已發布」誤認成「所有用戶立即看到」。


DNSSEC

DNSSEC(DNS Security Extensions)防止 DNS 欺騙和快取中毒攻擊。Cloud DNS 提供全託管 DNSSEC

# 建立時啟用 DNSSEC
gcloud dns managed-zones create secure-zone \
  --dns-name="secure.example.com." \
  --description="DNSSEC-enabled zone" \
  --dnssec-state=on

# 對既有 Zone 啟用 DNSSEC
gcloud dns managed-zones update my-zone --dnssec-state=on

# 取得 DS 記錄(需在域名註冊商設定)
gcloud dns dns-keys list \
  --filter='type=keySigning' \
  --format='value(ds_record())' \
  --zone=my-zone

DNSSEC 金鑰管理

  • ZSK(Zone Signing Key):自動建立和輪換
  • KSK(Key Signing Key):自動建立,但輪換需手動更新域名註冊商的 DS 記錄
  • 支援 ECDSAP256SHA256(建議)、RSASHA256 等演算法
  • 支援 NSEC 和 NSEC3 否定存在證明
  • 啟用 DNSSEC 不額外收費

在 Cloud DNS 打開 DNSSEC 只是第一步;還必須把 DS 記錄發布到 Registrar/父 Zone,驗證 Resolver 才能建立完整信任鏈。移除或變更金鑰時也要按官方順序協調父子兩端,避免整個網域回傳 SERVFAIL。


Split-Horizon DNS

Split-Horizon DNS(也叫分割視野 DNS)讓同一個域名在內部和外部回傳不同 IP——白話講就是「同一個門牌,公司內部的人走的是內網捷徑,外面的人走的是大馬路」:

Split-Horizon 的關鍵不只是「Private 優先」,而是先用最長尾碼選出最相符的私有、轉送或對等 Zone。若 Zone 已匹配但記錄不存在,解析會得到 NXDOMAIN,不會再拿 Public Zone 的同名記錄補上。

設定方式

  1. 建立 example.comPublic Zone,指向外部 IP
  2. 建立 example.comPrivate Zone,綁定 VPC,指向內部 IP
  3. VPC 內的查詢自動走 Private Zone(Private Zone 優先於 Public Zone)

💡 重點提點

「Private Zone 優先於 Public Zone」是 Split-Horizon 的整套魔法所在,也是考試最愛問的點。記法很簡單:從 VPC 裡面查,先看 Private Zone,找到就用,根本不會繞出去問 Public Zone。所以才能做到「同名不同 IP」。實務上最容易踩的坑是——在 VM 裡測解析結果發現「怎麼還是回外部 IP?」,十之八九是那台 VM 不在綁定的 VPC 網路裡,或 Private Zone 根本沒綁到對的網路。先檢查綁定關係,不要急著懷疑記錄寫錯。

# Public Zone(對外)
gcloud dns managed-zones create example-public \
  --dns-name="example.com." \
  --visibility=public

# Private Zone(對內)
gcloud dns managed-zones create example-private \
  --dns-name="example.com." \
  --visibility=private \
  --networks=my-vpc

DNS 路由策略

Cloud DNS 可以直接在 DNS 層級做流量導引:

策略說明適用場景
加權輪詢(WRR)按權重分配流量金絲雀部署、A/B 測試
地理位置(Geolocation)按來源地理位置路由多區域服務、就近存取
故障轉移(Failover)主要/備用自動切換高可用架構

加權輪詢範例

# 90% 流量到 v1(203.0.113.1),10% 到 v2(203.0.113.2)(金絲雀部署)
gcloud dns record-sets create www.example.com. \
  --zone=my-zone \
  --type=A \
  --ttl=300 \
  --routing-policy-type=WRR \
  --routing-policy-data="0.9=203.0.113.1;0.1=203.0.113.2"

DNS 路由控制的是 Resolver 取得哪組答案,不是逐一 HTTP Request 的精準負載平衡。快取與 TTL 會讓 WRR 比例在短時間內不完全等於權重;需要連線級健康與精細分流時,仍應搭配 Load Balancer。


Response Policy

Response Policy 可以在 DNS 層級覆寫解析結果:

# 建立 Response Policy
gcloud dns response-policies create security-policy \
  --networks=my-vpc \
  --description="Block malicious domains"

# 封鎖惡意域名(回傳 0.0.0.0)
gcloud dns response-policies rules create block-malware \
  --response-policy=security-policy \
  --dns-name="malicious-site.com." \
  --local-data='name=malicious-site.com.,type=A,ttl=300,rrdatas=0.0.0.0'

# 豁免特定域名(passthru)
gcloud dns response-policies rules create allow-safe \
  --response-policy=security-policy \
  --dns-name="safe-site.com." \
  --behavior=passthru

常見用途

  • 安全封鎖:阻擋已知惡意域名
  • VPC Service Controls:重導 *.googleapis.com 到受限 VIP
  • 內部服務覆寫:自訂特定服務的 DNS 解析

💡 重點提點

每個 VPC 只能綁定一個 Response Policy——這個限制很容易在實作時踩雷。新手常見的卡關情境是:已經有一條 Response Policy 在跑,又想加第二條規則集,結果建立時報錯。解法不是再建一個 Response Policy,而是把新規則加進現有的那一條裡(一個 Response Policy 底下可以放很多條 rule)。考試也會用這個一對一關係出陷阱題,看到「想在同一個 VPC 套用兩個 Response Policy」這種選項,直接刷掉。


DNS Server Policy

Server Policy 控制 VPC 內的 DNS 行為:

# 啟用 Inbound Forwarding + 查詢日誌
gcloud dns policies create my-policy \
  --networks=my-vpc \
  --enable-inbound-forwarding \
  --enable-logging

# 設定 Alternative Name Servers(轉發到地端 DNS)
gcloud dns policies create outbound-policy \
  --networks=my-vpc \
  --alternative-name-servers="10.0.0.53,10.0.0.54"
功能說明
Inbound Forwarding讓地端 DNS 可以查詢 Cloud DNS(建立進入點 IP)
Outbound Forwarding將所有 DNS 查詢轉發到指定的名稱伺服器
Query Logging記錄每一筆 DNS 查詢到 Cloud Logging

Server Policy、Response Policy 與 Routing Policy 可以同時存在,但解決的層次不同。Forwarding Zone 適合特定 Namespace;Outbound Server Policy 影響整個 VPC 的替代名稱伺服器;Inbound 則提供地端進入 Google Cloud 私有解析的入口。


與其他 GCP 服務整合

服務整合方式
GKECloud DNS 可取代 kube-dns 作為叢集 DNS
Cloud Run自訂域名映射到 Cloud Run 服務
Load Balancer路由策略搭配健康檢查做故障轉移
Shared VPCCross-Project Binding Zone 支援跨專案
Service Directory服務探索,統一微服務端點註冊

定價

Zone 費用

層級費用(每 Zone / 月)
前 25 個 Zone$0.20
第 26~10,000 個$0.10
超過 10,000 個$0.03

查詢費用

類型層級費用(每百萬次查詢)
標準查詢前 10 億次 / 月$0.40
標準查詢超過 10 億次 / 月$0.20
路由策略查詢前 10 億次 / 月$0.70
路由策略查詢超過 10 億次 / 月$0.35

使用 WRR、Geolocation 或 Failover 路由策略的查詢,費用較標準查詢高。

成本估算

10 個 Zone + 1 億次查詢 / 月:

  • Zone:10 × $0.20 = $2.00
  • 查詢:100 × $0.40 = $40.00
  • 合計:~$42 / 月

Cloud DNS 沒有免費層,但 GCP 新帳號有 $300 免費試用額度可折抵。


配額與限制

資源預設限制
每個專案的 Zone 數量10,000
每個 Zone 的記錄數量10,000
每個網路的 Peering Zone1,000
每個 VPC 的 Response Policy1
每個 Forwarding Zone 的轉發目標50

ACE 考試重點整理

必背知識點

  1. Cloud DNS 是全託管權威 DNS 服務,跑在 Google Anycast 網路上
  2. 100% SLA——GCP 所有服務中最高
  3. Private Zone 優先於 Public Zone(VPC 內查詢)
  4. Split-Horizon DNS:同一域名內外回傳不同 IP
  5. DNSSEC:全自動管理 KSK/ZSK 輪換
  6. Response Policy:DNS 層級封鎖惡意域名
  7. DNS 路由策略:WRR(加權)、Geolocation(地理)、Failover(故障轉移)

常見陷阱題

Q:需要讓同一域名在公司內部和外部解析到不同 IP,怎麼做? A:Split-Horizon DNS。建立同名的 Public Zone 和 Private Zone,VPC 內查詢自動走 Private Zone。

Q:Cloud DNS 的 SLA 是多少? A:100%。這是 GCP 所有服務中最高的 SLA。

Q:如何在 DNS 層級阻擋員工存取惡意網站? A:使用 Response Policy,建立規則將惡意域名導向 0.0.0.0。

Q:地端伺服器需要查詢 Cloud DNS 的 Private Zone,怎麼設定? A:建立 DNS Server Policy 並啟用 Inbound Forwarding,建立進入點 IP 供地端 DNS 轉發查詢。

Q:Cloud DNS 和 Cloud Domains 有什麼不同? A:Cloud DNS 是 DNS 代管服務(管理 DNS 記錄)。Cloud Domains 是域名註冊服務(購買和管理域名)。兩者是獨立的服務,通常搭配使用。


總結

Cloud DNS 就是 GCP 幫你全託管的 DNS,把幾個重點收一下:

  • 定位:全託管權威 DNS,100% SLA,全球 Anycast 網路
  • Zone 類型:Public(對外)、Private(對內)、Forwarding(混合雲)、Peering(跨 VPC)
  • 安全:DNSSEC 自動管理、Response Policy 封鎖惡意域名
  • 路由:WRR、Geolocation、Failover 三種策略
  • Split-Horizon:同一域名內外不同解析
  • 定價:$0.20 / Zone / 月 + $0.40 / 百萬查詢

如果你只想帶走兩件事:考試最常考「Private Zone 優先於 Public Zone」這個 Split-Horizon 機制,實作最常卡「VM 不在綁定的 VPC 裡」這個坑。把這兩點記牢,Cloud DNS 這關大致就穩了。

下一課 ACE-215:GCP 基礎架構即代碼(IaC)策略,學習 Terraform、Infrastructure Manager 和 Config Connector 的實戰應用。

GCP 核心服務 — 9/10 完成 查看系列全覽 →

留言討論

徽章解鎖!