假设我正在查找I( mail.yahoo.com,gmail.com和mail.google.com )
如果我执行:
dig @8.8.8.8 +nocomments +noquestion \
+noauthority +noadditional +nostats +nocmd \
gmail.com mail.yahoo.com mail.google.com我得到:
gmail.com. 299 IN A 173.194.123.21
gmail.com. 299 IN A 173.194.123.22
mail.yahoo.com. 0 IN CNAME login.yahoo.com.
login.yahoo.com. 0 IN CNAME ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com. 0 IN CNAME ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net. 0 IN CNAME any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net. 17 IN A 98.139.21.169
mail.google.com. 0 IN CNAME googlemail.l.google.com.
googlemail.l.google.com. 243 IN A 173.194.123.21
googlemail.l.google.com. 243 IN A 173.194.123.22我能确保如果我看到一个CNAME记录,它对应的A记录不会出现在对应于另一台机器的CNAME或其他主机名的A记录之前吗?
例如,让我集中讨论mail.yahoo.com (我只希望IP或IP mail.yahoo.com解析为):
这是输出:
mail.yahoo.com. 0 IN CNAME login.yahoo.com.
login.yahoo.com. 0 IN CNAME ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com. 0 IN CNAME ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net. 0 IN CNAME any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net. 17 IN A 98.139.21.169我要查找的主机名( mail.yahoo.com)是第一个条目的第一列。然后是一堆我不关心的CNAMES,然后是带有实际IP的A记录(我确实很关心)。
是否有可能使CNAMES或A记录出现故障?类似于:
ats.login.lgg1.b.yahoo.com. 0 IN CNAME ats.member.g02.yahoodns.net. #(!)BAD
ats.member.g02.yahoodns.net. 0 IN CNAME any-ats.member.a02.yahoodns.net. #(!)BAD
mail.yahoo.com. 0 IN CNAME login.yahoo.com.
login.yahoo.com. 0 IN CNAME ats.login.lgg1.b.yahoo.com.
any-ats.member.a02.yahoodns.net. 17 IN A 98.139.21.169更糟糕的是(上面的实际A记录):
any-ats.member.a02.yahoodns.net. 17 IN A 98.139.21.169
mail.yahoo.com. 0 IN CNAME login.yahoo.com.
login.yahoo.com. 0 IN CNAME ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com. 0 IN CNAME ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net. 0 IN CNAME any-ats.member.a02.yahoodns.net.或者更糟(在多分辨率dig执行中,如文章顶部所示):
ats.member.g02.yahoodns.net. 0 IN CNAME any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net. 17 IN A 98.139.21.169
mail.google.com. 0 IN CNAME googlemail.l.google.com. # This one I want
gmail.com. 299 IN A 173.194.123.21 # This one I want
gmail.com. 299 IN A 173.194.123.22 # This one I want
mail.yahoo.com. 0 IN CNAME login.yahoo.com. # This one I want
login.yahoo.com. 0 IN CNAME ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com. 0 IN CNAME ats.member.g02.yahoodns.net.
googlemail.l.google.com. 243 IN A 173.194.123.21
googlemail.l.google.com. 243 IN A 173.194.123.22发布于 2014-10-30 19:00:23
dig不重新排序结果,而是按照名称服务器返回它们的顺序显示结果。命名服务器通常在每次查询特定记录(实现简单的负载平衡形式)时(随机或循环)对结果进行洗牌,尽管可能有一些服务器配置选项覆盖了这一点。对于BIND,相关的选项是rrset-order和sortlist。
据我所知,如果您使用单个dig调用执行多个查询,就好像您已经按照该顺序分别对每个名称执行了dig。我无法想象为什么代码不会按照命令行上的顺序循环它们。
如果服务器必须遵循CNAME记录才能得到最终答案,则DNS规范表示每个别名都将按照处理的顺序添加到响应中。所以你可以保证你最初的名字是第一名,最后的结果是最后的。
https://unix.stackexchange.com/questions/164872
复制相似问题