你配了通配 DNS:*.example.com → 10.0.0.1。foo.example.com 正常解析。但 a.b.example.com(深子域)返回 NXDOMAIN。为什么?DNS 通配(RFC 4592)只匹配一个 label。*.example.com 匹配 foo.example.com 但不匹配 foo.bar.example.com——后者需要单独的 *.bar.example.com 记录。这经常坑住搭建多租户 app(客户子域有嵌套结构)的团队。
常见原因
按命中率从高到低。
1. 通配只覆盖一层
*.example.com 匹配:
foo.example.com✓bar.example.com✓
但不匹配:
foo.bar.example.com✗a.b.c.example.com✗
怎么判断:单层子域通;多层子域不通。
dig foo.example.com +short # 解析
dig foo.bar.example.com +short # NXDOMAIN 或错的值
2. 每一层都需单独通配
要覆盖嵌套通配,必须显式加:
*.example.com A 10.0.0.1
*.bar.example.com A 10.0.0.1
子域层级多就每一层都要自己的通配。
怎么判断:多租户 app 客户能创建任意嵌套子域。每一层都要显式通配。
3. DNS 提供商对深层通配处理不一致
某些 DNS 提供商(老配置、自托管)对通配解释不一致。Cloudflare 一般宽松,其它更严。
怎么判断:一家提供商 *.example.com 确实匹配更深层,另一家不匹配——提供商解释非 RFC 合规(工作)或严格(不工作)。
4. SSL 证书不覆盖更深子域
哪怕 DNS 解析,通配 SSL 证书可能只覆盖一层。Let’s Encrypt 通配通常只是 *.example.com,不是 *.bar.example.com。
怎么判断:DNS 解析但浏览器证书错。证书 SAN 不包含更深子域。
5. CDN 不代理嵌套通配
Cloudflare 和类似 CDN 要求每一层显式通配。代理了 *.example.com 但没代理 *.bar.example.com,更深子域直接打源站(或失败)。
怎么判断:Cloudflare DNS 面板——验证每一层通配都加了。
6. 缺 IPv6 AAAA 记录
有 *.example.com A 但没 AAAA。偏好 IPv6 的用户在嵌套子域上失败。
怎么判断:部分用户能用,部分不能。dig AAAA foo.bar.example.com——A 解析但 AAAA 为空就需要 IPv6 fallback。
最短修复路径
第 1 步:搞清楚到底需要什么
画一下子域结构:
foo.example.com → 1 层
bar.foo.example.com → 2 层
baz.bar.foo.example.com → 3 层
每一层想覆盖都需要显式通配或显式记录。
第 2 步:每层加一个通配
*.example.com A 10.0.0.1
*.foo.example.com A 10.0.0.1
*.bar.foo.example.com A 10.0.0.1
繁琐但管用。
第 3 步:或给已知子域加显式记录
子域有限(不是用户生成)就直接枚举:
foo.example.com A 10.0.0.1
bar.foo.example.com A 10.0.0.1
baz.foo.example.com A 10.0.0.1
记录多但更清晰。
第 4 步:多租户 app 重设计子域
有 customer.team.app.example.com 这种就拉平成 customer-team.example.com。一层子域 + 一个通配就够。
第 5 步:拿到匹配的 SSL 证书
通配 SSL 覆盖多层需要:
- 多个通配证书(
*.example.com和*.foo.example.com) - multi-SAN 证书显式列每一层
- 用 DNS-01 challenge + Let’s Encrypt 给每层签通配
第 6 步:用多个 DNS resolver 测
for resolver in 8.8.8.8 1.1.1.1; do
for sub in foo bar.foo baz.bar.foo; do
echo -n "$sub.example.com @$resolver: "
dig @$resolver +short $sub.example.com
done
done
应该全都解析。
预防建议
- 设计子域层级时考虑 DNS 限制;尽量 ≤2 层。
- 多租户 app 用一层子域:
customer-team.example.com,不要team.customer.example.com。 - 每个通配层都要配对应的 SSL 策略。
- 加新子域层时一次性审 DNS、SSL 证书、CDN 配置。
- DNS 笔记里记下通配结构,免得后来的工程师踩坑。
相关阅读
标签: #排查