web-dev-qa-db-ja.com

Mac OSX Lion DNSルックアップ順序

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

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

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

96
Meik

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

78

ホストファイル内のドメインの上書きに関して、状況によっては、IPv4ネットワークを介してドメインに到達できないと感じると、LionはそのドメインのIPv6アドレスを照会することがわかりました。

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

これに対する解決策は

::1 mydomain.com

すべてのエントリ

127.0.0.1 mydomain.com

ホストファイルのエントリ。

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


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

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

50
guns

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

17
Meik

Update(2):OSX 10.10.5はmDNSResponderを返します。

更新:OSX 10.10 YosemiteはmDNSResponderを「discoveryd」に置き換えました。アップグレードしていないので、DNSルックアップと/etc/hosts

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

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

Lionでは、自動的に再読み取りされるようには見えません/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

14
Dan Pritts

私はしばらくの間この問題を抱えていました。開発チームで働いていると、実際には.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サーバーの名前を変更するよりも良い方法です。

4
Opentuned

私の状況は似ていましたが、正確に5秒の遅延は、「。local」で終わるURLでのみ発生しました。 「.dev」で終了するサイトを表示するとき、遅延はありませんでした。

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

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

scutil --dns

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

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

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

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アドレスを追加しますか?よくわかりませんが、うまくいきます。

3
Nathan Long

うわー、なんて悪夢だ。私はこの主題に関するすべてを絶対に読んでおり、これまでに提案されたものはすべて、私が経験しているものに満足のいくものでしたが、解決策はありませんでした。

そして、その理由を見つけました。

他とは異なり、ローカルドメインのセットアップに/ 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
pohl

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
Eddie B

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

とにかく、Lionでは、Appleはすべての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

0
thomasafine