dig(和其他工具)仅返回 A 记录

dig(和其他工具)仅返回 A 记录

我一直在尝试弄清楚为什么我使用的多个 Vagrant VM 中的PHPgetmxrr()和方法无法成功返回工作域。checkdnsrr()

当进一步研究这个问题时,我尝试使用简单的dig命令,但只得到了记录的答案A。其他任何命令均不返回任何结果。

例如,以下是查询的“正确”答案部分,其中显示ANY了示例域(来自 AWS 托管的服务器)的所有记录。您可以看到至少有NSTXT和记录:AMX

Debian AWS 虚拟机:

$ dig reiss.com ANY 

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> reiss.com ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65366
;; flags: qr rd ra; QUERY: 1, ANSWER: 20, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;reiss.com.         IN  ANY

;; ANSWER SECTION:
reiss.com.      55  IN  NS  ns2.dnsmadeeasy.com.
reiss.com.      55  IN  NS  ns3.dnsmadeeasy.com.
reiss.com.      55  IN  NS  ns4.dnsmadeeasy.com.
reiss.com.      55  IN  NS  ns0.dnsmadeeasy.com.
reiss.com.      55  IN  NS  ns1.dnsmadeeasy.com.
reiss.com.      55  IN  MX  1 reiss-com.mail.protection.outlook.com.
reiss.com.      55  IN  TXT "v=spf1 ip4:212.49.201.210 ip4:80.168.187.225 ip4:109.68.12.42 ip4:79.125.20.120 ip4:46.51.172.2 ip4:46.51.172.4 include:spf.protection.outlook.com include:spf.mandrillapp.com -all"
reiss.com.      55  IN  TXT "loaderio=44b80a8be72962eccbd8ad01b6bfcac7"
reiss.com.      55  IN  TXT "google-site-verification=vrc2bvxpw2quwligK1dYuIFG6SLPp6PsOj3FlbNKmmo"
reiss.com.      55  IN  TXT "globalsign-domain-verification=DxtJ51OaIp87_OgmKu-iPxmFMN4i0CvhJtymIzHDyK"
reiss.com.      55  IN  TXT "vzjt+g3yB76l1eAihRfinxKPdAJvcxO5AAXUVdOlnqDRjHA8l+fHdBKsUp+mrKeCB2GTaX4GCUpFo5PoYNvTgw=="
reiss.com.      55  IN  SOA ns0.dnsmadeeasy.com. dns.dnsmadeeasy.com. 2008025750 43200 3600 1209600 180
reiss.com.      55  IN  A   52.85.142.187
reiss.com.      55  IN  A   52.85.142.218
reiss.com.      55  IN  A   52.85.142.227
reiss.com.      55  IN  A   52.85.142.253
reiss.com.      55  IN  A   52.85.142.33
reiss.com.      55  IN  A   52.85.142.79
reiss.com.      55  IN  A   52.85.142.108
reiss.com.      55  IN  A   52.85.142.145

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Feb 18 12:48:12 UTC 2017
;; MSG SIZE  rcvd: 872

虚拟机(Centos 7):

通过查看我的 Vagrant VM 上的各个请求,我得到:

$ dig reiss.com A 

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> reiss.com ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32964
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;reiss.com.         IN  ANY

;; ANSWER SECTION:
reiss.com.      3600    IN  A   52.85.142.79
reiss.com.      3600    IN  A   52.85.142.218
reiss.com.      3600    IN  A   52.85.142.227
reiss.com.      3600    IN  A   52.85.142.253
reiss.com.      3600    IN  A   52.85.142.145
reiss.com.      3600    IN  A   52.85.142.33
reiss.com.      3600    IN  A   52.85.142.108
reiss.com.      3600    IN  A   52.85.142.187

;; Query time: 1 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: Sat Feb 18 12:48:24 GMT 2017
;; MSG SIZE  rcvd: 155

但任何其他类型的记录都不会返回任何内容:

$ dig reiss.com MX

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> reiss.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOTIMP, id: 2267
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;reiss.com.         IN  MX

;; Query time: 0 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: Sat Feb 18 14:52:15 GMT 2017
;; MSG SIZE  rcvd: 38


$ dig reiss.com TXT

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> reiss.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOTIMP, id: 24668
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;reiss.com.         IN  TXT

;; Query time: 0 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: Sat Feb 18 14:53:36 GMT 2017
;; MSG SIZE  rcvd: 38

这些命令在 AWS 服务器以及我的本地 Mac OSX 主机上运行良好,但似乎在我的 Vagrant/Virtualbox VM 中失败了。

该问题也影响了 PHP,所以我认为这与 dig 命令无关。

有任何想法吗?

答案1

工作方式ANY是,接收查询的服务器应该返回该名称的记录(无论类型)。

这意味着当指向缓存递归服务器时,它通常只返回缓存中已有的内容(有效行为)。

即,ANY对于实际生产用途来说用处有限,但与故障排除等相关。

答案2

经过这里提供的有用线索,我意识到上述情况只是一种症状。真正的问题是通过 Vagrant 在 NAT 模式下运行网络适配器的 DNS 设置。

这篇文章有更多信息:Vagrant/VirtualBox DNS 10.0.2.3 不起作用

然而,这里的建议对我没有用,我已经应用了以下方法:

vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]

我尝试删除这个或者其他方法:

vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]

都不起作用。我最终仍会得到resolv.conf如下所示的结果,并且 dig不适用于MXTXTSOA记录:

# Generated by NetworkManager
search local
nameserver 10.0.2.3

我的(可能不太好的)解决方案是禁用 NetworkManager 中的 resolv.conf 更新,并对 google 进行硬编码以获取 DNS。

/etc/NetworkManager/NetworkManager.conf:

[main]
dns=none 

/etc/resolv.conf:

search local
nameserver 8.8.8.8
nameserver 10.0.2.3

如果您更改网络适配器,那么它就10.0.2.3不再是动态的,因此您需要小心,但这个解决方法对我来说是有效的。

我确信有更好的方法,也许我应该使用桥接适配器......

相关内容