DNSルックアップは「ping」などで失敗しますが、「host」では機能します


35

私はpfSense 2.0rc3を使用しており、それをDNSフォワーダーとして設定し、「DNSフォワーダーにDHCPリースを登録する」を有効にし、ローカルルックアップ用のDNSサーバーを取得するための適切な設定をすべて理解しています。

Linuxでの期待どおりに動作し、特に私が実行することができますhost abcし、ping abc期待通り(および他のアプリケーション)と、彼らはすべての仕事。

ただし、Mac OS X Lion 10.7では、期待どおりに機能しません。特に、hostコマンドを使用したルックアップのみが機能するようです。つまり、

$ ping abc
ping: cannot resolve abc: Unknown host

$ host abc
abc.local has address 192.168.1.128

$ ping abc.local
ping: cannot resolve abc.local: Unknown host

$ host abc.local
abc.local has address 192.168.1.128

コマンドabcを使用しているhostのにping(およびその他のアプリケーションで)失敗するのはなぜですか?

読んでくれてありがとう。


新しいYosemite(10.10)MBPでも同じ状況になりました。多くの検索後や設定、ここで働いていた答えだ:apple.stackexchange.com/a/152892を任意の--AlwaysAppendSearchDomains設定なしでの記録のためには
スタンKurdziel

回答:


26

彼らがなぜこの変更を行ったのか、私にはわかりませんが、それはしばらく私を夢中にさせます。

なぜホストで機能するのかはわかりませんが、ping ではありませんが、これら2つのユーティリティの性質に関係していると思います。Pingは、エコーが返されるはずのパケットをワイヤ上にドロップするための単純な(非常に便利ですが)診断ユーティリティです。ホスト名検索機能は、ジョブの副作用であり、システムの再帰リゾルバーに渡されます(リンクされたライブラリやそのようなものを確認しても確認していません)。ホストの主な仕事はDNS名前解決を行うことであるため、独自の再帰リゾルバを実装します。

Appleの再帰リゾルバはmDNSResponderです。何らかの理由で、LionのmDNSResponderのバージョンは、(少なくとも)Snow Leopardと同じように動作するために「-AlwaysAppendSearchDomains」コマンドラインオプションを必要とします。

これを簡単に修正する方法を次に示します。

sudo sed -i .orig '/ProgramArguments/,/<\/array>/ {
s/\(<string>-launchd<\/string>\)/\1\
                <string>-AlwaysAppendSearchDomains<\/string>/
}' /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

(上記の最後から2番目の行の先頭に2つのタブ文字があるはずですが、この小さなエディターでタブを挿入する方法がわからなかったため、16個のスペースを追加しました。どちらかが動作するはずですが、タブ元のファイルの間隔をより良く合わせます。)

これにより、「-AlwaysAppendSearchDomains」引数がmDNSResponder起動plistファイルに追加されます(およびバックアップコピーが保存されます)が、これはlaunchdによって制御されるため、mDNSResponderを再起動するようシステムに指示する必要があります。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

実行中のmDNSResponderプロセスを確認すると、新しい引数で実行されていることがわかります。

ps auxww | grep mDNSResponder

http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.htmlおよびhttp://kavassalis.com/2011/07/wtf-bugの小道具-in-os-x-10-7 /、この問題に対する私の答えを見つけました。)


この修正はMountain Lion(10.8)でも機能します。ラップトップに適用しました。
シグセグフ

クール!お役に立てて嬉しいです。
Sigsegv

1
参考までに、これはヨセミテでは機能しませんでした。YosemiteでAlwaysAppendSearchDomainsが必要な場合は、apple.stackexchange.com / a / 157017/65787を試してください。Yosemiteでは.localの問題は解決しませんでしたが、これは=)apple.stackexchange.com/a/152892
Stan Kurdziel

エルキャプテンで働いていません。そして、より簡単な方法が見えるsudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
ドミトリーヴェルホトゥロフ

9

host(1)のマニュアルページから:

Mac OS Xの通知

hostコマンドは、Mac OS Xで実行されている他のプロセスで使用されるホスト名とアドレスの解決またはDNSクエリルーティングメカニズムを使用しません。ホストによって印刷される名前またはアドレスクエリの結果は、Mac OS Xのネイティブの名前とアドレスの解決メカニズム。DNSクエリの結果は、Mac OS X DNSルーティングライブラリを使用するクエリとも異なる場合があります。

残念ながら、ホストコマンドがホスト名を正確に解決する方法に関する情報はありません。この動作により、デバッグ、IMHOに多少役に立たなくなります。


6

基本的な履歴... nslookupはコマンドでしたが、リゾルバルーチンすべての独自の実装がありました。起こったのは、異なるプラットフォーム上のシステムリゾルバがnslookupとは異なる動作をすることでした。時々、これはかなり異なる結果を生成します。

hostおよびdigコマンドは、nslookupの「書き換え」として作成されました。それらは、システムリゾルバ関数に静的にリンクします。システムリゾルバは、UNIXまたはUNIXライクシステムの標準Cライブラリ内の関数のコレクションです(Mac OS Xでは、これらの関数はnetdbライブラリの一部です)。これを行うことにより、hostおよびdigコマンドは常に、システムリゾルバーが構築されたOSに対して行うのと同じように機能しますが、それに依存しません。このように、システムリゾルバが誤動作している場合の優れた診断ツールです。

注:ホストとdigは、通信する特定のネームサーバーが与えられていない限り、/ etc / resolv.confからネームサーバーリストを読み取ります。hostコマンドのみが/etc/resolv.confファイルの検索リストを使用します。digはそうではないため、何かを解決するためにdig FQDNを常に提供する必要があります。それ以外の場合、両方のコマンドは完全に自己充足的です。たとえば、/ etc / resolv.confファイルは、使用するバイナリファイルにない唯一のものです。

mDNSresponderはBonjourです。深く掘り下げたわけではありませんが、この構成設定はこれを修正していないか、少なくとも直接修正しているのではないかと思います。Mac OS X 10.9.1で同じ問題が発生し、mDNSresponderを再起動するだけで修正されました。他のシステムで10.5-> 10.8 / 10.9にこの問題を見たことはありません。また、GUIアプリケーションは影響を受けず、pingやsshなどのコマンドラインツールのみが破損しました。

ライブラリをさらに掘り下げる時間があれば、より完全な説明を見つけることができるかどうかを確認します。


4

ここでは、修正を自動化するシェルスクリプト(および、後で必要な場合はアンインストーラー)を作成しました。

https://github.com/michthom/AlwaysAppendSearchDomains

これは、システムファイルを手動で編集することをためらう可能性のある、技術をあまり必要としない職場のユーザーに提供することでした。


4

.localはマルチキャスト用に予約されています。.localを使用する同じネットワーク上のmDNSおよびDNSサーバーには問題があります。


1
ここでの説明や、ドキュメントへのリンクがもっと欲しいです。ちょっとありがとう!
bmike

3

ホストは.local dnsサフィックスを追加しています。Pingはそうではありません。この動揺が見られる場合は、ネットワークシステム設定で.localをデフォルトのサフィックスとして追加すると、ホスト名を解決しようとするときにシステムがそれを追加します。


それは良い点であり、申し訳ありませんが、私は質問でそう言っていping abc.localませんでしたが、どちらも動作しません(host abc.local動作します)。質問を修正しました。pfSenseは、DHCPリースを送信するときに、ローカルドメインを検索ドメインとして自動的に追加するため、問題にはなりません。
ブライアンM.ハント

うわー-奇妙な。末尾に。を付けてローカルに完全修飾するとどうなりますか??ping abc.local.
bmike

1
同じ結果。明らかに、Macには2つの検索メカニズムがあります。なぜ違うのか想像するのは難しいです。
ブライアンM.ハント

この答えがYosemiteやその他の新しいOSで機能するかどうかはあまりわかりません。おそらくより良い答えを得ることができますか?
bmike

ファイル/ etc / hostsはシングルユーザーモードでのみ使用されることを警告するドキュメントがあります。違います。/ etc / hostsに名前を入れて127.0.0.1にルーティングすることにより、多くの悪者への不注意なアクセスを防ぎます。Appleにはいくつかの奇妙な点があることは確かですが、これはこの質問にとって重要ではないと思います。また、OS Xはresolv.confを頻繁に変更しているため、cronジョブを設定して、10分ごとにそれを復元しました。
WGroleau

2

上記のすべてを試しても何も機能しない場合は、ネームサーバー検索パスを追加できますSystem Preferences>Network>Advance(bottom right of the window)>DNS tab ここに画像の説明を入力してください

これにより/etc/resolv.confが更新され、pingが機能するようになります。/etc/resolv.confを編集して検索パスを更新することは実際には機能しませんが、これは何らかの理由で機能します。

更新:

/etc/resolv.confの編集は機能しません。これは、OSがSystem Preferenceペインの設定に基づいてファイルを書き換えるためです。


1
「/etc/resolv.confの編集は実際には機能しません」というのは、OSが設定ペインに基づいて書き換えるからです。
WGroleau

1
受け入れられた答えとは対照的に、これは本当に私にとってトリックをしました。
アルテムPyanykh

1

Lamont Petersonの投稿についてコメントするのに十分な評判がありません。Mac OS X 10.7(Lion)でmDNSresponderを再起動するとうまくいきました。Lamont Petersonとは異なり、この問題により、1つのGUIアプリケーションで問題が発生しました。Safariはパブリックまたはプライベートのホスト名を解決できませんでした。以下に、私が行った具体的な手順と、Lamont Petersonが行ったと思われる手順を示します。

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist

unloadmDNSresponderをシャットダウンし、load再起動します。

これで問題はすぐに解決しました。再起動は必要ありません。

list次のコマンドを使用して、正常に再起動したことを確認できます。

$ sudo launchctl list | grep '^PID\|mDNSResponder'
PID     Status  Label
708     -       com.apple.mDNSResponder
-       0       com.apple.mDNSResponderHelper

プロセスID(PID)が存在するということは、それが実行されていることを意味します。708OSによって割り当てられると異なります。ステータスがハイフンまたはゼロ以外の何かを示している場合、何かがおかしくなりました。

どのようにmDNSResponderHelper相互作用するのかわかりませんmDNSResponder。再起動する必要があっただけmDNSResponderです。



0

OSX名に関するplsの注意は非標準である可能性があるため、完全を期すために:

  • FQDNはping可能です
  • 「hosts」ファイルの名前はping可能です

Mac名は一般的ではありません。2つの修正を行う必要があります。a)スペースを「-」に変更するb).localを追加する

例えば私のMac:ingcontiのMacBook Pro

pingcontis-MacBook-Pro.localでping可能になります

そして、あなたが見ることができる設定を開きます:

ここに画像の説明を入力してください

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