DNS 权威服务器、非权威服务器、客户端,哪一方负责 DNS CNAME 记录的解析呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jsq2627
V2EX    DNS

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

  •  
  •   jsq2627 2014-07-25 16:31:08 +08:00 6527 次点击
    这是一个创建于 4172 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我客户机设置 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 原理,请多指教。
    17 条回复    2014-07-26 22:10:31 +08:00
    jsq2627
        1
    jsq2627  
    OP
       2014-07-25 16:34:19 +08:00
    根据我的猜测,我觉得是由 8.8.8.8 解析好这个 CNAME,再给客户机返回 IP。是否是这样呢?

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

    而且按照DNS的规范,你查什么记录我就给你什么记录,除了ANY类型之外,我不可能在你查CNAME的时候主动告诉你别的记录.
    响应包的Qtype值是2字节,只能是一种类型,不可能在一个包里回复两种类型的记录,也不可能对一个查询回应两个响应包.
    leavic
        6
    leavic  
       2014-07-25 17:16:29 +08:00   1
    @jsq2627 8.8.8.8根本不存在污染问题,Google DNS要被污染,美国人都上不了facebook,你要面对的是DNS劫持.
    wy315700
        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如何解析,那是下一步解析的
    jsq2627
        8
    jsq2627  
    OP   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
        9
    jsq2627  
    OP
       2014-07-25 17:35:35 +08:00
    @wy315700 这里似乎看不出吧。+trace 做的是递归查询,8.8.8.8 只返回了那些 Root servers。CNAME 记录是 DNSPOD 的权威服务器返回的。
    rcmerci
        10
    rcmerci  
       2014-07-25 17:37:27 +08:00
    还不太清楚DNS相关的东西,求教程
    wy315700
        11
    wy315700  
       2014-07-25 17:39:26 +08:00
    @jsq2627 最后不是有从dnspod查出来cname的吗
    leavic
        12
    leavic  
       2014-07-25 18:50:13 +08:00   1
    @jsq2627 这不叫污染,这是劫持,是两个概念,污染的结果就是DNS服务器本身被污染,劫持是你的通信过程被劫持.
    jsq2627
        13
    jsq2627  
    OP
       2014-07-25 19:25:10 +08:00 via iPhone
    @leavic 谢谢科普。
    julyclyde
        14
    julyclyde  
       2014-07-25 22:41:22 +08:00 via iPad
    @wwqgtxx 自己搭一个那还叫客户端么
    dorentus
        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 直接丢给了客户端。
    jsq2627
        16
    jsq2627  
    OP
       2014-07-26 00:06:54 +08:00
    @dorentus :-) 谢谢,你的解释让我更加明确了这个结论。
    julyclyde
        17
    julyclyde  
       2014-07-26 22:10:31 +08:00
    不明白这事有啥好讨论的。抓包看看不就知道了?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2816 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 93ms UTC 06:13 PVG 14:13 LAX 22:13 JFK 01:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86