以@ 开头的 DNS 记录的名称是什么?

dun*_*nxd 20 domain-name-system

可能重复:
DNS 区域文件中“@”的含义是什么?

我知道以 * 开头的 DNS 记录称为通配符记录。以@(at 符号)开头的 DNS 记录的名称是什么。这是根域的记录(例如,只是 example.com,而不是 www.example.com)

我想了解更多信息,但在 Google 中搜索“@record dns”不会返回任何有用的结果。

这种类型的记录的正确术语是什么,在哪里可以找到更详细的描述?

RFC 1035描述了在 DNS 记录中使用 @,但并没有给出名称。

小智 30

在 DNS 文件中,“@”符号是用于表示“当前域”的占位符。

DNS 记录中的@ 符号是指没有任何 www 或子域名的域名记录。

  • @dunxd,“独立的 @ 用于表示当前原点。”,来源:https://datatracker.ietf.org/doc/html/rfc1035#page-35。换句话说,“@”可能是“example.com”。关于“起源”:http://www.zytrax.com/books/dns/ch8/origin.html (3认同)
  • 这就是它的作用,但它叫什么? (2认同)

Joh*_*ene 9

顶点记录是 DNS 区域根部的记录。有时称为“裸域”。

例如,在“https://github.com/”中,它们是专门针对“github.com”的记录,而不是针对可能存在的子域(例如“www.github.com”或“gist.github.com”)的记录。

Apex 记录有一个特殊的限制:它们不能是别名,因为 apex 包含不允许使用别名的 DNS 元数据[3]。请继续阅读,了解这如何成为一个问题。我使用术语“浮动”作为视觉隐喻,因为我要描述的内容缺乏通用标准名称,因为它是一个丑陋的黑客:HTTP 使用主机记录解析端点,因此 URL 为“https:// /github.com”表示查找“github.com”的 A 和 AAAA 记录。是的,该协议足够傲慢[1],假设您的整个域的主机地址就是 Web 服务器的主机地址。(这就是为什么我们最终在域名前面添加“www”作为服务选择器)。作为对查询的响应,您将获得一个 IP 地址。

不幸的是,IP 地址有时会在没有警告的情况下发生变化。

如今最常见的例子是 Amazon Web Services 提供的负载均衡器。解决方案是在您的人性化域中使用别名记录,指向基础设施提供商保持最新的隐藏技术域(例如“my-elb-name-1-1160186271.ap-southeast- 1.elb.amazonaws.com”)

这对于“www.example.com”来说没问题,但对于裸露的“example.com”则不然,因为在顶端禁止使用别名。

结果,Route 53 等 DNS 提供商最终遭遇了黑客攻击:在顶点出现欺骗记录,该记录跟踪外部资源并合成虚假的 A/AAAA 响应。现在您有了一个裸域,可以跟踪(或者更确切地说希望跟踪)正确的端点。但它会随着风的变化而变化。因此我将其描述为“浮动”。

这种拼凑行为没有一致的名称。AWS 将其称为别名,出于可靠性考虑,将其限制为仅适用于自己的基础设施;DME 将其称为“ANAME”记录 [2]。该模型甚至可以轻松地实现为在名称服务器上的 cron 之外运行的 shell 脚本。它很脆弱,通常不可靠,根本没有标准化,而且无法扩展到超出一项服务。

一种更好的解决方案是要求使用 SRV 记录,它允许用户声明“example.com”的“https”服务。除此之外,比如说 xmpp 服务、sip 服务或您想要宣布的任何其他服务。SRV 记录可以存在于顶点。他们还可以将答案中生成的端点的 A 和 AAAA (IPv6) 地址捆绑在一起,并选择备用端口号,而无需打扰用户。

这并不是万能的灵丹妙药:区域切割存在一个小风险,可能会增加客户端查找的数量,但这是一种边缘情况,不是您可以轻易犯错也不容易修复的情况。

[1] HTTP/1.0 及更早版本是可以原谅的,因为它们来自于机架中只有一个 Web 服务器并称之为“www”的时代。但 HTTP/2 应该能够响应现代架构。

[2] http://www.dnsmadeeasy.com/services/aname-records/

[3] 你们喜剧演员都不能提及 DNAME 记录作为异国情调的反例。


HBr*_*ijn 5

@是一个“占位符”“DNS 简写”,代表“当前来源”或$ORIGIN

也没有什么花哨的名字。


@在区域文件中定义在RFC 1035 - 第 35 页:

@     A free standing @ is used to denote the current origin.
Run Code Online (Sandbox Code Playgroud)

但没有指定进一步的名称。

请注意,“当前原点不一定与“当前域”相同。

恕我直言,使用“ apex ”这个名字也有点不正确。

尽管您不再经常看到它,但在手动配置的区域文件中,您可以显式设置 $ORIGIN 并且可以将其设置为与区域/域名不同的内容

  • 您可以将$ORIGIN 设置为 。(点),它可以有效地禁用@速记,但也可以防止当粗心的管理员不一致地打算使用 FQDN 但不使用尾随终止它们时出现意外问题.

  • 更罕见(并且令人困惑)的是,您可以在区域文件中重置 $ORIGIN ,并利用新域将用于后续不合格域的事实,并执行如下所示的模糊操作:

    $ORIGIN 1.0.10.in-addr.arpa.
    $TTL 86400
    @     IN     SOA    dns1.example.com.     hostmaster.example.com. (
                      2001062501 ; serial
                      21600      ; refresh after 6 hours
                      3600       ; retry after 1 hour
                      604800     ; expire after 1 week
                      86400 )    ; minimum TTL of 1 day
    
    @    IN     NS     dns1.example.com.
                NS     dns2.example.com.
    
    ; The NS records above showcase several shorthand techniques
    ; 1. By starting the line with a blank character the line with 
    ;    the dns2 name server Resource Record is owned by the 
    ;    previous owner, i.e. the previous @ record
    ; 2. The @ is shorthand for $ORIGIN ==  1.0.10.in-addr.arpa.
    ; 3. When the TTL field is omitted the default $TTL will be used.
    ; 4. When the class field is omitted the default IN internet class is used. 
    ;  
    ; After expanding all shorthand :
    
    1.0.10.in-addr.arpa.  86400  IN   NS   dns1.example.com.
    1.0.10.in-addr.arpa.  86400  IN   NS   dns2.example.com.
    
    
    ; The example below showcases how a short hostname is commonly 
    ; used as shorthand. The DNS server will append $ORIGIN where 
    ; a FQDN is expected.
    
    1                                 PTR    gateway.example.com.
    2                                 PTR    dns1.example.com. 
    3                                 PTR    dns2.example.com
    
    ; note below also the effect of the common typo in dns2.example.com
    ; showcasing how any hostname not terminated with a . will be considered 
    ; a "short" hostname rather than a FQDN once all shorthand is expanded:
    
    1.1.0.10.in-addr.arpa.  86400 IN  PTR    gateway.example.com.
    2.1.0.10.in-addr.arpa.  86400 IN  PTR    dns1.example.com. 
    3.1.0.10.in-addr.arpa.  86400 IN  PTR    dns2.example.com.1.0.10.in-addr.arpa.
    
    ; showcase below how resetting the $ORIGIN can be used 
    ; for even more efficient shorthand 
    
    $ORIGIN floor1.example.com.
    20.1.0.10.in-addr.arpa.    IN     PTR    alice
    ; will be completed with the new $ORIGIN and $TTL to:
    20.1.0.10.in-addr.arpa.  86400 IN PTR    alice.floor1.example.com.
    21.1.0.10.in-addr.arpa.    IN     PTR    betty
    22.1.0.10.in-addr.arpa.    IN     PTR    charlie
    23.1.0.10.in-addr.arpa.    IN     PTR    doug
    24.1.0.10.in-addr.arpa.    IN     PTR    ernest
    25.1.0.10.in-addr.arpa.    IN     PTR    fanny
    
    $ORIGIN floor2.example.com.
    26.1.0.10.in-addr.arpa.    IN     PTR    geoff
    ; will be completed with $ORIGIN and $TTL to:
    26.1.0.10.in-addr.arpa.  86400 IN PTR    geoff.floor2.example.com.
    27.1.0.10.in-addr.arpa.    IN     PTR    honey
    
    Run Code Online (Sandbox Code Playgroud)

然后@和 $ORIGIN 有几个不同的值。