NSlogging的要点是告诉客户端哪个域名服务器可以确定一个域名的实际IP地址。 例如,下面的查询告诉你,如果你想得到关于facebook.com
的权威答案,你必须问问a.ns.facebook.com
:
> dig ns facebook.com 19:58:27 ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> ns facebook.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32063 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;facebook.com. IN NS ;; ANSWER SECTION: facebook.com. 65000 IN NS a.ns.facebook.com. facebook.com. 65000 IN NS b.ns.facebook.com. ;; Query time: 13 msec ;; SERVER: 127.0.1.1#53(127.0.1.1) ;; WHEN: Sun Mar 20 19:58:40 CET 2016 ;; MSG SIZE rcvd: 65
这似乎很酷和有用,但我想知道为什么ANSWER
部分包含权威来源的主机名,而不是IP? 客户端获取授权源的实际IP地址而不是主机名是否更容易?
我的意思是,如果它得到的主机名,它将不得不作出另一个查询来解决这个主机名到IP,然后问这个新的知识产权有关最初的facebook.com
域正在寻找。 这不是没有效率吗?
我有兴趣回答这个问题,我指出了一些RFC中的一些段落来解释这个问题。
问题的解决scheme是DNS胶水logging,这是什么是胶水logging? 。
RFC 1035第3.3.11部分规定
“…请注意,该类可能不会指示协议族应与主机进行通信,尽pipe这通常是一个强有力的暗示。
返回一个IP地址就等于说明可以联系主机的方法,这违背了RFC。
Jason提供了适用于你所描述的问题的DNS机制,但是我们还没有看到为什么事情是这样完成的。
假设我拥有example.com
,我已经将我的一些网站内容签约给了一家名为Contoso的内容交付公司。 他们的平台要求我们将sub.example.com
委托给他们的域名服务器,以便他们可以控制返回的响应。
; SOA and MX omitted from this example $ORIGIN example.com. @ IN NS ns1 @ IN NS ns2 ; delegate sub.example.com to Contoso's nameservers sub IN NS ns1.cdn.contoso.com. sub IN NS ns2.cdn.contoso.com. ; this is ours, not Contoso's www IN A 198.51.100.1
如您所知,我们没有指定Contoso的域名服务器的IP地址。 我们所有的服务器都知道告诉互联网“我们不pipe理sub.example.com
,而是要求Contoso” 。 这是非常重要的,因为:
到现在为止还挺好。 一年过去了,我们并不知道Contoso正在改变其CDN域名服务器的IP地址。 因为DNS的工作方式,他们所要做的就是更新他们为ns1.cdn
和ns2.cdn.contoso.com.
返回A
loggingns2.cdn.contoso.com.
。
这给我们带来了一个重要的问题:Jason所描述的胶水logging是为了处理DNS中的“鸡肉和鸡蛋”场景,比如google.com
告诉全世界他们的域名服务器是ns1.google.com
和ns2.google.com
。 你不应该创build指向你不拥有的基础设施的胶水logging,除非它们存在来解决像这样的问题:
@ IN NS ns1 @ IN NS ns2 ; delegate sub.example.com to ns1 and ns2.sub.example.com sub IN NS ns1.sub sub IN NS ns2.sub ; provide the IP addresses of ns1 and ns2 so that nameservers ; on the internet can find them. ; ; these IP addresses are owned by Contoso, not us, and they must ; coordinate changes to these IPs with us ns1.sub IN A 203.0.113.10 ns1.sub IN A 203.1.113.10
这避免了鸡肉和鸡蛋的情况,但也使得Contoso必须与我们协调这些名称服务器的每次IP更改 。 这是非常容易冒险的,并且是不可取的。