AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1014992
Accepted
wu-lee
wu-lee
Asked: 2020-05-01 07:34:05 +0800 CST2020-05-01 07:34:05 +0800 CST 2020-05-01 07:34:05 +0800 CST

如何获得域的 A(和 AAAA)记录的完整列表?

  • 772

假设我想知道查找域的 A 和 AAAA 记录,例如:google.com

我可以使用host:

$ host google.com 
google.com has address 172.217.169.46
google.com has IPv6 address 2a00:1450:4009:801::200e
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.

但这显然没有将它们全部列出,就好像我直接查询名称服务器一样,我得到了不同的答案:

$  host google.com ns2.google.com
Using domain server:
Name: ns2.google.com
Address: 216.239.34.10#53
Aliases: 

google.com has address 216.58.205.46
google.com has IPv6 address 2a00:1450:4009:808::200e
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.

结果甚至似乎因查询而异......所以我推断有一些事情正在发生,DNS服务器没有告诉整个画面。

换个角度看,如果你去 robtex.com 之类的网站上查找,并在那里查找域,我的查询没有返回一长串 IP:

https://www.robtex.com/dns-lookup/google.com#records

目前列出了这个长长的 IP 号码集合:

 2404:6800:4003:c02::8b
 2404:6800:4004:807::200e
 2404:6800:4006:803::200e
 2607:f8b0:4004:811::200e
 2607:f8b0:4005:802::200e
 2607:f8b0:4005:808::200e
 2607:f8b0:400a:809::200e
 2800:3f0:4001:803::200e
 2a00:1450:400b:805::200e
 74.125.68.100
 74.125.68.101
 74.125.68.102
 74.125.68.113
 74.125.68.138
 74.125.68.139
 172.217.0.46
 172.217.5.110
 172.217.15.110
 172.217.27.78
 172.217.29.14
 172.217.171.14
 216.58.194.174
 216.58.199.46

如果正确,则表明我从中得到的答案host仅暗示了真实情况。

怎样才能得到完整、权威的答案?

domain-name-system
  • 1 1 个回答
  • 102 Views

1 个回答

  • Voted
  1. Best Answer
    Omar Buhidma
    2020-05-01T08:59:35+08:002020-05-01T08:59:35+08:00

    从客户端来看,您可能永远无法了解全貌,因为许多 DNS 端点都在使用 GeoDNS 和其他基于 GeoLocation 的负载平衡。

    但是,假设您可以访问分布在全球各地的客户端,您可以使用 GNU dig 来实现这一点。

    您首先需要找到要查询的根名称服务器 - 只需运行即可获得根名称服务器列表dig。获取其中一个输出服务器(在本例中为 l.root-servers.net)并查询它:( dig @l.root-servers.net -t NS DOMAIN.NEt 产生如下输出:

     ;; AUTHORITY SECTION:
     net.                    172800  IN      NS      a.gtld-servers.net.
     net.                    172800  IN      NS      b.gtld-servers.net.
     net.                    172800  IN      NS      c.gtld-servers.net.
     net.                    172800  IN      NS      d.gtld-servers.net.
     net.                    172800  IN      NS      e.gtld-servers.net.
     net.                    172800  IN      NS      f.gtld-servers.net.
     net.                    172800  IN      NS      g.gtld-servers.net.
     net.                    172800  IN      NS      h.gtld-servers.net.
     net.                    172800  IN      NS      i.gtld-servers.net.
     net.                    172800  IN      NS      j.gtld-servers.net.
     net.                    172800  IN      NS      k.gtld-servers.net.
     net.                    172800  IN      NS      l.gtld-servers.net.
     net.                    172800  IN      NS      m.gtld-servers.net.
    
     ;; ADDITIONAL SECTION:
     a.gtld-servers.net.     172800  IN      A       192.5.6.30
     b.gtld-servers.net.     172800  IN      A       192.33.14.30
     c.gtld-servers.net.     172800  IN      A       192.26.92.30
     d.gtld-servers.net.     172800  IN      A       192.31.80.30
     e.gtld-servers.net.     172800  IN      A       192.12.94.30
     f.gtld-servers.net.     172800  IN      A       192.35.51.30
     g.gtld-servers.net.     172800  IN      A       192.42.93.30
     h.gtld-servers.net.     172800  IN      A       192.54.112.30
     i.gtld-servers.net.     172800  IN      A       192.43.172.30
     j.gtld-servers.net.     172800  IN      A       192.48.79.30
     k.gtld-servers.net.     172800  IN      A       192.52.178.30
     l.gtld-servers.net.     172800  IN      A       192.41.162.30
     m.gtld-servers.net.     172800  IN      A       192.55.83.30
    

    这将给出 TLD 名称服务器的列表。现在,如果您想要一个全局完整的视图,您需要从分布在全球的客户端执行剩余的查询(使用 CDN 或类似的)。

    要获得真正完整的视图,您应该从所有全局客户端端点遍历所有这些名称服务器;但是您可能会缩短它,只需查询其中一个以获取他们知道的目标域的所有名称服务器: dig @a.gtld-servers.net. -t NS DOMAIN.NET

    这会给你这样的东西:

     ;; OPT PSEUDOSECTION:
     ; EDNS: version: 0, flags:; udp: 4096
     ;; QUESTION SECTION:
     ;DOMAIN.NET.                   IN      NS
    
     ;; AUTHORITY SECTION:
     domain.net.            172800  IN      NS      a.dns.domain.net.
     domain.net.            172800  IN      NS      b.dns.domain.net.
     domain.net.            172800  IN      NS      c.dns.domain.net.
    
     ;; ADDITIONAL SECTION:
     a.dns.domain.net.        172800  IN      A       173.246.98.1
     b.dns.domain.net.        172800  IN      A       213.167.229.1
     c.dns.domain.net.        172800  IN      A       217.70.179.1
    

    ^^^^ 这是您的 domain.net 名称服务器的起始列表。记下它们。

    接下来,遍历这些输出名称服务器并确保它们不会委托给其他名称服务器: dig @c.dns.domain.net -t NS DOMAIN.NET

    如果这会产生您在上一个查询中未列出的任何名称服务器,请将它们添加到要查询的 DOMAIN.NET 名称服务器列表中。

    现在,遍历您的 DOMAIN.NET 名称服务器列表并像这样查询每一个(其中 $NAME_SERVER 是您当前正在查询的列表中的名称服务器):

    dig -t A @$NAME_SERVER domain.net
    dig -t AAAA @$NAME_SERVER domain.net
    

    将上述两个查询的结果添加到 DOMAIN.NET 的 A 和 AAAA 记录列表中。

    一旦您从所有全球分布式客户端查询了所有权威名称服务器,您将拥有一个相当完整的视图。

    • 2

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve