Mac OSX Lion DNSルックアップ順序[完了]


96

Mac OSX Lionにアップグレードした後、名前解決のために/ etc / hostsが最初に検索されないことに気付きました。これにより、次のような副作用が発生します。

  1. / etc / hostsのエントリの解決が非常に遅い
  2. 127.0.0.1 www.google.comなどの既存のドメインを上書きすることはできません。
  3. DHCPから検索ドメインエントリを取得したら、.lanと言い、localhost.lanをローカルDNSで127.0.0.1に設定しました。ローカルホストに到達できなくなりました。

この動作は意図されたものですか?それは意味がありますか?そして最も重要なことは、どうすれば古い行動に戻ることができるかです。


12
スーパー役に立つ質問-驚き、トピックオフとして閉を驚か
セバスチャン・パッテン

少なくとも彼らはまだスレッドを削除していません。これは私のベーコンを救った。すべてのホストをX.localからX.lhostに変更したところ、問題は解決しました。余談ですが、私はxip.ioの大ファンです。たとえば、foo.127.0.0.1.xip.io
Tim

回答:


78

Lionは.local TLDを別の方法で処理しているため、彼は重要だと思います。これは、(Bonjourによって使用される)マルチキャストDNS機能のために予約されているためです。この問題を解決する唯一の方法は、開発ホスト(つまり、.dev)に別のTLDを使用することです。それは私にとってはうまくいきます、それが他の人に役立つことを願っています!


ありがとうございました。確かに非常に役立ちます。
Cade

5
私の最初の考えは「不自由」でした。しかし、その後、私は、この他のスタックポストにつまずいたと私のスタンスに変更:serverfault.com/questions/17255/...
マット・ベックマン

1つの注意-開発にChromeを使用する場合、非標準のトップレベルドメインは検索として解釈されます。実際のドメインルックアップを実行するには、.dev.comなどの操作が必要になる場合があります。これをエレガントに行う方法がわかりません。
bbrame 2011

5
@bbrame:次のURLスキームを使用してローカルドメインを入力できますhttp://foo.dev/。その後、Chromeはそれfoo.devがクエリではなくドメインであることを認識します。

または、dsclツール使用して例外を追加することもできます
Artur Bodera 2013

51

hostsファイル内のドメインのオーバーライドに関して、ある状況では、LionがIPv4ネットワーク経由でドメインに到達できないことを検知すると、LionがドメインのIPv6アドレスを照会することがわかりました。

広告ドメインをにリダイレクトしたため、Snow Leopardでこれまで見たことのない広告に気づいたときに、これを発見しました127.0.0.1。私はwiresharkを起動しAAAA、IPv4 Aクエリ(IPv4)に続く(IPv6 DNSレコード)クエリに気づきました。実際、広告サーバーにはIPv6アドレスがあり、コンテンツを提供することができました。

これに対する解決策は、

::1 mydomain.com

すべてのエントリ

127.0.0.1 mydomain.com

hostsファイルのエントリ。

興味深いことに、ローカルWebサーバーが実行されてい127.0.0.1:80て、ブラウザーがWebサーバーからの応答(エラーなど)を受け取った場合AAAA、少なくともTCP接続が可能であると思われるため、クエリは発行されません。


関連する注意点として、(アドブロッキング、ローカルWeb開発などのために)hostsファイルを頻繁に使用する場合は、独自のローカルDNSリゾルバーの実行を検討することをお勧めします。/etc/hostsリクエストごとに読み取る必要があるため、ディスク/ CPUにかなりの影響が出るので、そのファイルを非常に軽量に保つことが最善の方法です。

dnsmasqローカルでの実行(大幅なパフォーマンスの向上を除く)の利点の1つは、トップレベルドメイン全体をローカルマシンにリダイレクトできることです。これにより、ローカルで解決したいすべてのドメインを個別に入力しなくても、開発用の* .dev名前空間全体(たとえば)を使用できます。/etc/hosts


3
これを本当にありがとう。コードの変更をテストするために10〜30秒待つことは私を夢中にさせ、あなたはこれを自分で理解する必要がないので、私に膨大な時間を節約しました。
ザックアンジェロ

1
私は同じ問題を抱えていました、そしてこれは私の問題をすぐに修正しました!いいね。
cstrat 2012

1
+1これは、「なぜhostsファイルが機能しないのか」を検索する人にとっては素晴らしいヒントです。同じ質問をここに入力して、検索エンジンで見つけやすくするために、ここでその質問をするかもしれません。
cape1232 2014年

読み取りによるディスクI / Oが大幅に増加することはありません/etc/hosts。頻繁に使用される場合、OSはファイルをキャッシュします。
Dan Pritts、2015

LANがIPv6をサポートしているユーザー(結局のところ2016年です!)は、IPv4が完全になくなるまで、またはAppleが問題を見つけて内部で解決するまで、この問題に直面します!Jean-Baptisteの応答も考慮する必要があります(つまり、開発環境では.localではなく.devを使用します)。
他の追随を許さない作成

17

問題は、/ etc / hostsファイルをシンボリックリンクしたことでした。/ etc / hostsがプレーンファイルの場合、すべて問題ありません。


1
私も同じ問題を抱えています。ただし、私の/ etc / hostsファイルは通常のファイルです。これについて何か助けていただければ幸いです。
マット2007

4
これも私の問題のようです。Dropboxフォルダー内のファイルへのシンボリックリンクがありました。これは、以前は機能していて、非常に賢いと思いました。Appleはもはやこの賢い方法を見つけられないように思われる。また、シンボリックリンクから実際のファイルに移動した後、Option-restartを使用して完全に再起動しました。今ではすべてが幸せそうです。
トムS.

2
シンボリックリンクされたホストファイルのエントリは、解決できない場合は問題ありません。これは、シンボリックリンクされたホストファイルは、アドレスを解決できない場合にのみチェックされることを示します。ホストファイルが通常のファイルの場合、他の形式の解決の前にチェックされます。したがって、実際に有効なDNSエントリがあるドメインを上書きする必要がある場合、hostsファイルはシンボリックリンクではなくファイルでなければなりません。
cerberos 2012年

1
記録としては、これはマーベリックス(10.9)でも同じで、誰かがヨセミテの動作を確認できれば役に立ちます…
William Turrell

1
ヨセミテもそれをやっています、ちょうどこの問題に遭遇しました。これは非常に奇妙な動作です。
Vytautas Gimbutas

14

Update(2):OSX 10.10.5はの復帰をもたらしmDNSResponderます。

更新:OSX 10.10 YosemiteはmDNSResponderを「discoveryd」に置き換えました。私はアップグレードしていないので、DNSルックアップとr / tによる検出された動作がわかりません/etc/hosts

LionのシステムDNSリゾルバはmDNSResponderプロセスです。

「mDNSResponderはマルチキャストDNSレスポンダーである」と思っているかもしれません。あなたが正しい; それが最初の目的でしたが、それでもこの機能を果たします。ただし、新しいMacOSバージョンでは、標準のホスト検索も行います。

ライオンでは/etc/hosts、少なくとも常にではなく、変更されたときに自動的に再読み込みされるようには見えません。強制終了するとmDNSResponder(自動的に再起動できるようになります)、問題が解決するようです。

sudo killall mDNSResponder

トリックを行う必要があります。

以下は後世のための私の元の答えです。場合によっては、まだ問題があると思います。

/etc/hostsファイルがUNIX形式のテキストファイルであり、末尾がcrではなく改行になっていることを確認してください。

TextWranglerまたはUNIXテキストエディタで編集すると、ファイルが保持されます。

ファイルがすでにめちゃくちゃになっている場合は、これを試して修正してください

tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts

この修正のクレジット:

http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns


これは、クラッシュしたDNSリゾルバーデーモンの問題を解決する可能性がありますが、開発環境で頻繁に発生するLAN IPアドレスにホストを解決する問題は解決しません。以下の@guns応答は、検索でこの質問を見つけるほとんどの人にとって適切なソリューションです。Jean-Baptiste-MONINにもメリットのある答えがあります。
他の追随を許さないクリエーション2015

/ etc / hostsへの変更が気付かれない問題を解決できます。
Dan Pritts

私は
ハイシエラ

4

しばらくの間、この問題がありました。開発者のチームで働いていたため、.devや.localhostではなく.localを実際に使用する必要が出てきたので、この記事は非常に役に立ちました。

iTand.me-Lionローカルドメインなどのホスト。

要約すれば;

しかし、.localを使用する必要がある場合、私が見つけた最もエレガントなソリューションはdsclユーティリティです。使い方はとても簡単です。mydev.localというホストを追加し、それをlocalhostにポイントするには、次のようにします。

sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1

現在定義されているすべてのホストとそのIPを表示するには

sudo dscl localhost -list /Local/Default/Hosts IPAddress

ホストを削除するには:

sudo dscl localhost -delete /Local/Default/Hosts/mydev.local

全体的に、かなり簡単で、うまく機能します。代わりに/ etc / hostsを編集できるようにしたいのですが、これはすべての.localサーバーの名前を変更する必要があるより良い代替手段です。


3
この方法でホスト名を追加すると、何も実行されないようです。アドレスにpingできません。例:sudoのDSCL localhostの-create /ローカル/デフォルト/ホスト/ test1のたIPAddress 127.0.0.1にping test1のpingを実行:不明なホスト:解決test1にすることはできません
oligofren

3

Snow LeopardからLionに移行する前は/etc/hosts、次のようにいくつかのアプリ固有のエントリがありました。

127.0.0.1 foo.bar.local

アップデート後、ローカルアプリの読み込みに非常に時間がかかりました。リクエストがログファイルに表示される前に遅延が発生していることに気付きました。遅延が発生すると、アプリ自体は通常どおり高速でした。

これで、アプリごとに次のように2行あります。

127.0.0.1 foo.bar.local
::1       foo.bar.local

...そしてすべてが再び速いです。

どうやらこれはIPv6アドレスを追加しますか?よくわかりませんが、うまくいきます。


他には何もうまくいきませんでしたが、これはすぐにうまくいきました-ネイサンに感謝します!
foiseworth 2013

3

私の状況も同様でしたが、遅延がちょうど5秒であったのは、「。local」で終わるURLでのみ発生しました。末尾が「.dev」のサイトを表示しても、遅延はありませんでした。

私のオフィスの他の開発者の何人かはこの問題を抱えていましたが、いくつかはそうではありませんでした。簡単な修正を期待しており、他の依存関係のためにサイトの名前を「.local」に変更したくありませんでした。

ターミナルで次のコマンドを実行して、出力をオフィスの他の数人のユーザーと比較しました。

scutil --dns

このセクションが唯一の違いでした:

resolver #2
  domain   : 00000000.members.btmm.icloud.com
  options  : pdns
  timeout  : 5
  order    : 150000

MacがiCloudアカウントにリンクされていて、Macに戻る機能を有効にしていました。Macに戻る機能を無効にすると、追加のリゾルバがなくなり、5秒の遅延がなくなりました。


1

うわー、なんて悪夢なんだ。私はこの問題についてすべてを読みましたが、これまでに提案されたことはすべて、私が経験しているものに刺激的に近いものでしたが、解決策はどれも私にとってはうまくいきませんでした。

そして、私はその理由を理解しました。

他とは異なり、ローカルドメインのセットアップに/ etc / hostsを使用していませんでした。私の/ etc / hostsファイルはストックで、ループバックインターフェイスとブロードキャストホストに必要なエントリのみが含まれていました。さらに、私はemacsを使用してコマンドラインからのみ編集する人なので、正しくエンコードされたUNIXファイルでした。また、問題を回避するために、DNSmasqのような独自のDNSサーバーを実行する必要はありませんでした。

(明確にするために、この問題に私を連れてきた症状は、emacsが起動するのに約10秒かかったということでしたが、wifiを使用しているときのみです。wifiをオフにした場合、emacsは期待どおりに即座に起動します。)

私の解決策:私のラップトップには「ターミネーター」という名前があります。(はい、その光沢のあるアルミニウムの外見から、アーノルドシュワルツェネッガーのキャラクターが思い浮かびました。)/ etc / hostsに、マシン自体の名前のエントリを追加するだけで済みます。

127.0.0.1   terminator
::1         terminator

ターミナルで簡単なコマンドを実行して、ホストの名前を見つけました。

hostname

...これは「ターミネーター」という出力で戻ってきました。/ etc / hostsをこれらの2つのエントリを含むように変更した後、emacsは私のラップトップの名前をすばやく解決できるようになりました。

これが誰かの役に立つことを願っています。


1
これはちょうど今私のために働いたようです。これが成立するかどうかを確認します。私はこの問題が警告なしで断続的に発生するのを断続的に見てきたので、あなたはこれを理解したと怒っています。
ジェレミーカールソン

シュート。これは私にとって恒久的な解決策ではありません。戻る問題。心に留めて、私がこれを再読したとき、私の問題はあなたのものではありません...
ジェレミー・カールソン

0

OSX LionをWeb開発ボックスとして使用すると速度の問題が発生しました... ipv6ネットワーキングを無効にし、ipv6をlocalhost6にルーティングするという手段を組み合わせて使用​​した場合...かなりスピードアップしました...

sudo networksetup -setv6off Ethernet

/ etc / hosts ...

127.0.0.1    localhost
127.0.0.1    dev.aliasdomain.com
... 
::1          localhost6 

0

いくつかのバグ修正があったと思います。多くの問題が言及されているのを見てきましたが、現在これらの問題はどれも当てはまらないようです(たとえば、1行に複数のエイリアスを配置しても問題なく動作します)。

とにかく、AppleはLionを使用して、すべてのDNSルックアップを処理するmDNSResponderに大幅な変更を加え、(少なくともLionを使用して)/ etc / hostsキャッシュも処理しているようです。私にとっては、前方参照も機能するようになりました。ただし、逆検索(たとえば、google.comの代わりに1.2.3.4を検索する)は機能しません。

多くの苦痛の後、mDNSResponderがこのルックアップを4.3.2.1.in-addr.arpaに変換し、名前のルックアップを行うように見えます。これはDNSの動作を好む方法である可能性がありますが、/ etc / hostsではまったく機能しません。

もちろん、ホストごとに4.3.2.1.in-addr.arpaのエイリアスを追加しない限り、4.3.2.1は、表示に使用される順序とは逆の順序のIPアドレスです。これですべてが修正されます。次に/ etc / hostsエントリの例を示します。

1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa

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