DNS 区域文件中 @ 符号是什么意思
DNS 区域文件中的 @ 展开为当前 $ORIGIN;它常等于区域顶点,但随 $ORIGIN 改变。解释相对域名、尾点和控制台主机记录写法。
直接回答:@ 是区域文件原点($ORIGIN,即当前域名)的缩写占位符,在当前原点等于区域顶点时才代表裸域;若 $ORIGIN 改为子域,@ 也随之改变。 在 example.com 的区域里,@ IN A 192.0.2.1 就是"example.com 的 A 记录指向 192.0.2.1",等价于写完整域名 example.com. IN A 192.0.2.1。
区域文件中的示意片段
SOA 的省略号需要替换为合法序列号和定时参数;本例不是可直接加载的完整区域文件。
$ORIGIN example.com.
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (...)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN A 192.0.2.1
@ IN MX 10 mail.example.com.
www IN A 192.0.2.1
mail IN A 192.0.2.25
逐行看 @ 的含义:
@ IN SOA→ example.com 的 SOA 记录@ IN A→ example.com(裸域)指向 192.0.2.1@ IN MX→ 发给 user@example.com 的邮件交给 mail.example.comwww不带 @ → www.example.com(相对名自动补全原点)
在 DNS 服务商控制台里
几乎所有 DNS 服务商面板都沿用这个约定:
| 主机记录(Name/Host) | 实际生效的域名 |
|---|---|
@ |
example.com(裸域) |
www |
www.example.com |
* |
通配符合成答案,受最近已存在祖先和委派边界限制 |
| 留空 | 多数面板等同 @ |
给裸域配 A 记录就填 @;想让 blog.example.com 生效就填 blog。
与完整域名的等价关系
@ 只是一种书写便利。以下两条完全等价:
@ IN A 192.0.2.1
example.com. IN A 192.0.2.1
注意完整写法末尾的点——example.com. 表示绝对域名;少了点会被当作相对名,拼上原点变成 example.com.example.com.,这是区域文件配置的经典翻车点。
其他常见符号
*:通配符,不等于无条件匹配所有层级和所有未定义名称$ORIGIN:设置当前原点,@ 与相对名都基于它展开$TTL:未显式指定 TTL 的记录使用的默认生存时间
常见问题(FAQ)
Q:@ 和 www 有什么区别?
A:@ 是裸域(example.com),www 是子域(www.example.com)。两者是独立记录,需要分别配置;常见做法是两者的 A 记录指向同一台服务器,或一个 CNAME 到另一个。
Q:为什么有的面板里 @ 不生效?
A:极少数面板用留空代替 @;还有的 SaaS 平台要求 CNAME 场景下根域走 ALIAS/ANAME(因为标准 CNAME 不能用在 @ 上)。以平台文档为准。
Q:能给 @ 配 CNAME 吗?
A:若 @ 当前指向区域顶点,则 SOA/NS 与标准 CNAME 冲突。@ 本身不是禁止 CNAME 的原因;若改变 $ORIGIN,它可能指向可用 CNAME 的其他节点。DNS 别名与 HTTP 重定向也不是同一操作。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。