DNS解析无法ping和卷曲,但不能挖


11

我将DNSMasq作为本地DNS服务器运行,因此可以解析*.local.pcfdev.io(如此处所讨论,在Mac OS X中使用PCF Dev Offline)。当我第一次进行设置时,一切正常。

几天后,重新启动MacBook后,离线时我无法再解决诸如api.local.pcfdev.io使用curl或的问题ping。但是,dig做正确的事。

$ dig api.local.pcfdev.io

; <<>> DiG 9.8.3-P1 <<>> api.local.pcfdev.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api.local.pcfdev.io.       IN      A

;; ANSWER SECTION:
api.local.pcfdev.io.    0       IN      A       192.168.11.11

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep  6 10:17:44 2016
;; MSG SIZE  rcvd: 53

$ curl api.local.pcfdev.io
curl: (6) Could not resolve host: api.local.pcfdev.io

我尝试将添加-AlwaysAppendSearchDomains/usr/sbin/mDNSResponderin 作为参数,/System/Library/LaunchDaemons/com.apple.mDNSResponder.plist并使用重启了mDNSResponder launchctl,但无济于事。


更新1

在正确的本地IP上肯定有一些监听:

$ nslookup api.local.pcfdev.io
Server:     127.0.0.1
Address:        127.0.0.1#53

Name:   api.local.pcfdev.io
Address: 192.168.11.11

$ ping api.local.pcfdev.io
ping: cannot resolve api.local.pcfdev.io: Unknown host

$ telnet 192.168.11.11 80
Trying 192.168.11.11...
Connected to 192.168.11.11.
Escape character is '^]'.

HTTP/1.1 400 Bad Request

Connection closed by foreign host.

更新2

尝试了以下建议从“网络首选项”中删除所有DNS服务器后127.0.0.1,我无法解决任何问题。我设法从中注销了一些调试记录mDNSResponder

mDNSResponder[91]:  74: DNSServiceCreateConnection START PID[32612](ping)
mDNSResponder[91]:  74: Error socket 75 created 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(15000, 0, api.local.pcfdev.io., Addr) START PID[32612]()
mDNSResponder[91]:  74: Error socket 75 closed  00000000 00000001 (0)
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) ADD    0 api.local.pcfdev.io. Addr
mDNSResponder[91]:  74: Cancel 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) STOP PID[32612]()
mDNSResponder[91]:  74: DNSServiceCreateConnection STOP PID[32612](ping)

我也注意到,在所提出的答案解释,nslookupdig不会引起任何事情由被记录mDNSResponder,但其他工具(pingcurl)做的。

因此,无论出于何种原因,这似乎都dnsmasq不起作用(我可以建立与的TCP连接127.0.0.1:53)或mDNSResponder没有使用它。


更新3

etc/resolve.conf当我的wifi适配器处于活动状态但不再连接到网络时,它便不再存在。这可能是CLI工具不使用本地dnsmasq服务器的原因吗?


您的网络适配器是否偶然关闭?如果转到“系统偏好设置”中的“网络”,则配置dnsmasq的适配器旁边是否有一个绿点?
芒果

好吧,我大概在没有Wi-Fi的火车上。
EngineerBetter_DJ

1
具体来说,wifi适配器是否已关闭?如果是这样,请在打开wifi适配器的情况下重试(即使它实际上可能未连接到互联网)。为了使设置正常进行,dnsmasq必须是所使用的网络接口上的DNS服务器。
芒果

感谢您尝试跟踪此问题。我也在为此而苦苦挣扎,不明白为什么“ curl foo:8989”找不到主机,而“ dig foo”却可以找到主机。是的,“ curl 172.20.0.17:8989”工作正常。像您一样,我将Wi-Fi网络DNS设置为127.0.0.1(在docker容器中运行的dnsmasq)。在我当前的情况下,FWIW问题是我所连接的wifi网络特有的-在我的个人热点上工作正常,问题在咖啡店wifi上。
jamshid

我尚未对该程序进行反向工程,但我希望它们调用的是完全不同的DNS解析代码库,这就是为什么您会看到破损的原因-有些指向本地,有些则不在。我可能会钻进去curl或者wget或让他们在仪器/分析器/调试器,看看什么是真正发生的事情引起无法解决的错误。
bmike

Answers:


12

遇到了同样的问题。我认为本地DNS缓存中有我先前测试中的不良数据。它很快被解决:

sudo killall -HUP mDNSResponder

1
我注意到,pingdig有时返回不同的IP地址(通常与水平分割DNS)和该命令可以修正它。不幸的是,根本原因是不确定的。
詹姆斯

7

一方面进行挖掘,另一方面进行curl / ping操作是从不同主机检索数据:

dig向DNS服务器(在您的情况下为localhost(127.0.0.1))查询数据库条目:与FQDN api.local.pcfdev.io相关的IP地址。主机本身不必运行甚至根本不存在。

curl / ping尝试使用mDNSResponder或其他方式解析IP地址,最后在远程主机上运行/与之交互。如果主机192.168.11.11没有运行或根本不存在,则两者都会失败。

现在,DNS条目错误(api.local.pcfdev.io具有另一个IP而不是192.168.11.11)或DNS条目正确,但是主机192.168.11.11没有运行。


添加-AlwaysAppendSearchDomains作为参数传递给/ usr / sbin目录中/ mDNSResponder /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist不推荐。相反,您应该将其添加到/Library/Preferences/com.apple.mDNSResponder.plist(源:)man mDNSResponder

要使mDNSResponder在OS X 10.11(El Capitan)和更高版本上启动时以这些可选参数运行,请在/Library/Preferences/com.apple.mDNSResponder.plist中将AlwaysAppendSearchDomains或NoMulticastAdvertisements布尔键设置为true并重新启动。

在您的情况下,根本不需要设置此密钥,因为这不是问题的原因。


深入研究VirtualBox,PCF开发人员(尝试登录到VM的“错误凭据”反复失败)和dnsmasq之后,我建议将DNS查询仅移交给dnsmasq:

  • 在系统偏好设置>网络>接口> DNS服务器中,删除除127.0.0.1之外的所有DNS服务器,然后应用更改。您还可以使用仅127.0.0.1设置来配置第二个位置,并使当前的DNS服务器保持其他配置。
  • 添加包含内容的文件/usr/local/etc/resolv.dnsmasq.conf

    #use your preferred DNS servers here. In the example I use some Google name servers
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
  • resolv-file=/usr/local/etc/resolv.dnsmasq.conf在/usr/local/etc/dnsmasq.conf的〜46行添加
  • address=/.local.pcfdev.io/192.168.11.11在/usr/local/etc/dnsmasq.conf的〜80行处添加或移动
  • 使用以下命令重新启动dnsmasq:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq
    

感谢您抽出宝贵的时间回答。肯定有倾听的事192.168.11.11; 实际的公共DNS条目*.local.pcfdev.io始终会指向相同的本地IP,因此,一旦我连接到Inforweb,curl就必须从 DNS服务器获得答复并且能够弄清楚要使用的IP地址。
EngineerBetter_DJ

1
似乎是curlping和,而我想使用此工具的其他二进制文件正在使用一种查找DNS条目的方法(该方法未使用dnsmasqlocalhost上的服务器),nslookup并且dig正在使用另一种方法。我想我需要进一步了解mDNSResponder!
EngineerBetter_DJ

@EngineerBetter在“系统偏好设置”>“网络”>“接口”>“ DNS”中是否还有127.0.0.1以外的其他条目?-我要安装整个套件(VBox,PCF Dev等),然后检查此...是否有特殊配置?
klanomath's

再次感谢您抽出宝贵的时间来帮助我。问题已更新,仍然没有运气。
EngineerBetter_DJ

0

解决这个问题花了我更长的时间。在其他线程上建议重新启动mDNSResolver数十次之后:

sudo killall -HUP mDNSResponder

我终于尝试了其他东西。我禁用了Wi-Fi并删除了我所有的首选网络。然后,我重新建立了Wi-Fi连接,一切正常。

  1. Apple菜单->系统偏好设置-> Wi-Fi(在左侧)
  2. “关闭Wi-Fi”,然后选择“高级”
  3. 删除您遇到问题的Wi-Fi连接(如果需要,也可以全部删除)。为此,请选择要删除的Wi-Fi网络,然后按“-”
  4. 点击“应用”和“确定”
  5. 重新打开Wi-Fi。
  6. 选择您的Wi-Fi网络,然后再次登录。

YMMV,但这终于对我有用。它可能应该是我尝试过的第一件事。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.