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 或子域名的域名记录。
顶点记录是 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 记录作为异国情调的反例。
@是一个“占位符”,“DNS 简写”,代表“当前来源”或$ORIGIN
。
也没有什么花哨的名字。
@在区域文件中定义在RFC 1035 - 第 35 页:
Run Code Online (Sandbox Code Playgroud)@ A free standing @ is used to denote the current origin.
但没有指定进一步的名称。
请注意,“当前原点”不一定与“当前域”相同。
恕我直言,使用“ 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 有几个不同的值。