Pesanan pencarian DNS Mac OSX Lion [ditutup]


96

Setelah memutakhirkan ke Mac OSX Lion, saya menemukan bahwa / etc / hosts tidak lagi dicari untuk resolusi nama. Hal ini menyebabkan beberapa efek samping seperti:

  1. Entri di / etc / hosts diselesaikan dengan sangat lambat
  2. Anda tidak dapat tidak menimpa domain yang ada, misalnya 127.0.0.1 www.google.com
  3. Jika Anda mendapatkan entri domain pencarian dari DHCP, katakanlah .lan, dan beberapa orang lucu mengkonfigurasi localhost.lan ke sesuatu yang lain maka 127.0.0.1 di DNS lokal Anda tidak dapat menjangkau localhost Anda lagi.

Apakah perilaku ini disengaja? Apakah itu masuk akal? Dan yang paling penting, bagaimana saya bisa kembali ke perilaku lama.


12
Pertanyaan yang sangat membantu - kejutan, kejutan yang ditutup sebagai topik
Sebastian Patten

Setidaknya mereka belum menghapus utasnya .. Ini menyelamatkan daging saya. Saya mengubah semua host saya dari X.local ke X.lhost dan masalah hilang. Di samping catatan, saya penggemar berat xip.io misalnya foo.127.0.0.1.xip.io
Tim

Jawaban:


78

Saya pikir masalahnya adalah Lion menangani. TLD lokal berbeda karena dicadangkan untuk beberapa fitur DNS Multicast (digunakan oleh Bonjour). Satu-satunya cara yang saya temukan untuk memecahkan masalah ini adalah menggunakan TLD yang berbeda untuk host pengembangan (yaitu: .dev). Ini berfungsi dengan baik untuk saya, semoga bermanfaat bagi orang lain!


Terima kasih. Memang sangat membantu.
Cade

5
Pikiran pertama saya adalah "lumpuh". Namun, kemudian saya tersandung pada pos tumpukan lain ini dan mengubah pendirian saya: serverfault.com/questions/17255/…
Matt Beckman

Satu catatan - jika Anda menggunakan chrome untuk pengembangan, domain tingkat atas non-standar akan ditafsirkan sebagai penelusuran. Anda mungkin perlu melakukan sesuatu seperti .dev.com untuk membuatnya melakukan pencarian domain yang sebenarnya. Saya tidak yakin bagaimana melakukan ini dengan elegan.
bbrame

5
@bbrame: Anda dapat memasukkan domain lokal Anda dengan skema url: http://foo.dev/; Setelah itu, Chrome akan menyadari bahwa itu foo.devadalah domain, bukan kueri.
senjata

Atau Anda dapat menggunakan alat dscl untuk menambahkan pengecualian.
Artur Bodera

51

Berkenaan dengan menimpa domain di file host, saya telah menemukan bahwa dalam beberapa keadaan, Lion menanyakan alamat IPv6 untuk domain jika ia merasakan bahwa domain tidak dapat dijangkau melalui jaringan IPv4.

Saya menemukan ini ketika saya melihat beberapa iklan yang belum pernah saya lihat sebelumnya di Snow Leopard karena saya telah mengalihkan domain iklan ke 127.0.0.1. Saya menjalankan wireshark dan melihat kueri ( AAAAdata DNS IPv6) yang mengikuti Akueri IPv4 (IPv4). Server iklan memang memiliki tambahan IPv6 dan dapat menyajikan saya konten mereka.

Solusi untuk ini adalah memiliki a

::1 mydomain.com

entri untuk setiap

127.0.0.1 mydomain.com

entri di file host Anda.

Menariknya, jika Anda kebetulan memiliki server web lokal yang berjalan 127.0.0.1:80dan browser Anda menerima respons dari server web (kesalahan atau sebaliknya), tidak ada AAAAkueri yang dikeluarkan, karena tampaknya dapat dipastikan bahwa koneksi TCP paling tidak memungkinkan.


Pada catatan terkait, jika Anda banyak menggunakan file host (untuk adblocking, pengembangan web lokal, dll), Anda mungkin ingin melihat untuk menjalankan resolver DNS lokal Anda sendiri. Ada banyak masalah pada disk / CPU yang harus membaca /etc/hostssetiap permintaan, jadi sebaiknya Anda menyimpan file tersebut dengan sangat ringan.

Satu keuntungan menjalankan sesuatu seperti dnsmasqsecara lokal (selain peningkatan kinerja yang signifikan) adalah Anda dapat mengarahkan kembali seluruh domain tingkat atas ke mesin lokal Anda. Ini memungkinkan Anda memiliki seluruh namespace * .dev untuk pengembangan (misalnya), tanpa harus memasukkan setiap domain yang ingin Anda selesaikan secara lokal./etc/hosts


3
Terima kasih banyak untuk ini. Menunggu 10-30 detik untuk menguji perubahan pada kode saya membuat saya gila dan Anda menghemat banyak waktu dengan tidak harus memikirkannya sendiri.
Zack Angelo

1
Saya memiliki masalah yang sama, dan ini segera memperbaiki masalah saya! Bagus.
cstrat

1
+1 Ini adalah berita menarik yang bagus untuk siapa pun yang mencari "mengapa file host saya tidak berfungsi". Saya dapat mengajukan pertanyaan itu di sini agar Anda dapat meletakkan jawaban yang sama di sana dan membuatnya lebih mudah untuk ditemukan melalui mesin pencari!
cape1232

Seharusnya tidak ada peningkatan yang berarti dalam I / O disk dari pembacaan /etc/hosts- OS akan menyimpan file dalam cache jika sering digunakan.
Dan Pritts

Pengguna yang LAN mendukung IPv6 (ini hampir 2016, setelah semua!) Akan menghadapi masalah ini mulai sekarang sampai IPv4 benar-benar hilang .... atau sampai Apple mengambil masalah dan menyelesaikannya secara internal! Tanggapan Jean-Baptiste juga harus dipertimbangkan (yaitu, gunakan .dev daripada .local untuk lingkungan dev Anda).
tak tertandingi

17

Masalahnya adalah saya menghubungkan file / etc / hosts. Jika / etc / hosts adalah file biasa, semuanya baik-baik saja.


1
Saya mempunyai masalah yang sama. Namun, file / etc / hosts saya adalah file biasa. Bantuan apa pun tentang ini akan dihargai.
matt

4
Ini tampaknya juga menjadi masalah saya. Saya memiliki symlink ke file di folder dropbox saya, yang dulu berfungsi dan yang menurut saya sangat pintar. Tampaknya Apple tidak lagi menganggap pintar ini. Saya juga melakukan restart nyata penuh menggunakan Option-restart setelah memindahkannya dari symlink ke file asli. Segalanya tampak bahagia sekarang.
Tom S.

2
Entri dalam file host symlink tidak masalah jika tidak dapat diselesaikan, ini menunjukkan bahwa file host yang terhubung hanya diperiksa ketika alamat tidak dapat diselesaikan. Ketika file host adalah file normal, itu diperiksa sebelum bentuk resolusi lainnya. Jadi, jika Anda perlu menimpa domain yang sebenarnya memiliki entri DNS yang valid, file host Anda harus berupa file dan bukan symlink.
cerberos

1
Sebagai catatan, hal ini masih terjadi di Mavericks (10.9), akan berguna jika seseorang dapat mengkonfirmasi apa yang dilakukan Yosemite…
William Turrell

1
Yosemite juga melakukannya, baru saja mengalami masalah ini. Ini adalah perilaku yang sangat aneh.
Vytautas Gimbutas

14

Pembaruan (2): OSX 10.10.5 menghadirkan kembalinya mDNSResponder.

Pembaruan: OSX 10.10 Yosemite telah menggantikan mDNSResponder dengan "discoveryd". Saya belum mengupgrade jadi saya tidak yakin dengan perilaku discoveryd w / r / t DNS lookup dan /etc/hosts.

Penyelesai DNS sistem di Lion adalah mDNSResponderprosesnya.

Anda mungkin berpikir "tetapi mDNSResponder adalah penjawab dns multicast." Kamu benar; untuk itulah awalnya, dan masih memenuhi fungsi ini. Namun, pada versi MacOS yang lebih baru, ia juga melakukan pencarian host standar.

Di Lion, tampaknya tidak otomatis dibaca ulang /etc/hostssaat berubah, setidaknya tidak selalu. Membunuh mDNSResponder(dan membiarkannya dimulai ulang secara otomatis) tampaknya memperbaiki masalah.

sudo killall mDNSResponder

harus melakukan triknya.

di bawah ini adalah jawaban asli saya untuk anak cucu. Saya kira itu mungkin masih menjadi masalah dalam beberapa kasus.

Pastikan /etc/hostsfile Anda adalah file teks gaya unix, dengan linefeeds sebagai akhiran daripada cr.

Mengedit dengan TextWrangler atau editor teks unix akan mempertahankan file tersebut.

Jika file Anda sudah kacau, coba ini untuk memperbaikinya

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

kredit untuk perbaikan ini untuk:

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


Ini mungkin menyelesaikan masalah dengan daemon resolver DNS yang rusak, tetapi tidak menyelesaikan masalah penyelesaian host ke alamat IP LAN yang sering ditemui di lingkungan dev. Tanggapan @guns, di bawah, akan menjadi solusi yang tepat bagi kebanyakan orang yang menemukan pertanyaan ini dalam penelusuran; meskipun Jean-Baptiste-MONIN memiliki jawaban yang bermanfaat juga.
tak tertandingi

Ini dapat memecahkan masalah perubahan pada / etc / hosts yang tidak diperhatikan.
Dan Pritt

Saya menggunakan sierra tinggi dan jawaban ini menyelesaikan masalah alias, terima kasih
Absolutkarlos

4

Saya mengalami masalah ini untuk sementara waktu, karena saya sedang bekerja dengan tim pengembang menjadi perlu untuk benar-benar menggunakan .local daripada .dev atau .localhost, saya menemukan artikel ini sangat berguna.

iTand.me - domain lokal Lion dan host dll ..

Singkatnya;

Tetapi jika Anda harus menggunakan .local, solusi paling elegan yang saya temukan adalah utilitas dscl. Menggunakannya sangat mudah. Untuk menambahkan host bernama mydev.local dan mengarahkannya ke localhost, lakukan ini:

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

Untuk melihat semua host yang saat ini ditentukan dan IP-nya

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

Dan untuk menghapus host:

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

Secara keseluruhan, cukup mudah dan berfungsi dengan baik. Saya masih lebih suka mengedit / etc / hosts, tetapi ini adalah alternatif yang lebih baik daripada harus mengganti nama semua server .local kami.


3
Saat menambahkan nama host dengan cara ini, tampaknya tidak melakukan apa-apa. Tidak dapat melakukan ping ke alamat. Contoh: sudo dscl localhost -create / Local / Default / Hosts / test1 IPAddress 127.0.0.1 ping test1 ping: tidak dapat menyelesaikan test1: Host tidak dikenal
oligofren

3

Sebelum pindah dari Snow Leopard ke Lion, saya memiliki beberapa entri khusus aplikasi /etc/hosts, seperti ini:

127.0.0.1 foo.bar.local

Setelah pembaruan, memuat aplikasi lokal saya SANGAT lambat. Saya perhatikan bahwa penundaan terjadi sebelum permintaan muncul di file log, dan setelah itu terjadi, aplikasi itu sendiri secepat biasanya.

Sekarang saya memiliki dua baris per aplikasi, seperti ini:

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

... dan semuanya cepat lagi.

Ternyata ini menambahkan alamat IPv6? Saya tidak begitu mengerti, sungguh, tapi berhasil.


Tidak ada hal lain yang berhasil untuk saya tetapi ini berhasil dalam sekejap - terima kasih Nathan!
mulai

3

Situasi saya serupa, tetapi penundaan, tepat 5 detik, hanya terjadi untuk URL yang diakhiri dengan '.local'. Saat melihat situs yang berakhiran '.dev', tidak ada penundaan.

Beberapa pengembang lain di kantor saya mengalami masalah ini, sementara beberapa tidak. Saya berharap untuk perbaikan sederhana dan saya tidak ingin mengganti nama situs menjadi '.local' karena ketergantungan lainnya.

Saya menjalankan perintah berikut di Terminal dan membagi hasil saya dengan beberapa pengguna lain di kantor.

scutil --dns

Bagian ini adalah satu-satunya perbedaan:

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

Mac saya ditautkan ke akun iCloud saya dan saya mengaktifkan Kembali ke Mac Saya. Setelah saya menonaktifkan Kembali ke Mac Saya, resolver tambahan menghilang dan penundaan 5 detik menghilang.


1

Wow, sungguh mimpi buruk. Saya telah membaca sepenuhnya semua tentang subjek ini dan semua yang telah disarankan sejauh ini sangat mirip dengan apa yang saya alami, tetapi tidak ada solusi yang berhasil untuk saya.

Dan saya menemukan alasannya.

Tidak seperti yang lain, saya tidak menggunakan / etc / hosts untuk mengatur domain lokal. File / etc / hosts saya adalah stok, hanya berisi entri yang diperlukan untuk antarmuka loopback dan host siaran. Selain itu, itu adalah file unix yang dikodekan dengan benar, karena saya adalah tipe orang yang hanya akan mengeditnya dari baris perintah menggunakan emacs. Dan, syukurlah, saya tidak perlu menjalankan server DNS saya sendiri seperti DNSmasq untuk mengatasi masalah tersebut.

(Untuk lebih jelasnya, gejala yang membawa saya ke masalah ini adalah bahwa emacs membutuhkan waktu sekitar 10 detik untuk memulai, tetapi hanya ketika saya menggunakan wifi. Jika saya mematikan wifi, emacs akan mulai seketika seperti yang diharapkan.)

Solusi saya: laptop saya memiliki nama, "terminator". (Ya, eksterior aluminiumnya yang mengilap membuat saya memikirkan karakter Arnold Schwarzenegger.) Saya hanya perlu menambahkan entri ke / etc / hosts untuk nama mesin itu sendiri:

127.0.0.1   terminator
::1         terminator

Saya menemukan nama host saya dengan menjalankan perintah sederhana di terminal:

hostname

... yang kembali dengan output: "terminator". Setelah mengubah / etc / hosts agar memuat dua entri tersebut, emacs sekarang dapat dengan cepat menyelesaikan nama laptop saya.

Saya harap ini membantu seseorang.


1
ini sepertinya berhasil untuk saya sekarang. Kami akan melihat apakah ini berlaku. Saya TERHEBAT Anda tahu ini, karena saya sesekali melihat masalah ini muncul tanpa peringatan.
Jeremy Carlson

Menembak. Ini bukan resolusi permanen bagi saya. Masalah kembali. Ingat, saat saya membaca ulang ini, masalah saya bukan milik Anda ...
Jeremy Carlson

0

Saya mengalami masalah kecepatan menggunakan OSX Lion sebagai kotak pengembangan web ... Menggunakan kombinasi saran, saya terpaksa menonaktifkan jaringan ipv6 dan merutekan ipv6 ke localhost6 ... semuanya dipercepat ...

sudo networksetup -setv6off Ethernet

/ etc / hosts ...

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

0

Saya pikir ada beberapa perbaikan bug. Saya telah melihat banyak masalah yang disebutkan, dan tidak satu pun dari ini yang tampaknya berlaku saat ini (misalnya, menempatkan beberapa alias pada satu baris sekarang berfungsi dengan baik untuk saya).

Bagaimanapun, tampaknya dengan Lion, Apple membuat beberapa perubahan drastis pada mDNSResponder yang menangani semua pencarian DNS, dan (setidaknya dengan Lion) juga menangani / etc / hosts cacheing. Bagi saya, pencarian ke depan juga sekarang berfungsi. Tetapi pencarian terbalik (misalnya mencari 1.2.3.4 sebagai ganti google.com) tidak berfungsi.

Setelah banyak kesulitan, sepertinya mDNSResponder mengubah pencarian ini menjadi 4.3.2.1.in-addr.arpa dan melakukan pencarian nama. Ini mungkin cara DNS lebih suka beroperasi, tetapi tidak berfungsi sama sekali dengan / etc / hosts.

Kecuali tentu saja Anda menambahkan alias 4.3.2.1.in-addr.arpa untuk setiap host, di mana 4.3.2.1 adalah alamat ip dengan urutan berlawanan dari yang biasa Anda lihat. Ini memperbaiki segalanya untuk saya. Berikut adalah contoh entri / etc / hosts:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.