假设我正在尝试查找 IP 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 或多个 IPmail.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
我真的不关心的,然后是A
带有实际IP的记录(我确实关心)。
是否有可能使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
答案1
dig
不会对结果重新排序,它按照名称服务器返回结果的顺序显示它们。名称服务器通常会在每次查询特定记录时对结果进行洗牌(随机或循环)(以实现简单形式的负载平衡),尽管可能有服务器配置选项覆盖此设置。对于BIND,相关选项是rrset-order
和sortlist
。
据我所知,如果您通过一次调用执行多个查询dig
,就好像您dig
按顺序为每个名称单独执行了一样。我无法想象为什么代码不按照它们在命令行上的顺序循环遍历它们。
如果服务器必须遵循CNAME
记录才能得到最终答案,则DNS规范表示每个别名将按照处理顺序添加到响应中。因此,您可以保证您输入的原始名称将排在第一位,而最终结果将排在最后。