1
jsq2627 OP 根据我的猜测,我觉得是由 8.8.8.8 解析好这个 CNAME,再给客户机返回 IP。是否是这样呢?
如果我的猜测正确,这么说的话,假如我用 GAE 部署应用,然后绑定了自己的域名,那么就可以躲过 DNS 污染了? |
2
itsjoke 2014-07-25 16:43:01 +08:00 1
dig +trace看到应该是:"直接把 CNAME 返回给客户机由客户机来查询"
|
3
wwqgtxx 2014-07-25 17:00:09 +08:00 via Android 1
应该是客户端自行解析cname,你可以在本地搭建一个dns服务器看看输出即可
|
4
bombless 2014-07-25 17:00:34 +08:00 1
cname就是cname,如果直接就能返回ip还要cname做什么
|
5
leavic 2014-07-25 17:14:16 +08:00 1
trace结果只返回cname指向的域名,应该要DNS自己再查对应的的A记录.
而且按照DNS的规范,你查什么记录我就给你什么记录,除了ANY类型之外,我不可能在你查CNAME的时候主动告诉你别的记录. 响应包的Qtype值是2字节,只能是一种类型,不可能在一个包里回复两种类型的记录,也不可能对一个查询回应两个响应包. |
6
leavic 2014-07-25 17:16:29 +08:00 1
@jsq2627 8.8.8.8根本不存在污染问题,Google DNS要被污染,美国人都上不了facebook,你要面对的是DNS劫持.
|
7
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如何解析,那是下一步解析的 |
8
jsq2627 OP @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查询是会受到污染的。 |
9
jsq2627 OP @wy315700 这里似乎看不出吧。+trace 做的是递归查询,8.8.8.8 只返回了那些 Root servers。CNAME 记录是 DNSPOD 的权威服务器返回的。
|
10
rcmerci 2014-07-25 17:37:27 +08:00
还不太清楚DNS相关的东西,求教程
|
15
dorentus 2014-07-25 22:55:39 +08:00 1
我试了一下,添加了两个域名:
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 直接丢给了客户端。 |
17
julyclyde 2014-07-26 22:10:31 +08:00
不明白这事有啥好讨论的。抓包看看不就知道了?
|