Ana bilgisayar adlarını IP adreslerine çözmek için `/ etc / hosts` ve DNS birlikte nasıl çalışır?


10

Linux'ta, /etc/hostsana bilgisayar adlarını IP adreslerine çözmek için DNS ve DNS birlikte nasıl çalışır?

  1. bir ana bilgisayar adı çözümlenebiliyorsa /etc/hosts, DNS /etc/hosts ana bilgisayar adını çözümlemek veya çözümlenen IP adresini /etc/hostsözyinelemeli olarak çözümlemek için "ana bilgisayar adı" olarak ele almak için sonra başvurur mu?
  2. Aşağıdakilere eklediğimde tarayıcımda (firefox ve google chrome) /etc/hosts:

    127.0.0.1 google.com www.google.com
    

    tarayıcıların adres çubuğuna www.google.com yazıp girmeye basmak web sitesine bağlanmaz. Bu satırı kaldırdıktan sonra /etc/hostsweb sitesine bağlanabilirim. Ana /etc/hostsbilgisayar adlarını çözümlemek için DNS'yi geçersiz kıldığı anlamına mı geliyor ?

    Satırı yeniden ekledikten /etc/hostssonra, web sayfasını yeniledikten sonra bile web sitesine bağlanabiliyorum. Neden /etc/hoststekrar başvurmuyorum, böylece web sitesine bağlanamıyorum?

Teşekkürler.


9
Birçok Web tarayıcısının kendi DNS sunucularını ve DNS önbelleğini uyguladığından ve sistemde yapılandırılmış herhangi bir ad arama mekanizmasına başvurmadığından emin olun. Başka bir deyişle, bazı Web tarayıcıları tamamen yok sayar /etc/hostsve yerel olarak tanımlanmış ad sunucuları. İlk kez şahit olmak oldukça kafa karıştırıcı. (Sana bakmak, Chromium tabanlı tarayıcılar!)
Christopher

@Christopher buraya aynı şeyi söylemeye geldim. İlgili unix.stackexchange.com/questions/363498/…
Rui F Ribeiro

@Christopher Satırı / etc / hosts dizinine yeniden ekledikten sonra, web sayfasını yeniledikten sonra bile web sitesine bağlanabiliyorum. / Etc / hosts neden tekrar başvurmuyor, bu yüzden web sitesine bağlanamıyorum? Firefox'un DNS önbelleği nedeniyle mi?
Tim

@RuiFRibeiro Bu Chromium derlemesi saygı görüyor /etc/hostsve sistem tanımlı DNS sunucularına: ( github.com/Eloston/ungoogled-chromium ). Homebrew ile MacOS üzerinde kurulum: brew cask install eloston-chromium.
Christopher

Yanıtlar:


21

Bu, NSS (Ad Hizmeti Anahtarı) yapılandırması, yani /etc/nsswitch.confdosyanın hostsyönergesi tarafından belirlenir. Örneğin, sistemimde:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

Burada filesatıfta /etc/hostsdosyası ve dnsDNS sistemini ifade eder. Ve tahmin edebileceğiniz gibi hangisi önce gelirse kazanır .

Ayrıca, man 5 nsswitch.confbu konuda daha fazla fikir edinmek için bakın .


Bir kenara, kullanma, NSS konak çözünürlüğü orderings takip etmek getentile hostsolduğu gibi veritabanı ör:

getent hosts example.com

Teşekkürler. 2. bölümümde, web tarayıcımın DNS sunucusu çalışmıyor, ancak web tarayıcınızın DNS önbelleği çalışıyor mu?
Tim

systemd.resolverKararları nasıl etkiler? NIS ve LDAP çözünürlük sistemine nerede uyar? Bir MacOS sistemi veya Windows sistemi hangi sırayı izler?
Isaac

@Zaman Evet, tarayıcınız verileri önbellekten alıyor.
heemayl

7

Sadece son sorunuzu cevaplamak için: /etc/hostshemen tekrar başvurmaz çünkü firefoxen son ana bilgisayar adını önbelleğe alır google.com; Eğer her zaman tekrar getirmesini istiyorsanız, sette gerekecek network.dnsCacheExpirationiçin 0de about:config. Daha fazla bilgi (gerçi biraz modası geçmiş) burada . Bu offtopik ise özür dilerim.


Bir sidenote olarak, birçok program berbat olduğu için standart çözümleyiciyi ( getaddrinfo(3), getnameinfo(3)[1]) kullanmaz .

Birincisi, arayüz asenkron değildir; herhangi bir orta derecede karmaşık programın sadece ayrı bir iş parçacığı üretmesi gerekecek getaddrinfo()ve daha sonra onunla iletişim kurmak için kendi protokolünü icat etmek zorunda kalacak (ve girmeyelim, bu da tamamlandığında getaddrinfo_a()bir sinyal gönderiyor , bu yüzden daha da kötü).

İkincisi, (linux'daki glibcstandart C kütüphanesi) içindeki çözücü uygulaması korkunçtur, rastgele dinamik nesneleri dlopen()arkanızdan adres alanına çekmenize izin verir ve herhangi bir şekilde içermesini veya statik olarak kullanmasını imkansız hale getirir. bağlantılı çalıştırılabilir dosyalar.

Çok program doğrudan standart çözümleyicinizi kullanılmadığından, onlar da tam olarak davranışını çoğaltmak için zahmet ve bazı veya tüm gözardı etmiyoruz /etc/resolv.conf, /etc/hosts, /etc/nsswitch.confveya /etc/gai.conf.

[1] ve asırlardan gethostbyname()beri kullanımdan kaldırılmış olan tek kullanımlık olmayan ipv4'ten bahsetmiyoruz bile .


Teşekkürler. Ne demek "evresel olmayan"?
Tim

1
Bu bir yapıyoruz demektir google = GHBN("google.com"); facebook = GHBN("facebook.com")hem ile sona erebilir googleve facebookadresini içeren facebook.com. İki çağrı farklı iş parçacığında yapıldığında, daha komik: yarı google ve yarı facebook veya tam çöp olan bir adresle bitirebilirsiniz.
Billy Amca

gethostbyname()Şimdi ne değişti ?
Tim

1
getaddrinfobunun standart işlevidir, ancak daha önce açıkladığım gibi kendisi brokrn, bu yüzden tarayıcılar veya diğer gerçek yaşam uygulamaları tarafından olduğu gibi kullanılmaz.
Billy Amca

Aslında firefox ve Chrome, örneğin kendi çözümlerini kullanır. Anlayışlı notlar için teşekkürler.
Rui F Ribeiro

6

Dosya /etc/hostsve DNS birlikte çalışmaz. Bağımsız isimler (ağ isimleri) sağlarlar.

Onları birbirine bağlayan yapıştırıcı linux sistemleri içindedir/etc/nsswitch.conf . In /etc/netsvc.confAIX sunucuları için, sistemde Windows'un ve listelenir olabilir lookupd -configuration: (benzer LookupOrder için arama, Cache FF DNS NI DSMacOS sistemlerde).

Gerçek sipariş karmaşık hale gelir ve genellikle her bir ad çözümleme hizmetinin diğer çözünürlük düzeylerinin içine bakabileceği (ve çoğu zaman yapabileceği gibi) kıvrıklaşır. Like dnsmasq(genellikle açık bir DNS sunucusu 127.0.0.1:53veya ::1:53(veya her ikisi)) genellikle /etc/hostsdosya içeriğini okur ve içerir . Veya gibi systemd.resolver(yalnızca noktalı olmayan adları çözmesi gereken temel bir çözümleyici ) bazı durumlarda mycomputernoktalı adlar ( mycomputer.here.dev.) için doğrudan DNS çözünürlükleri çağırır .

Genel olarak, hizmetler sırayla çağrılır ve başarısız olmayan ilk hizmet kazanır ve doğru adres olarak kabul edilir. Genel temel düzen: /etc/hosts(dosya), mDNS (noktalı adlar), DNS, NIS, NIS +, LDAP. Bazı linux sistemlerinde , hizmetteki bilgisayar için son bir çözüm çözümü vardırhostnamemyhostname

Örneğin, bu sistemde (itibaren cat /etc/nsswitch):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

Çok eski (glibc 2.4 ve öncesi) ordergirişin şu şekilde ayarlandığını unutmayın/etc/host.conf :

order hosts,bind,nis

Yalnızca dosya (dosya /etc/hosts) adı hizmetine uygulanır.

Bu (linux) istemci bilgisayardaki NIS ve LDAP ile ilgili etkiler (genellikle) kullanılan DNS sunucusu (bağlayıcı, bağlanmamış vb.) Tarafından kontrol edilir.

yani:

  1. Bir ana bilgisayar adı / etc / hosts içinde çözülebilirse, DNS, / etc / hosts'den sonra ana makine adını çözümlemek için mi yoksa çözümlenen IP adresine / etc / hosts tarafından özyinelemeli olarak çözümlemek için "ana makine adı" olarak davranıyor mu?

Yok.

Bir ana bilgisayar adı çözümlenebilirse /etc/hosts, DNSgeçerli değildir (dosyalar DNS'den önce ise).

ne de bir "hostname" olarak muamele çözümlenen IP adresidir.

Basitçe: çözümlenmiş adres.

tarayıcı

Bir tarayıcı, bir adı çözümlemek için herhangi bir yöntemi kullanabilir (çözümlenmiş adların önbelleğini kontrol ettikten sonra). Yalnızca sistem tarafından sağlanan bir yöntem kullanıyorsa, yukarıda verilen sipariş geçerlidir. Tarayıcı, herhangi bir program gibi, herhangi bir DNS sunucusuyla doğrudan iletişim kurmayı seçebilir.

Sistem siparişi daha /etc/hostsönce varsa, DNSbu dosyadaki bir girişin DNSçözüm hizmetinden önce geleceği anlamına gelir .

Yani:

  1. ... / etc / hosts, ana bilgisayar adlarını çözümlemek için DNS'yi geçersiz kıldığı anlamına mı geliyor?

Evet (tarayıcı sistem tarafından sağlanan çözünürlüğü kullanıyorsa).

Neden /etc/hoststekrar başvurmuyorum, böylece web sitesine bağlanamıyorum?

Yalnızca belirli bir ad için tarayıcının dahili önbelleği temizlenene (veya zaman aşımına uğrayana kadar), bu ad tekrar tarayıcının dışında aranır.

Tarayıcının önbelleğinde çözülmüş bir adı varsa, tarayıcı adı tekrar kullanır.

Önbelleği temizlemek için bunu kullanın .

Veya sadece kapatın (bir süre bekleyin) ve tarayıcıyı yeniden başlatın.

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.