Mac OSX Lionにアップグレードした後、名前解決のために/ etc/hostsが最初に検索されないことがわかりました。これにより、次のような副作用が発生します。
この動作は意図されていますか?それは理にかなっていますか?そして最も重要なことは、どうすれば古い行動に戻ることができるかです。
Lionが.local TLDを異なる方法で処理するのは、いくつかのマルチキャストDNS機能(Bonjourで使用)のために予約されているためだと思います。この問題を解決するために私が見つけた唯一の方法は、開発ホストに異なるTLDを使用することです(例:.dev)。私にとってはうまくいきます。他の人に役立つことを願っています!
ホストファイル内のドメインの上書きに関して、状況によっては、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名前空間全体を(たとえば)持つことができます。
問題は、/ etc/hostsファイルをシンボリックリンクしたことです。/etc/hostsがプレーンファイルの場合は、すべて問題ありません。
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
私はしばらくの間この問題を抱えていました。開発チームで働いていると、実際には.devまたは.localhostではなく.localを使用する必要が生じたため、この記事は非常に有用であることがわかりました。
要約すれば;
ただし、.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サーバーの名前を変更するよりも良い方法です。
私の状況は似ていましたが、正確に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秒の遅延がなくなりました。
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アドレスを追加しますか?よくわかりませんが、うまくいきます。
うわー、なんて悪夢だ。私はこの主題に関するすべてを絶対に読んでおり、これまでに提案されたものはすべて、私が経験しているものに満足のいくものでしたが、解決策はありませんでした。
そして、その理由を見つけました。
他とは異なり、ローカルドメインのセットアップに/ 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はラップトップの名前をすぐに解決できるようになります。
これが誰かの助けになることを願っています。
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
いくつかのバグ修正があったと思います。言及された多くの問題を見てきましたが、現在これらのどれも当てはまらないようです(たとえば、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