DNS 权威服务器、非权威服务器、客户端,哪一方负责 DNS CNAME 记录的解析呢?

2014-07-25 16:31:08 +08:00
 jsq2627
比如我客户机设置 DNS 服务器为 8.8.8.8
我有个域名 sb123.com,其中有一条 CNAME 记录 gae.sb123.com 指向 ghs.google.com

此时我客户机访问 http://gae.sb123.com ,8.8.8.8 上假设还没有缓存的结果,它会递归查询权威服务器。权威服务器是直接返回 CNAME ghs.google.com 呢,还是先把 CNAME 解析出来返回 IP 呢?如果是前者,那 8.8.8.8 是去查询这个 CNAME 再向客户机返回 IP 呢,还是直接把 CNAME 返回给客户机由客户机来查询呢?

小弟初学 DNS 原理,请多指教。
6106 次点击
所在节点    DNS
17 条回复
jsq2627
2014-07-25 16:34:19 +08:00
根据我的猜测,我觉得是由 8.8.8.8 解析好这个 CNAME,再给客户机返回 IP。是否是这样呢?

如果我的猜测正确,这么说的话,假如我用 GAE 部署应用,然后绑定了自己的域名,那么就可以躲过 DNS 污染了?
itsjoke
2014-07-25 16:43:01 +08:00
dig +trace看到应该是:"直接把 CNAME 返回给客户机由客户机来查询"
wwqgtxx
2014-07-25 17:00:09 +08:00
应该是客户端自行解析cname,你可以在本地搭建一个dns服务器看看输出即可
bombless
2014-07-25 17:00:34 +08:00
cname就是cname,如果直接就能返回ip还要cname做什么
leavic
2014-07-25 17:14:16 +08:00
trace结果只返回cname指向的域名,应该要DNS自己再查对应的的A记录.

而且按照DNS的规范,你查什么记录我就给你什么记录,除了ANY类型之外,我不可能在你查CNAME的时候主动告诉你别的记录.
响应包的Qtype值是2字节,只能是一种类型,不可能在一个包里回复两种类型的记录,也不可能对一个查询回应两个响应包.
leavic
2014-07-25 17:16:29 +08:00
@jsq2627 8.8.8.8根本不存在污染问题,Google DNS要被污染,美国人都上不了facebook,你要面对的是DNS劫持.
wy315700
2014-07-25 17:25:20 +08:00
$ dig cdn.tianwaihome.com +trace

; <<>> DiG 9.8.3-P1 <<>> cdn.tianwaihome.com +trace
;; global options: +cmd
. 21387 IN NS d.root-servers.net.
. 21387 IN NS h.root-servers.net.
. 21387 IN NS m.root-servers.net.
. 21387 IN NS k.root-servers.net.
. 21387 IN NS l.root-servers.net.
. 21387 IN NS e.root-servers.net.
. 21387 IN NS c.root-servers.net.
. 21387 IN NS j.root-servers.net.
. 21387 IN NS i.root-servers.net.
. 21387 IN NS b.root-servers.net.
. 21387 IN NS f.root-servers.net.
. 21387 IN NS g.root-servers.net.
. 21387 IN NS a.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 1498 ms

com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 497 bytes from 2001:7fd::1#53(2001:7fd::1) in 3336 ms

tianwaihome.com. 172800 IN NS a.dnspod.com.
tianwaihome.com. 172800 IN NS b.dnspod.com.
tianwaihome.com. 172800 IN NS c.dnspod.com.
;; Received 236 bytes from 192.26.92.30#53(192.26.92.30) in 1942 ms

cdn.tianwaihome.com. 3600 IN CNAME tianwaihome.b0.aicdn.com.
tianwaihome.com. 600 IN NS c.dnspod.com.
tianwaihome.com. 600 IN NS a.dnspod.com.
tianwaihome.com. 600 IN NS b.dnspod.com.
;; Received 153 bytes from 54.228.253.233#53(54.228.253.233) in 315 ms

用我自己的域名做了下测试
可以看到 8.8.8.8返回的就是cname 具体cname如何解析,那是下一步解析的
jsq2627
2014-07-25 17:31:27 +08:00
@itsjoke @wwqgtxx @bombless @leavic @wy315700 谢谢各位的解答。我查询到了 RFC 中相关的定义,确认了 CNAME 是会返回给客户端的。
http://tools.ietf.org/html/rfc1034#section-5.2.2

从 ping ghs.google.com 的结果也能看出客户端是能够得到 ghs.google.com 的 CNAME ghs.l.google.com 的。

但是 RFC 里面有一段话
“In most cases a resolver simply restarts the query at the new name when
it encounters a CNAME.”
意思是大多数情况下服务器也会去查询一次?

@leavic 嗯。你说的我明白,8.8.8.8自身是没问题的。我的意思是在国内向8.8.8.8进行UDP查询是会受到污染的。
jsq2627
2014-07-25 17:35:35 +08:00
@wy315700 这里似乎看不出吧。+trace 做的是递归查询,8.8.8.8 只返回了那些 Root servers。CNAME 记录是 DNSPOD 的权威服务器返回的。
rcmerci
2014-07-25 17:37:27 +08:00
还不太清楚DNS相关的东西,求教程
wy315700
2014-07-25 17:39:26 +08:00
@jsq2627 最后不是有从dnspod查出来cname的吗
leavic
2014-07-25 18:50:13 +08:00
@jsq2627 这不叫污染,这是劫持,是两个概念,污染的结果就是DNS服务器本身被污染,劫持是你的通信过程被劫持.
jsq2627
2014-07-25 19:25:10 +08:00
@leavic 谢谢科普。
julyclyde
2014-07-25 22:41:22 +08:00
@wwqgtxx 自己搭一个那还叫客户端么
dorentus
2014-07-25 22:55:39 +08:00
我试了一下,添加了两个域名:

1) t0.example.rubyist.today CNAME 指向 t1.example.rubyist.today
2) t1.example.rubyist.today CNAME 指向非本域的 g.cn

然后 dig t0.example.rubyist.today +dnssec +trace 结果如下:

https://gist.github.com/dorentus/da420768387cdc6bbc0b

可以看到我自己域名的权威服务器把本域能解析的都解析了,最后把非本域的 CNAME 直接丢给了客户端。
jsq2627
2014-07-26 00:06:54 +08:00
@dorentus :-) 谢谢,你的解释让我更加明确了这个结论。
julyclyde
2014-07-26 22:10:31 +08:00
不明白这事有啥好讨论的。抓包看看不就知道了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX