Cloud DNS:解析、委派与切换

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

Console:Network services → Cloud DNS。

推荐做法#

  • Public zone 必须完成父域 NS 委派;Private zone 明确可见 VPC。
  • 切换前先降低 TTL 并等待旧 TTL,再改记录;用权威与递归查询分别验收。
  • DNSSEC 配置包含父域 DS;停用前先处理 DS 缓存。

常用操作#

替换为实际资源;本段不依赖 lab.env。

DOMAIN='REPLACE_FQDN'
AUTH_NS='REPLACE_AUTHORITATIVE_NS'

dig @"$AUTH_NS" "$DOMAIN" A +noall +answer
dig @8.8.8.8 "$DOMAIN" A +noall +answer
dig "$DOMAIN" AAAA +noall +answer

容易踩的坑#

  • 创建 zone 不会购买域名或自动委派;查询成功不证明 HTTPS/应用正常。
  • Private zone 缺记录不保证回退公共同名 zone;旧 AAAA 可能把用户导向错误入口。
配置说明与完整示例(按需展开)

1. Route 53 的能力分别在哪里#

AWS Route 53 能力 GCP 对应 区别
Public hosted zone Cloud DNS public managed zone 创建区域后还要在父域配置 NS 委派
Private hosted zone Cloud DNS private managed zone 指定可见 VPC;不向互联网发布
A / AAAA / CNAME / MX / TXT / CAA Cloud DNS record sets 同名同类型组成一个 RRset,按集合更新
Alias 到 ALB/CloudFront 按目标产品配置地址或域名 不照搬 AWS Alias;区域顶点通常用全局 LB 静态 IP 的 A/AAAA
Weighted / 地理位置 / Failover Cloud DNS routing policies 策略、健康检查和目标类型的支持范围不同,见路由实验
Resolver inbound/outbound Cloud DNS server policies / forwarding zones 还需要 VPN、Interconnect 等网络路径
域名注册 域名注册商,另行管理 托管 DNS 区域不会替你购买或续费域名
DNSSEC Cloud DNS DNSSEC + 父域 DS 只打开区域开关不等于信任链建立

A 是 IPv4,AAAA 是 IPv6;CNAME 指向另一个名称,不能与同名其他数据并存,也不能代替区域顶点必需的 SOA/NS。TXT 常用于域名验证,MX 用于邮件路由,CAA 限制可签发证书的 CA。记录管理

2. 公共区域:创建、查询、委派#

前置:环境篇、DNS Administrator、dig。你需要一个自有域或可委派的子域。没有域名也能直接查询分配的权威 NS,但无法完成公网递归解析验收。

source lab.env
gcloud services enable dns.googleapis.com
export DNS_ZONE_NAME='lab.example.com.'  # 替换为自有实验子域,保留末尾点
export DNS_ZONE='lab-public'
gcloud dns managed-zones create "$DNS_ZONE" --dns-name="$DNS_ZONE_NAME" --description='DNS lab'
gcloud dns managed-zones describe "$DNS_ZONE" --format='value(nameServers)'
export AUTH_NS=$(gcloud dns managed-zones describe "$DNS_ZONE" --format='value(nameServers[0])')
# 文档示例 IP,只验证 DNS,不能用于访问实际网站。
gcloud dns record-sets create "app.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=A --ttl=60 --rrdatas=192.0.2.10
gcloud dns record-sets create "www.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=CNAME --ttl=60 --rrdatas="app.$DNS_ZONE_NAME"
gcloud dns record-sets create "verify.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=TXT --ttl=60 --rrdatas='"gcp-lab-verification"'
dig @"$AUTH_NS" "app.$DNS_ZONE_NAME" A +noall +answer
dig @"$AUTH_NS" "www.$DNS_ZONE_NAME" CNAME +noall +answer
dig @"$AUTH_NS" "verify.$DNS_ZONE_NAME" TXT +noall +answer

委派位置很重要:

  • 若托管整个注册域,在注册商处将权威 NS 改为 Cloud DNS 给出的完整集合。
  • 若托管 lab.example.com 子域,在父区域 example.com 创建 lab 的 NS 记录,填写该完整集合;不要替换整个父域的 NS。
  • DNS 区域可能有同名旧副本;以父域真正委派的 NS 为准。
dig +trace "app.$DNS_ZONE_NAME" A
dig @8.8.8.8 "app.$DNS_ZONE_NAME" A +noall +answer

这条 dig 命令的各部分含义如下:

参数 含义
@8.8.8.8 向 Google Public DNS 的递归解析器发起查询;前面的 @"$AUTH_NS" 则直接查询本实验区域的权威名称服务器
"app.$DNS_ZONE_NAME" 要查询的域名;例如 DNS_ZONE_NAME=lab.example.com. 时,查询 app.lab.example.com.
A 查询 IPv4 地址记录;换成 AAAA 查询 IPv6 地址,换成 CNAME 查询别名记录
+noall 先关闭所有常规输出显示项,隐藏响应头、问题区、统计信息等
+answer 再开启 Answer(答案)区的显示;与前面的 +noall 配合,只保留答案记录

+noall +answer 按顺序关闭常规输出再显示答案,不影响查询类型。dig 手册

例如,答案可能显示为:

app.lab.example.com. 60 IN A 192.0.2.10

依次是域名、TTL(秒)、记录类别(IN 表示 Internet)、记录类型和 IPv4 地址。递归解析器返回的缓存记录 TTL 可能小于配置的 60 秒。若没有答案输出,先去掉 +noall +answer 查看完整响应中的 status,区分域名不存在(NXDOMAIN)、解析失败(SERVFAIL)或没有该类型记录等情况。

验收:权威查询与公网递归查询都得到 192.0.2.10。若前者成功、后者失败,优先检查父域 NS、缓存与 DS,而不是重建应用。

3. 修改、TTL 与故障#

gcloud dns record-sets update "app.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=A --ttl=60 --rrdatas=192.0.2.20
dig @"$AUTH_NS" "app.$DNS_ZONE_NAME" A +noall +answer
dig @8.8.8.8 "app.$DNS_ZONE_NAME" A +noall +answer

旧缓存按原 TTL 过期;变更当天才调低 TTL,不能使已经缓存的长 TTL 立即缩短。NXDOMAIN 也存在负缓存。正式切换先降低 TTL、等待原 TTL,再改目标,验证后恢复合理 TTL。

停用 DNSSEC 前,先移除父域 DS 并等待其缓存过期,再关闭签名。 顺序反了会使验证型解析器返回 SERVFAIL。启用时则要把对应 DS 发布到父域,并验证信任链。DNSSEC 配置

4. 私有区域#

前置:VM与 lab-vpc,无需域名。

export VM_IP=$(gcloud compute instances describe lab-vm --zone="$ZONE" --format='value(networkInterfaces[0].networkIP)')
gcloud dns managed-zones create lab-private --dns-name=lab.internal. --description='Private DNS lab' --visibility=private --networks=lab-vpc
gcloud dns record-sets create admin.lab.internal. --zone=lab-private --type=A --ttl=60 --rrdatas="$VM_IP"
gcloud compute ssh lab-vm --zone="$ZONE" --tunnel-through-iap --command='getent hosts admin.lab.internal'

验收:VM 内得到内网 IP,本机默认解析不到。删除 A 记录,等缓存过期后查询应失败,再重建恢复。私有区域的同名命名空间可能遮蔽公共解析;私有区域缺记录时,不应期待自动回退公共同名区域。私有区域

DNS peering 只共享解析视图,不会让两个 VPC 的业务流量自动互通;forwarding zone 也需要转发目标能通过网络到达。

5. 清理#

先清理路由实验和证书验证记录;域名仍服务其他应用时不要删除区域。

gcloud dns record-sets delete "app.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=A
gcloud dns record-sets delete "www.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=CNAME
gcloud dns record-sets delete "verify.$DNS_ZONE_NAME" --zone="$DNS_ZONE" --type=TXT
gcloud dns record-sets delete admin.lab.internal. --zone=lab-private --type=A
gcloud dns managed-zones delete lab-private

若启用了 DNSSEC,先按上面的顺序清理父域 DS。移除实验 NS 委派后,再 gcloud dns managed-zones delete "$DNS_ZONE"。公共/私有区域、查询和附加功能按各自计费规则核对。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭