使用 BIND 时 @ 和 * 之间有区别吗?

使用 BIND 时 @ 和 * 之间有区别吗?

在配置 BIND DNS 区域时,我经常想知道为什么存在@*为区域名称指定别名。这两者之间有什么区别吗?

答案1

@被翻译为它所引用的区域的域名。这是在区域文件中用于 example.com 时,@将等于“example.com”。另一方面,*通配符表示任何内容。

下面是如何在区域文件中使用这两个符号的示例:

; 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 记录,而不必输入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.NET, 意味着*您能想到的任何内容。 通过使用*通配符,您可以为域设置 Web 服务器,然后在该域下配置多个虚拟主机,而无需再次修改 DNS。 host1.example.net、blah.example.net 和 doiexist.example.net 都将指向同一位置,即使它们没有在区域文件中明确说明,因为通配符的存在*

答案2

除了 Bill Weiss 所说的内容之外,我想指出的是,这*意味着“除已经存在的子域/标签之外的所有可能的子域/标签”,这意味着我可以拥有

$ORIGIN EXAMPLE.NET.
a IN A 1.2.3.4
b IN A 4.3.2.1
* IN A 8.8.8.8

并且 a.EXAMPLE.NET 将返回 1.2.3.4,就像 c.EXAMPLE.NET 将返回 8.8.8.8 一样

此外,aaacEXAMPLE.NET 也会返回 8.8.8.8,这会让通配符记录变得有点混乱。通过迭代这些名称,您可能会用尽递归名称服务器的所有缓存。

答案3

*不是区域名称的别名。它的意思是“所有子域”。

答案4

根据 RFC 1035,“@”扩展为当前的 $ORIGIN。我在区域文件顶部的 SOA 记录中最常看到这种情况。

我从未见过 '*' 用于除匹配 RR 条目(又名“通配符”条目)中先前未匹配的任何内容之外的任何用途。

相关内容