DNS aramaları örneğin `ping 'ile başarısız olur, ancak` host` ile çalışır


35

PfSense 2.0rc3 kullanıyorum ve bunu bir DNS ileticisi olarak ayarladım ve "DNS ileticisinde DHCP kiralarını kaydet" özelliğini etkinleştirdim ve anladığım kadarıyla yerel aramalar için DNS sunucusunu almak için tüm uygun ayarlar.

Linux ile beklendiği gibi çalışır ve özellikle çalıştırabilir host abcve ping abc(ve diğer uygulamaları) çalıştırabilirim ve hepsi de beklendiği gibi çalışır.

Ancak Mac OS X Lion 10.7'de beklendiği gibi çalışmaz. Özellikle, yalnızca hostkomutla yapılan aramalar işe yarıyor gibi görünüyor

$ ping abc
ping: cannot resolve abc: Unknown host

$ host abc
abc.local has address 192.168.1.128

$ ping abc.local
ping: cannot resolve abc.local: Unknown host

$ host abc.local
abc.local has address 192.168.1.128

Komutu abckullanırken neden arama çalışıyor hostancak başarısız oluyor ping(ve diğer uygulamalarda)?

Okuduğunuz için teşekkürler.


Bu aynı durumla yeni bir Yosemite (10.10) MBP'sinde kaldım. Çok arama ve yapılandırma işleminden sonra, işe yarayan cevap işte: apple.stackexchange.com/a/152892 Herhangi bir özelliği olmayan kayıt için --AlwaysAppendSearchDomains konfigürasyonu
Stan Kurdziel

Yanıtlar:


26

Neden bu değişikliği yaptılar, bilmiyorum ama bu beni bir süre deli ediyor.

Ben yok biliyorum şeyler konak için çalışmak neden değil ping ama bence bu iki araçlardan doğası ile ilgisi var. Ping, kabloyu size geri yanması gereken paketleri bırakmak için basit (çok yararlı olmasına rağmen) bir tanı aracıdır. Ana bilgisayar adı arama işlevi, işin yalnızca bir yan etkisidir ve sistemin özyinelemeli çözümleyicisine devredilmiştir (İnanıyorum - bağlantılı kütüphaneleri veya bu türden herhangi bir şeyi kontrol ederek doğrulamadım). Ana bilgisayarın ana işi DNS ad çözümlemesi yapmaktır, bu nedenle kendi özyinelemeli çözümleyicisini uygular.

Apple'ın özyinelemeli çözümleyici mDNSResponder. Bazı nedenlerden dolayı, Lion'daki mDNSResponder sürümü, Snow Leopard'da (en azından) olduğu gibi davranması için "-AlwaysAppendSearchDomains" komut satırı seçeneğine ihtiyaç duyuyor.

İşte bunu düzeltmenin hızlı bir yolu:

sudo sed -i .orig '/ProgramArguments/,/<\/array>/ {
s/\(<string>-launchd<\/string>\)/\1\
                <string>-AlwaysAppendSearchDomains<\/string>/
}' /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

(Yukarıdaki ikinci-son satırın başında iki sekme karakteri olmalı, ancak bu küçük düzenleyicinin nasıl sekme ekleyeceğini bulamadım, bu yüzden 16 boşluk ekledim. Her ikisi de çalışmalı, ancak sekmeler orijinal dosyanın aralığını daha iyi sığdırın.)

Bu, "-AlwaysAppendSearchDomains" argümanını mDNSResponder başlangıç ​​plist dosyasına ekler (ve bir yedek kopyayı kaydeder), ancak bunun başlatılması tarafından denetlendiğinden, sistemin mDNSResponder'ı yeniden başlatması gerektiği söylenir.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Şimdi, çalışan mDNSResponder işlemini kontrol ediyorsanız, yeni argümanınızla çalıştığını görmelisiniz:

ps auxww | grep mDNSResponder

( Http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.html ve http://kavassalis.com/2011/07/wtf-bug adreslerine aittir) -in-os-x-10-7 / , bu sorunun cevabını buldum.)


Bu düzeltme Mountain Lion için de geçerlidir (10.8). Az önce laptopuma uyguladım.
Sigsegv

Güzel! Yardımcı olduğuma sevindim.
Sigsegv

1
Bilginize: Bu Yosemite altında işe yaramadı. Eğer Yosemite’de AlwaysAppendSearchDomains’e ihtiyacınız varsa, deneyin: apple.stackexchange.com/a/157017/65787 Bu benim için .local Yosemite’de çözmedi, fakat bu = =) apple.stackexchange.com/a/152892
Stan Kurdziel

El Captain’de çalışmıyor. Ve bunu yapmanın daha kolay yolu gibi görünüyorsudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
Dmitry Verkhoturov

9

Ana bilgisayardan (1) man sayfasından:

Mac OS X BİLDİRİM

Host komutu, host adını ve adres çözünürlüğünü veya Mac OS X'te çalışan diğer işlemler tarafından kullanılan DNS sorgusu yönlendirme mekanizmalarını kullanmaz. Ana bilgisayar tarafından yazdırılan ad veya adres sorgularının sonuçları, Mac kullanan diğer işlemler tarafından bulunanlardan farklı olabilir OS X yerel ad ve adres çözümleme mekanizmaları. DNS sorgularının sonuçları, Mac OS X DNS yönlendirme kitaplığını kullanan sorgulardan da farklı olabilir.

Ne yazık ki, ana bilgisayar komutunun ana bilgisayar adlarını tam olarak nasıl çözdüğü hakkında bilgi yoktur. Bu davranış, IMHO hata ayıklama için biraz yararsız hale getirir.


6

Temel tarih ... nslookup buyruktu, ancak tüm çözümleyici rutinlerini kendi uygulamasına sahipti. Olan biten şey, farklı platformlardaki sistem çözümleyicilerinin nslookup’tan farklı olarak çalıştığıydı. Bazen, bu oldukça farklı sonuçlar doğurabilir.

Host ve dig komutları nslookup için "yeniden yazma" olarak oluşturuldu. Sistem çözümleyici işlevlerini statik olarak bağlarlar. Sistem çözücüsü, UNIX veya UNIX benzeri bir sistemin standart C kitaplığındaki bir işlevler topluluğudur (Mac OS X'te, bu işlevler netdb kitaplığının bir parçasıdır). Bunu yaparak, host ve dig komutları her zaman sistem çözücüsünün hangi işletim sistemi için oluşturdukları ile aynı işlevi görür, ancak buna güvenmezler. Bu şekilde, sistem çözücünün arızalandığı durumlarda mükemmel teşhis araçlarıdır.

NOT: Konuşacak belirli bir ad sunucusu verilmedikçe, hem barındırıcı hem de kazıyıcı /etc/resolv.conf adresindeki ad sunucusu listesini okuyun. Yalnızca host komutu, /etc/resolv.conf dosyasındaki arama listesini kullanır; kazmak değil, bu yüzden bir şey her zaman çözmek için FQDN kazmak zorundadır. Her iki komut da aksi halde tamamen kendi kendine yeterlidir; örneğin, /etc/resolv.conf dosyası, kullandıkları ikili dosyada olmayan tek şeydir.

mDNSresponder, Bonjour'dur. Çok fazla derine inmedim, ancak bu yapılandırma ayarının bunu düzeltmiyor ya da en azından doğrudan değil. Bu sorunu Mac OS X 10.9.1'de daha yeni deneyimledim ve mDNSresponder'ı yeniden başlatmak benim için düzeltti. Bu problemi daha önce herhangi bir sistemde 10.5 -> 10.8 / 10.9'da hiç görmedim. Ayrıca, GUI uygulamaları bundan etkilenmedi, kırılan ping ve ssh gibi sadece komut satırı araçlarıydı.

Kütüphanede daha fazla araştırma yapmak için zaman bulursam, daha eksiksiz bir açıklama bulabilecek miyim bir bakalım.



4

.local çok noktaya yayın için ayrılmıştır. mLNS ve .local kullanarak aynı ağ üzerinde bulunan DNS sunucuları sorunlu olabilir.


1
Burada bir açıklama ya da bazı belgelere bağlantı daha fazla istiyorum. Bu haber için teşekkürler!
bmike

3

Ana bilgisayar .local dns sonekini ekliyor. Ping değil. Bu endişe verici bulursanız, ağ sistemi tercihlerinde varsayılan bir sonek olarak .local ekleyebilirsiniz ve sistem ana bilgisayar adlarını çözmeye çalışırken bunu ekleyecektir.


Bu iyi bir nokta ve üzgünüm soruda söylemediğim ping abc.localhalde host abc.local, işe yaramadı (yine de işe yaramadı ). Soruyu düzelttim. pfSense, yerel etki alanını bir DHCP kirası gönderdiğinde otomatik olarak arama alanı olarak ekler, böylece sorun olmaz.
Brian M. Hunt,

Vay - garip. Tam olarak yerel bir hak kazanırsanız ne olur. ? ping abc.local.
bmike

1
Aynı sonuç. Açıkçası Mac'te iki arama mekanizması var. Neden farklı olduklarını hayal etmek zor.
Brian M. Hunt

Bu cevabın Yosemite ve diğer yeni işletim sistemleri üzerinde çalıştığı kadar emin değilim. Belki daha iyi bir cevap alabiliriz ?
bmike

/ Etc / hosts dosyasının yalnızca tek kullanıcı modunda kullanıldığı konusunda dokümantasyon uyarısı var. Doğru değil. / Etc / hosts dizinine adlarını koyarak 127.0.0.1'e yönlendirerek birçok kötü adamın istemeden erişmesini engelliyorum. Bu sorunun Apple'ın bir kaç tuhaflığı olduğunu gösterse de, bu soru için önemli olduğunu sanmıyorum. Ayrıca OS X’in resolv.conf’umu sık sık değiştirdiğini, bu yüzden her on dakikada bir istediğim şeyi geri yüklemek için bir cron işi ayarladım.
WGroleau

2

Eğer her şeyden denenmiş ve hiçbir şey o zaman ekleyebilir çalıştı nameserverlar ve yolları aramak içinSystem Preferences>Network>Advance(bottom right of the window)>DNS tab görüntü tanımını buraya girin

Bu /etc/resolv.conf ve ping güncellemeleri şimdi çalışmalıdır. /Etc/resolv.conf dosyasını düzenleyerek arama yolunu güncellemek gerçekten işe yaramıyor, ancak bunun bir nedeni var.

GÜNCELLEŞTİRME:

OS, Sistem Tercihleri ​​bölmesi ayarını temel alarak dosyayı yeniden yazdığından /etc/resolv.conf dosyasını düzenlemek çalışmaz.


1
İşletim sistemi ön bölmeyi temel alarak yeniden yazdığı için "/etc/resolv.conf dosyası gerçekten çalışmıyor".
WGroleau

1
Bu gerçekten kabul edilen cevabın aksine benim için hile yaptı.
Artem Pyanykh

1

Lamont Peterson'un gönderisine yorum yapmak için yeterli itibarım yok . Yeniden başlatılması mDNSresponder benim için Mac OS X 10.7 (Lion) 'da çalıştı. Lamont Peterson'dan farklı olarak, bu sorun benim için bir GUI uygulamasında sorunlara neden oldu - Safari genel veya özel ana bilgisayar adlarını çözemedi. İşte yaptığım ve Lamont Peterson'dan da şüphelendiğim şüpheli adımlar:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist

unloadMDNSresponder aşağı kapanır ve loadtekrar başlar yukarı.

Bu hemen sorunu çözdü; yeniden başlatma gerekmez.

listKomutu kullanarak başarıyla başlatıldığını kontrol edebilirsiniz :

$ sudo launchctl list | grep '^PID\|mDNSResponder'
PID     Status  Label
708     -       com.apple.mDNSResponder
-       0       com.apple.mDNSResponderHelper

Bir İşlem Kimliği'nin (PID) varlığı, çalıştığını gösterir. 708OS tarafından atandığı gibi değişecektir. Durum, kısa çizgi veya sıfır dışında bir şey gösteriyorsa, bir şeyler ters gitti.

Nasıl mDNSResponderHelperetkileşime girdiğini bilmiyorum mDNSResponder; Sadece hiç yeniden başlatmak zorunda kaldım mDNSResponder.


1

Bir satırda:

sudo kill $(ps ax | grep mDNSResponder | grep -v grep | grep -v Helper | awk '{ print $1 }')

0

pls OSX isimleri üzerinde not standart dışı olabilir, bu yüzden bütünlüğü için:

  • FQDN pingable
  • "hosts" dosyalarındaki adlar pingable

Mac adları genel olarak DEĞİLDİR: iki düzeltme yapılmalıdır: a) boşlukları "-" olarak değiştir b) ekle .local

öyleyse örneğin Mac'im: ingconti's MacBook Pro

pingable olacak: ingcontis-MacBook-Pro.local

Ve açılış tercihlerini görebilirsiniz:

görüntü tanımını buraya girin

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.