; SOA Record
EXAMPLE.NET. 3600 IN SOA ns1.example.com. dns.example.net. (
2010031000
28800
7200
604800
86400
)
; A Records
@ 3600 IN A 192.168.1.212
@ 3600 IN A 192.168.1.214
; CNAME Records
www 3600 IN CNAME @
* 3600 IN CNAME @
; NS Records
@ 3600 IN NS ns1.example.com
@ 3600 IN NS ns2.example.com
在本例中,我使用EXAMPLE.COM 的DNS 服务器为EXAMPLE.NET 定义区域。我有 2 个 IP 地址分配给域的 A 记录,因此EXAMPLE.NET 指向 192.168.1.212 和 192.168.1.214。然后我定义了几个 CNAME 记录, www 和 magic *,它们都指向@或解释为EXAMPLE.NET。也有 NS 记录使用该@符号而不必键入 out EXAMPLE.NET。
因此,您实际上可以将此区域文件转换为:
; SOA Record
EXAMPLE.NET. 3600 IN SOA ns1.example.com. dns.example.net. (
2010031000
28800
7200
604800
86400
)
; A Records
EXAMPLE.NET. 3600 IN A 192.168.1.212
EXAMPLE.NET. 3600 IN A 192.168.1.214
; CNAME Records
www 3600 IN CNAME EXAMPLE.NET.
* 3600 IN CNAME EXAMPLE.NET.
; NS Records
EXAMPLE.NET. 3600 IN NS ns1.example.com
EXAMPLE.NET. 3600 IN NS ns2.example.com
@
也被翻译为它所引用的区域的域名。这是在 example.com 的区域文件中使用的,然后@
将等于“example.com”。另一方面*
,通配符表示任何含义。这是我如何在区域文件中使用这两个符号的示例:
在本例中,我使用EXAMPLE.COM 的DNS 服务器为EXAMPLE.NET 定义区域。我有 2 个 IP 地址分配给域的 A 记录,因此EXAMPLE.NET 指向 192.168.1.212 和 192.168.1.214。然后我定义了几个 CNAME 记录, www 和 magic
*
,它们都指向@
或解释为EXAMPLE.NET
。也有 NS 记录使用该@
符号而不必键入 outEXAMPLE.NET
。因此,您实际上可以将此区域文件转换为:
两个版本是相同的。简单的
@
变成EXAMPLE.NET
和*
意味着你能想到的任何东西。通过使用*
通配符,您可以为域设置网络服务器,然后在该域下配置多个虚拟主机,而无需再次修改 DNS。host1.example.net、blah.example.net 和 doiexist.example.net 都将指向同一个位置,即使由于*
通配符,它们在区域文件中没有特别说明。除了 Bill Weiss 所说的,我想指出的
*
是“所有可能的子域/标签,除了那些已经存在的”,这意味着我可以拥有a.EXAMPLE.NET 将返回 1.2.3.4,就像 c.EXAMPLE.NET 将返回 8.8.8.8
aaacEXAMPLE.NET 也将返回 8.8.8.8,这正是通配符记录有点混乱的原因。通过遍历这些名称,您可能会用完递归名称服务器的所有缓存。
*
不是区域名称的别名。它的意思是“所有子域”。将 @ 视为在解析区域文件期间扩展的宏,而 * 是“glob”(匹配)任何不匹配任何正常条目的操作符。
* 条目允许配置 DNS 以返回查询的指定记录,否则这些查询将获得“NXDOMAIN”(不存在)响应。
“@”根据 RFC 1035 扩展为当前的 $ORIGIN。我在区域文件顶部的 SOA 记录中经常看到这一点。
我从来没有见过 '*' 用于匹配任何之前在 RR 条目(又名“通配符”条目)中不匹配的内容。