Mac OSX Lion DNS arama sırası [kapalı]


96

Mac OSX Lion'a yükselttikten sonra, / etc / hosts dosyasının artık ad çözümlemesi için ilk sırada aranmadığını anladım. Bu, aşağıdaki gibi bazı yan etkilere yol açar:

  1. / Etc / hosts dosyasındaki girişler çok yavaş çözüldü
  2. Mevcut alanları geçersiz kılamazsınız, ör. 127.0.0.1 www.google.com
  3. DHCP'den arama etki alanı girişleri alırsanız, diyelim.

Bu davranış kasıtlı mı? Bir anlam ifade ediyor mu? Ve en önemlisi, eski davranışa nasıl geri dönebilirim.


12
Süper faydalı soru - sürpriz, konu dışı olması sürpriz
Sebastian Patten

En azından konuyu silmediler .. henüz. Bu benim pastırmamı kurtardı. Tüm ana bilgisayarlarımı X.local'den X.lhost'a değiştirdim ve sorun ortadan kalktı. Bir yandan not olarak, xip.io'nun büyük bir hayranıyım örn. Foo.127.0.0.1.xip.io
Tim

Yanıtlar:


78

Lion'un .local TLD'yi farklı şekilde ele almasının önemli olduğunu düşünüyorum çünkü bazı Çok Noktaya Yayın DNS özellikleri (Bonjour tarafından kullanılan) için ayrılmıştır. Bu sorunu çözmenin tek yolu, geliştirme ana bilgisayarları için farklı bir TLD kullanmaktır (yani: .dev). Benim için iyi çalışıyor, umarım başkalarına yardımcı olur!


Teşekkür ederim. Gerçekten çok yardımcı oldu.
Cade

5
İlk düşüncem "topal" oldu. Ancak, daha sonra bu diğer yığın gönderisine rastladım ve duruşumu değiştirdim: serverfault.com/questions/17255/…
Matt Beckman

Bir not - geliştirme için Chrome kullanıyorsanız, standart olmayan üst düzey etki alanları arama olarak yorumlanacaktır. Gerçek bir alan adı araması yapması için .dev.com gibi bir şey yapmanız gerekebilir. Bunu zarif bir şekilde nasıl yapacağımdan emin değilim.
bbrame

5
@brame: Yerel etki alanınızı url şeması ile girebilirsiniz http://foo.dev/:; Bundan sonra, Chrome foo.devbunun bir sorgu değil bir alan olduğunu anlayacaktır .
guns

Alternatif olarak, bir istisna eklemek için dscl aracını kullanabilirsiniz .
Artur Bodera

51

Ana bilgisayar dosyasındaki etki alanlarını geçersiz kılma konusunda, bazı durumlarda Lion'un, bir etki alanının IPv4 ağı üzerinden erişilemez olduğunu algılarsa, bir etki alanı için IPv6 adresini sorguladığını buldum.

Bunu, Snow Leopard'da daha önce hiç görmediğim bazı reklamları fark ettiğimde keşfettim çünkü reklam alanlarını yönlendirmiştim 127.0.0.1. Wireshark'ı başlattım ve AAAAIPv4 Asorgularını (IPv4) takiben (IPv6 DNS kayıtları) sorguları fark ettim . Reklam sunucularının gerçekten IPv6 adresleri var ve içeriklerini bana sunabildiler.

Bunun çözümü bir

::1 mydomain.com

her biri için giriş

127.0.0.1 mydomain.com

ana bilgisayar dosyanıza giriş.

İlginç bir şekilde, yerel bir web sunucunuz çalışırsa 127.0.0.1:80ve tarayıcınız web sunucusundan bir yanıt alırsa (hata veya başka türlü), AAAAbir TCP bağlantısının en azından mümkün olduğu konusunda tatmin olmuş göründüğü için hiçbir sorgu gönderilmez.


İlgili bir notta, ana bilgisayar dosyasını yoğun bir şekilde kullanırsanız (reklam engelleme, yerel web geliştirme, vb. İçin), kendi yerel DNS çözümleyicinizi çalıştırmayı düşünebilirsiniz. /etc/hostsHer istek üzerine okuma zorunluluğundan kayda değer bir disk / CPU darbesi var , bu nedenle bu dosyayı çok hafif tutmak sizin yararınıza olacaktır.

dnsmasqYerel olarak çalıştırmanın bir avantajı ( önemli performans artışının yanı sıra), tüm üst düzey etki alanlarını yerel makinenize geri yönlendirebilmenizdir. Bu, yerel olarak çözümlenmesini istediğiniz her alanı ayrı ayrı girmek zorunda kalmadan geliştirme için * .dev ad alanının tamamına sahip olmanızı sağlar (örneğin)/etc/hosts


3
Bunun için çok teşekkürler. Kodumdaki değişiklikleri test etmek için 10-30 saniye beklemek beni çılgına çeviriyordu ve bunu kendi başıma çözmek zorunda kalmayarak bana bir ton zaman kazandırdın.
Zack Angelo

1
Aynı sorunu yaşadım ve bu sorunumu hemen çözdü! Güzel.
cstrat

1
+1 Bu, "ana bilgisayarlarım dosyası neden çalışmıyor" diye arama yapan herkes için harika bir haber. Bu soruyu burada sorabilirim, böylece aynı cevabı oraya koyabilir ve bir arama motoru aracılığıyla bulmayı kolaylaştırabilirsiniz!
cape1232

Okuma sırasında disk G / Ç'sinde kayda değer bir artış olmamalıdır /etc/hosts- işletim sistemi, sık kullanılıyorsa dosyayı önbelleğe alır.
Dan Pritts

LAN'ları IPv6'yı destekleyen kullanıcılar (sonuçta neredeyse 2016!), IPv4 tamamen ortadan kalkıncaya kadar bu sorunla karşılaşacaklar .... ya da Apple sorunu çözüp dahili olarak çözene kadar! Jean-Baptiste'in yanıtı da dikkate alınmalıdır (yani, geliştirme ortamlarınız için .local yerine .dev kullanın).
unrivaledcreations

17

Sorun, / etc / hosts dosyasını sembolik linklememdi. / Etc / hosts düz bir dosyaysa her şey yolunda demektir.


1
Bendede aynı sorun var. Ancak, / etc / hosts dosyam normal bir dosyadır. Bununla ilgili herhangi bir yardım memnuniyetle karşılanacaktır.
matt

4
Bu benim de sorunum gibi görünüyor. Dropbox klasörümdeki bir dosyaya, eskiden işe yarayan ve çok akıllıca olduğunu düşündüğüm bir sembolik linkim vardı. Görünüşe göre Apple artık bunu akıllı bulmuyor. Ayrıca bir symlink'ten gerçek bir dosyaya taşıdıktan sonra Option-restart kullanarak tam bir gerçek yeniden başlatma yaptım. Artık her şey mutlu görünüyor.
Tom S.

2
Sembolik bağlantılı bir anasistemler dosyasındaki girişler, başka türlü çözülemiyorlarsa uygundur, bu, sembolik bağlantılı bir anasistem dosyasının yalnızca bir adres başka türlü çözümlenemediğinde kontrol edildiğini gösterir. Hosts dosyası normal bir dosya olduğunda, başka herhangi bir çözümlemeden önce kontrol edilir. Dolayısıyla, gerçekte geçerli DNS girişlerine sahip etki alanlarını geçersiz kılmanız gerekiyorsa, ana bilgisayar dosyanız bir sembolik bağlantı değil, bir dosya olmalıdır.
cerberos

1
Kayıt için, Mavericks'teki (10.9) durum hala böyledir, birisi Yosemite'in ne yaptığını doğrulayabilirse faydalı olacaktır ...
William Turrell

1
Yosemite de bunu yapıyor, az önce bu problemle karşılaştı. Bu son derece garip bir davranış.
Vytautas Gimbutas

14

Güncelleme (2): OSX 10.10.5'in geri dönüşünü getiriyor mDNSResponder.

Güncelleme: OSX 10.10 Yosemite, mDNSResponder'ı "findyd" ile değiştirdi. Yükseltme yapmadığım için DNS aramaları ile keşif davranışından emin değilim ve /etc/hosts.

Lion'daki sistem DNS çözümleyicisi mDNSRespondersüreçtir.

"Ama mDNSResponder çok noktaya yayın dns yanıtlayıcısıdır" diye düşünüyor olabilirsiniz. Haklısın; başlangıçta bunun içindi ve hala bu işlevi yerine getiriyor. Ancak, daha yeni MacOS sürümlerinde standart ana bilgisayar aramaları da yapar.

Lion'da, /etc/hostsen azından her zaman değil, değiştiğinde otomatik olarak yeniden okunuyor gibi görünmüyor . Öldürmek mDNSResponder(ve otomatik olarak yeniden başlatılmasına izin vermek) sorunu çözüyor gibi görünüyor.

sudo killall mDNSResponder

hile yapmalı.

Gelecek nesiller için orijinal cevabım aşağıdadır. Sanırım bazı durumlarda hala bir sorun olabilir.

/etc/hostsDosyanızın, cr'ler yerine satır beslemeleri olan bir unix tarzı metin dosyası olduğundan emin olun .

TextWrangler veya bir unix metin düzenleyicisi ile düzenleme, dosyayı korumalıdır.

Dosyanız zaten bozulmuşsa, düzeltmek için bunu deneyin

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

bu düzeltmenin kredisi:

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


Bu, çökmüş bir DNS çözümleyici arka plan programı ile ilgili bir sorunu çözebilir, ancak ana bilgisayarları geliştirme ortamlarında sıklıkla karşılaşılan LAN IP adreslerine çözümleme sorununu çözmez. Aşağıdaki @guns yanıtı, aramalarda bu soruyu bulan çoğu kişi için doğru çözüm olacaktır; Jean-Baptiste-MONIN'in de faziletli bir cevabı var.
unrivaledcreations

/ Etc / hosts dosyasındaki değişikliklerin fark edilmemesi sorununu çözebilir.
Dan Pritts

High Sierra kullanıyorum ve bu cevap takma ad sorununu
çözüyor

4

Bir süredir bu sorunu yaşadım, geliştiricilerden oluşan bir ekipte çalışırken .dev veya .localhost yerine .local kullanmak gerekli hale geldiğinden, bu makaleyi çok faydalı buldum.

iTand.me - Lion yerel etki alanları ve vb barındırıcılar ..

Özetle;

Ancak .local kullanmanız gerekiyorsa, bulduğum en zarif çözüm dscl yardımcı programıdır. Bunu kullanmak çok basittir. Mydev.local adında bir ana bilgisayar eklemek ve onu localhost'a yönlendirmek için şunu yapın:

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

Şu anda tanımlanmış tüm ana bilgisayarları ve IP'lerini görmek için

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

Ve bir ana bilgisayarı kaldırmak için:

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

Genel olarak, oldukça basit ve iyi çalışıyor. Yine de / etc / hosts dosyasını düzenlemeyi tercih ederim, ancak bu, tüm .local sunucularımızı yeniden adlandırmak zorunda kalmaya daha iyi bir alternatiftir.


3
Bu şekilde bir ana bilgisayar adı eklerken, görünüşe göre hiçbir şey yapmıyor. Adrese ping atılamıyor. Örnek: sudo dscl localhost -create / Local / Default / Hosts / test1 IPAddress 127.0.0.1 ping test1 ping: çözümlenemiyor test1: Bilinmeyen ana bilgisayar
oligofren

3

Snow Leopard'dan Lion'a geçmeden önce /etc/hosts, şunun gibi birkaç uygulamaya özel giriş yaptım :

127.0.0.1 foo.bar.local

Güncellemeden sonra yerel uygulamalarımın yüklenmesi ÇOK yavaştı. Gecikmenin, istek günlük dosyasında görünmeden önce gerçekleştiğini ve bir kez gerçekleştiğinde uygulamanın kendisinin her zamanki kadar hızlı olduğunu fark ettim.

Artık uygulama başına iki satırım var, şöyle:

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

... ve her şey yeniden hızlı.

Görünüşe göre bu IPv6 adreslerini ekliyor? Pek anlamıyorum, gerçekten, ama işe yarıyor.


Benim için başka hiçbir şey işe yaramadı ama bu bir anda oldu - teşekkürler Nathan!
foiseworth

3

Durumum benzerdi, ancak tam 5 saniyelik gecikmeler yalnızca ".local" ile biten URL'ler için oldu. '.Dev' ile biten siteleri görüntülerken gecikme olmadı.

Ofisimdeki diğer geliştiricilerin bazıları bu sorunu yaşarken, birkaçı yoktu. Basit bir düzeltme umuyordum ve diğer bağımlılıklar nedeniyle siteyi ".local" olarak yeniden adlandırmak istemedim.

Aşağıdaki komutu Terminal'de çalıştırdım ve çıktımı ofisteki diğer birkaç kullanıcıyla değiştirdim.

scutil --dns

Bu bölüm tek farktı:

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

Mac'im iCloud hesabıma bağlıydı ve Mac'ime Dön özelliğini etkinleştirmiştim. Mac'ime Dön'ü devre dışı bıraktıktan sonra, ek çözümleyici gitti ve 5 saniyelik gecikme ortadan kalktı.


1

Vay be, ne kabus. Bu konuyla ilgili kesinlikle her şeyi okudum ve şimdiye kadar önerilen her şey yaşadıklarıma çok yakındı, ancak çözümlerin hiçbiri benim için işe yaramadı.

Ve nedenini anladım.

Diğerlerinden farklı olarak, yerel etki alanlarını ayarlamak için / etc / hosts kullanmıyordum. / Etc / hosts dosyam yalnızca geridöngü arabirimi ve yayın ana bilgisayarı için gereken girişleri içeren stoktu. Dahası, ben bunu yalnızca emacs kullanarak komut satırından düzenleyebilecek türden bir insan olduğumdan, doğru kodlanmış bir unix dosyasıydı. Ve çok şükür, sorunu aşmak için DNSmasq gibi kendi DNS sunucumu çalıştırmak zorunda değildim.

(Açık olmak gerekirse, beni bu soruna getiren belirti, emacs'ın başlamasının yaklaşık 10 saniye sürmesiydi, ancak yalnızca wifi açıkken. Wifi'yi kapatırsam, emacs beklendiği gibi anında başlayacaktı.)

Çözümüm: dizüstü bilgisayarımın bir adı var, "sonlandırıcı". (Evet, parlak alüminyum dış yüzeyi bana Arnold Schwarzenegger karakterini hatırlattı.) Sadece makinenin adı için / etc / hosts dosyasına girişler eklemem gerekiyordu:

127.0.0.1   terminator
::1         terminator

Ana makinemin adını terminalde basit bir komut çalıştırarak buldum:

hostname

... çıktıyla geri gelen: "sonlandırıcı". / Etc / hosts dosyasını bu iki girişi içerecek şekilde değiştirdikten sonra, emacs artık dizüstü bilgisayarımın adını hızla çözebilir.

Umarım bu birine yardımcı olur.


1
bu şimdi benim için işe yaradı gibi görünüyor. Bunun geçerli olup olmadığını göreceğiz. Bunu çözdüğünüz için TEŞEKKÜR EDİYORUM, çünkü aralıklı olarak bu sorunun uyarı olmadan ortaya çıktığını gördüm.
Jeremy Carlson

Ateş etmek. Bu benim için kalıcı bir çözüm değil. Geri sorun. Unutmayın, bunu tekrar okurken benim sorunum sizin değil ...
Jeremy Carlson

0

OSX Lion'ı bir web geliştirme kutusu olarak kullanırken hız sorunları yaşadım ... Bir öneri kombinasyonunu kullanarak ipv6 ağını devre dışı bırakmaya ve ipv6'yı localhost6'ya yönlendirmeye başvurdum ... işler biraz hızlandı ...

sudo networksetup -setv6off Ethernet

/ etc / hosts ...

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

0

Sanırım bazı hata düzeltmeleri yapıldı. Bahsedilen birçok problem gördüm ve bunların hiçbiri şu anda geçerli görünmüyor (örneğin, tek bir satıra birden fazla takma ad koymak artık benim için iyi çalışıyor).

Her halükarda, Apple'ın Lion ile mDNSResponder'da tüm DNS aramalarını yöneten ve (en azından Lion ile) aynı zamanda / etc / hosts önbelleğini de işleyen bazı ciddi değişiklikler yaptığı görülüyor. Benim için ileriye dönük aramalar da artık işe yarıyor. Ancak ters aramalar (ör. Google.com yerine 1.2.3.4'e bakmak) çalışmaz.

Çok fazla acıdan sonra, mDNSResponder bu aramayı 4.3.2.1.in-addr.arpa'ya dönüştürüyor ve bir isim araması yapıyor gibi görünüyor. Bu, DNS'in nasıl çalışmayı tercih ettiği olabilir, ancak / etc / hosts ile hiç çalışmaz.

Elbette, her ana bilgisayar için 4.3.2.1.in-addr.arpa takma adını eklemediğiniz sürece, burada 4.3.2.1, görmeye alışkın olduğunuz ip adresinin tersidir. Bu benim için her şeyi düzeltir. İşte bir örnek / etc / hosts girişi:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.