DNS解決はpingおよびcurlに失敗しますが、掘り出しません


11

私はDNSMasqをローカルDNSサーバーとして実行しているので、解決できます*.local.pcfdev.ioMac OS XでのPCF Dev Offlineの使用で説明されています)。私が最初にセットアップしたとき、すべてがうまくいきました。

数日後、MacBookを数回再起動した後、オフラインでやapi.local.pcfdev.ioを使用して問題を解決できなくなりました。しかし、正しいことを行います。curlpingdig

$ 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/mDNSResponder/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.confwifiアダプターがアクティブになると存在しなくなりますが、ネットワークに接続していません。これが、CLIツールがローカルdnsmasqサーバーを使用しない理由ですか?


ネットワークアダプターが偶然ダウンしていますか?システム環境設定の「ネットワーク」に移動した場合、dnsmasqが使用するように構成されているアダプターの横に緑色の点がありますか?
mango

ええと、私はwi-fiのない電車に乗っています。
EngineerBetter_DJ

1
具体的には、wifiアダプターはオフになっていますか?その場合は、Wi-Fiアダプターをオンにしてもう一度試してください(実際にはインターネットに接続されていない場合もあります)。設定が機能するには、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 2017

問題のプログラムをリバースエンジニアリングしていませんが、まったく異なるDNS解決コードベースを呼び出しているため、破損が発生していると思います。ローカルでポイントしているものとそうでないものがあります。私はおそらくそれらを計測器/プロファイラー/デバッガーに掘り込んcurlだりwget、取得したりして、実際に何が起こってエラーを解決できなかったかを確認します。
bmike

回答:


12

これと同じ問題がありました。ローカルDNSキャッシュには、以前のテストからの不良データがあったと思います。それはすぐに修正されました:

sudo killall -HUP mDNSResponder

1
私が気づいたpingdig時には異なる(通常はスプリットホライズンDNS付き)IPアドレスと、このコマンドの修正それを返します。根本的な原因は何ですか、残念ながらわかりません。
ジェームズ

7

一方はdigで、もう一方はcurl / pingで、さまざまなホストからデータを取得しています。

digは、DNSサーバー(この場合はローカルホスト(127.0.0.1))にデータベースエントリ(FQDN api.local.pcfdev.ioに関連するIPアドレス)を照会します。ホスト自体は実行する必要がなく、存在する必要もありません。

curl / pingは、mDNSResponderまたは他の手段でIPアドレスを解決しようとし、最後にリモートホストで操作/操作します。ホスト192.168.11.11が実行されていないか、まったく存在しない場合、両方とも失敗します。

DNSエントリが間違っている(api.local.pcfdev.ioに192.168.11.11以外のIPがある)か、DNSエントリは正しいが、ホスト192.168.11.11が実行されていない。


追加-AlwaysAppendSearchDomainsを引数としてするには、/ usr / sbin / mDNSResponderで/System/Library/LaunchDaemons/com.apple.mDNSResponder.plistが推奨されません。代わりに/Library/Preferences/com.apple.mDNSResponder.plist(source:)に追加する必要がありますman mDNSResponder

OS X 10.11(El Capitan)以降でmDNSResponderを起動するときにこれらのオプションの引数を使用して実行するには、/ Library / Preferences / com.apple.mDNSResponder.plistでAlwaysAppendSearchDomainsまたはNoMulticastAdvertisementsブールキーをtrueに設定して再起動します。

あなたの場合、問題の原因ではないので、このキーを設定する必要はまったくありません。


VirtualBoxを掘り下げた後、PCF Dev(いくつかの「誤った資格情報」がVMにログインしようとすると繰り返し失敗する)とdnsmasq DNSクエリをdnsmasqのみにデボルブすることをお勧めします。

  • システム環境設定>ネットワーク>インターフェース> DNSサーバーで、127.0.0.1を除くすべてのDNSサーバーを削除し、変更を適用します。127.0.0.1のみのセットアップで2つ目の場所を構成し、現在の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をポイントするため、inforwebsに接続するとすぐにcurlその DNSサーバーから応答が得られ、どのIPアドレスを使用するかを把握できます。
EngineerBetter_DJ

1
それはのように思えるcurlpingと、私はこの事をヒットしたい他のバイナリは、(使用されていないDNSエントリ見上げるの一つの手段を使用しているdnsmasqローカルホスト上のサーバ)、およびnslookupおよびdig他の手段を用いています。mDNSResponderについてもっと学ぶ必要があると思います!
EngineerBetter_DJ

@EngineerBetterシステム環境設定>ネットワーク>インターフェイス> DNSに127.0.0.1以外のエントリがありますか?-私はスイート全体(VBox、PCF Devなど)をインストールしてこれをチェックします...特別な設定はありますか?
クラノマ

これを手伝ってくれてありがとう。質問が更新されましたが、まだうまくいきません。
EngineerBetter_DJ

0

これを解決するのに必要以上に時間がかかりました。他のスレッドで推奨されているようにmDNSResolverを数十回再起動した後:

sudo killall -HUP mDNSResponder

ようやく他のことを試しました。Wi-Fiを無効にし、優先ネットワークをすべて削除しました。その後、Wi-Fi接続を再確立し、すべてが正常に機能しました。

  1. アップルメニュー->システム環境設定-> Wi-Fi(左側)
  2. 「Wi-Fiをオフにする」を選択し、「詳細」を選択します
  3. 問題のあるWi-Fi接続(または、必要に応じてすべて)を削除します。削除するWi-Fiネットワークを選択し、「-」を押してこれを実行します
  4. 「適用」と「OK」をクリックします
  5. Wi-Fiをオンに戻します。
  6. Wi-Fiネットワークを選択して、再度ログインします。

YMMVですが、これが最終的に私にとってうまくいきました。それはおそらく私が最初に試したものだったはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.