通配符子域是一种 DNS 配置,使用单个 *.domain.com 记录将您的域名下的所有子域路由到单个服务器 — 无需为每个子域创建单独的 DNS 记录。这种技术广泛用于 SaaS 平台、多租户 Web 应用程序和任何需要动态创建子域的系统。
什么是通配符 DNS 记录?
在 DNS 中,星号(*)是一个通配符,匹配"任何未明确定义的名称"。当您将 *.domain.com 设置为指向 IP 地址时,没有自己特定记录的每个子域都会自动解析为该 IP。
示例:如果您设置 *.example.com → 1.2.3.4,那么 blog.example.com、shop.example.com 和 any123.example.com 都指向同一 IP。
优先级规则:通配符记录的优先级始终低于精确记录。如果您已定义 www.example.com → 5.6.7.8,则对 www 的请求转到 5.6.7.8,而不是通配符 IP。
如何设置通配符 DNS 记录
通过 DirectAdmin DNS 管理
- 登录 DirectAdmin → DNS 管理
- 点击添加记录
- 在名称字段中,输入
*(仅星号) - 选择类型:A(用于 IPv4)或 CNAME
- 输入目标 IP 地址或主机名
- 点击添加
DNS 记录示例
*.example.com. IN A 1.2.3.4
; 通配符 CNAME 记录
*.example.com. IN CNAME server.example.com.
; 精确记录(始终优于通配符)
www.example.com. IN A 5.6.7.8
分步配置通配符 DNS 记录 (*)
以下步骤介绍了从头开始创建通配符记录直到在生产环境中工作的过程。假设您的域名是 example.com,您希望每个子域都指向 IP 203.0.113.10 处的服务器。
- 首先检查您的名称服务器:域名必须指向您控制的 DNS 区域(例如 AsiaGB 名称服务器或 DirectAdmin)。如果域名仍然使用您的旧提供商的 DNS,添加此处的记录将无效。
- 打开 DNS 区域:进入您的 DNS 管理面板并选择
example.com。 - 添加通配符 A 记录:将名称字段设置为
*,类型设置为A,值设置为203.0.113.10。大多数 DNS 系统会自动附加.example.com,形成*.example.com。 - 设置适当的 TTL:在测试期间,使用低 TTL 如
300秒(5 分钟),以便编辑快速生效。一旦您确信,将其提高到3600秒。 - 保存并等待传播:保存后,DNS 必须根据之前记录的 TTL 传播 — 通常需要几分钟到几个小时。
- 使用 dig 或 nslookup 测试:查询您从未创建过的随机子域。如果它解析为配置的 IP,则通配符工作正常。
示例测试和预期输出:
203.0.113.10
$ dig +short anything-else.example.com
203.0.113.10
提示:任何没有自己特定记录的名称都回答相同的 IP。如果您需要特定的子域指向其他地方,只需为该名称添加专用 A 记录 — 精确记录始终胜过通配符。
何时使用它(多租户 SaaS、用户子域)
通配符子域在以下情况下很有用:您事先不知道哪些子域名将存在,或者手动创建太多的情况。以下是最常见的真实场景。
多租户 SaaS
为每个客户提供自己工作空间的 SaaS 应用程序通常使用按租户的子域,例如 acme.app.com 和 globex.app.com。当新客户注册时,系统立即为其提供子域,无需触及 DNS — 通配符记录 *.app.com 已经覆盖每个未来的名称。应用程序从 HTTP Host 头读取子域并将请求路由到正确的租户数据。
用户子域和虚荣 URL
允许用户创建自己的页面或个人资料的平台,例如 username.platform.com,依赖通配符,以便每个用户在注册时立即获得个人子域 — 没有管理员需要手动添加 DNS 记录。
自动预览和暂存
为每个分支或拉取请求启动预览环境的 CI/CD 管道,例如 pr-482.preview.com,使用通配符,以便每个部署都获得即时 URL,无需单独的 DNS 记录管理。这让团队可以方便地打开和审查每个版本。
通配符子域的常见用例
| 用例 | 示例 | 原因 |
|---|---|---|
| SaaS 多租户 | customer1.app.com | 每个客户获得自己的子域 |
| 静态网站生成器 | preview-123.deploy.com | 自动分支预览 |
| 开发/暂存 | feature-x.staging.com | 每个分支的隔离环境 |
| 通配符 SSL | *.domain.com + SSL 证书 | 单个证书覆盖所有子域 |
通配符子域和通配符 SSL 证书
通配符 DNS 记录和通配符 SSL 证书相辅相成。*.domain.com 的通配符 SSL 证书覆盖所有第一级子域,例如 blog.domain.com 和 shop.domain.com,但不覆盖子子域,例如 test.blog.domain.com。
要覆盖子子域,您需要多个证书或多域通配符证书。
一起使用通配符子域和通配符 SSL
在实践中,通配符 DNS 记录和通配符 SSL 证书几乎总是配置成一对。如果您有通配符 DNS 但没有 SSL 覆盖每个子域,用户每次访问新子域时都会收到"您的连接不是私密的"警告。建议的设置顺序是:
- 首先设置通配符 DNS 记录
*.example.com指向您的服务器(根据上面的步骤)。 - 为
*.example.com签发通配符 SSL 证书。这通常需要通过 DNS 验证证明所有权(添加临时 TXT 记录),大多数 CA 要求这样做是因为无法同时对每个子域执行 HTTP 验证。 - 在 Web 服务器上安装证书并为从通配符路由的每个虚拟主机配置它。
| 组件 | 覆盖 | 不覆盖 |
|---|---|---|
通配符 DNS *.example.com | 所有第一级子域 (a.example.com) | 子子域 (a.b.example.com) |
通配符 SSL *.example.com | blog / shop / app.example.com | 没有子域的 example.com* 和 a.b.example.com |
*注意:某些通配符 SSL 证书也将根域 (example.com) 作为 SAN 条目包含,但并非全部如此。在生产环境中使用前,始终检查证书的使用者备用名称列表。
限制和安全考虑
- 无子子域覆盖:
*.example.com不匹配a.b.example.com - 安全风险:攻击者输入的任何子域都解析到您的服务器 — 实施防火墙和速率限制
- 电子邮件记录:MX 记录必须单独设置;通配符 MX 记录不受所有邮件系统支持
- 搜索引擎索引:Google 可能索引意外的子域 — 向您不想索引的子域添加 robots.txt 或 noindex
最佳实践:使用通配符 DNS 以及应用程序级路由,在提供内容之前验证子域。永远不要在不验证的情况下为每个可能的子域提供内容。
警告(安全和意外的全面捕获)
通配符的便利性伴随着您在部署到生产环境之前应该了解的风险。许多人忽视的关键点是通配符会创建意外的"全面捕获" — 任何人输入的每个名称都会到达您的服务器,即使是您从未打算存在的名称。
子域接管和网络钓鱼
如果您的服务器在不检查的情况下回复每个子域,攻击者可以使用您品牌下的奇怪子域,例如 login-secure.example.com,托管一个令人信服的网络钓鱼页面,因为它位于您的真实域名下而显得可信。防御方式是让您的应用程序拒绝不在允许列表中的任何主机,返回 404 或重定向到您的主页。
Cookie 范围在子域之间泄露
如果您使用域 .example.com 设置 cookie,该 cookie 会发送到每个子域 — 包括多租户系统中其他租户的子域 — 这可能导致会话或令牌跨客户泄露。将 cookie 范围限制到仅需要它们的特定子域。
监控和日志记录
- 启用主机级日志记录:记录访问哪些子域,以便您可以捕获意外的子域。
- 速率限制:限制每个 IP 的请求,因为通配符允许攻击者无限地探测随机子域名。
- 分离环境:不要使用单个通配符覆盖生产和暂存 — 使用单独的区域或单独的域。
- 内部子域的 noindex:对内部子域应用
X-Robots-Tag: noindex或 robots.txt,以便搜索引擎不会索引应该保持私密的数据。
常见问题解答 (FAQ)
通配符子域与正常创建子域有什么不同?
正常创建子域意味着添加每个名称的 DNS 记录(blog.example.com、shop.example.com)。通配符使用单个记录 *.example.com,它匹配没有自己特定记录的每个名称 — 当您有许多子域或在运行时动态创建它们时非常适合。
通配符记录是否覆盖 a.b.example.com 这样的子子域?
不。*.example.com 仅匹配子域的一个级别。要使 a.b.example.com 工作,您必须添加单独的 *.b.example.com 记录。
我可以为电子邮件 (MX) 使用通配符吗?
不建议。通配符 MX 记录不受所有邮件系统支持,并导致邮件传递不可预测。仅为真正需要接收电子邮件的特定域或子域设置 MX 记录。
我应该为通配符记录设置什么 TTL?
在测试期间使用低 TTL 如 300 秒,以便更改快速生效。一旦设置稳定,将其提高到 3600 秒或更多以减少查询负载并加快解析。