/Etc/resolv.conf'u kim okur?


16

Centos 7 sunucum alan adlarını düzgün çözmüyor. Gördüğüm kadarıyla, Modern Linux sistemlerinde /etc/resolv.confsıkça ile oluşturulur dhclient, dnsmasqya da Network Manager.

Bu yüzden modern Linux'larda ağ yığını hakkında genel bir teorik sorum var:

Okumaktan kim sorumlu /etc/resolv.conf? Alan adı çözümlemesinde hangi oyuncular (hizmetler veya çekirdek alt sistemleri) yer alır?

KISA CEVAP: Arch linux manual , alan adı çözünürlüğünün üst düzey yapılandırmasının yapıldığını /etc/nsswitch.conf ve Name Service Switch glibcAPI'sine dayandığını söylüyor .

glibcnss-resolveDNS sunucularına DNS istekleri göndermek için işlevi kullanır .

Normalde modern CentOS sistemleri hizmete nss-resolve dayanır systemd-resolved . Eğer /etc/resolv.confböyle bir şey tarafından oluşturulan dhclient-script, systemd-resolvedbunu okur ve gibi eski sistemlerin davranışını taklit bir uyumluluk modunda çalışır BINDDNS istemcisi.

Yanıtlar:


20

DNS istemci kitaplıkları yapar.

C kütüphaneleri, DNS protokolünde ad-adres aramaları tamamlayan ve sorgu çözümlemesinin tüm işlerini yapmak için proxy DNS sunucularına teslim eden DNS istemcileri içerir. Bu DNS istemcilerinin çoğu var. İşletim sisteminizin ana C çalışma zamanı kitaplığında bulunan, büyük olasılıkla ISC'nin BIND'ındaki kitaplıktır. Ama Daniel J. Bernstein'ın dnskütüphanesinden, c-ares ve adns'a kadar bir sürü insan var.

Birçoğu kendi yerel yapılandırma mekanizmalarını içermelerine rağmen, genellikle okudukları yerde resolv.confISC'nin BIND C istemci kitaplığı için yapılandırma dosyası olan bir BIND kitaplığı uyumluluk moduna sahiptir.

NSS bunun üstünde katmanlıdır ve tarafından yapılandırılır nsswitch.conf. NSS aramalarının dahili olarak çağırabileceği şeylerden biri DNS istemcisidir nsswitch.confve aramaların DNS istemcisine verilip verilmeyeceğini ve nerede verileceğini ve çeşitli yanıtlarla nasıl başa çıkılacağını belirlemek için C kütüphanesindeki NSS kodu tarafından okunur.

(Ad Services Cache Dæmon, nscd'nin neden olduğu bu fikrin hafif bir komplikasyonu vardır. Ancak bu, C kütüphanesine, yerel bir sunucuya kendine özgü bir protokol konuşan, ekstra bir üst katman istemcisi ekler ve DNS protokolünü proxy DNS sunucusuna konuşan DNS istemcisi. systemd-resolvedBenzer komplikasyonlar ekler.)

systemd-resolved, NetworkManager, connman, dhcpcd, resolvconf, Ve diğerleri anında farklı proxy DNS sunucularına konuşmak anahtarı DNS müşterilerine BIND DNS istemcisi yapılandırma dosyasını ayarlayın. Özellikle bu WWW sitesinde, böyle bir mekanizmanın içerdiği bizans ayrıntılarıyla zaten ilgilenen çok sayıda cevap olduğu için, bu yanıtın kapsamı dışındadır.

Unix dünyasında bir şey yapmanın daha geleneksel yolu, makinenin kendisinde veya LAN'da bir proxy DNS sunucusu çalıştırmaktır. Bu nedenle, FreeBSD kılavuzunun normalde yapılandırılmış sistemler hakkında söylediği, DNS istemci kütüphanesinin varsayılan eyleminin resolv.confUnix sistem yöneticilerinin normalde sahip olduğu eşleşmelerle eşleşmemesi, 127.0.0.1'de dinleyen bir proxy DNS sunucusu. (FreeBSD manuel resolv.confyani doco aslında da ISC en BIND kadar uzanıyor ve BIND DNS istemcisi kütüphane böyle GNU C kütüphanesi olarak başka yerlere dahil edilmiştir de burada bulunabilir kursu yapamaz.)

daha fazla okuma


7

Çok daha iyi FreeBSD kılavuz sayfasından resolv.conf :

 The resolver configuration file contains information that is read by the
 resolver routines the first time they are invoked by a process.

 On a normally configured system this file should not be necessary.  The
 only name server to be queried will be on the local machine, the domain
 name is determined from the host name, and the domain search path is
 constructed from the domain name.

1

Dosya /etc/resolv.conf, ana bilgisayar ad çözümlemesi gerçekleştiren * libc çağrıları tarafından okunur. Bu öncelikle getaddrinfove kullanımdan kaldırıldı gethostbyname.

Bu işlevlere bir DNS adı iletilirse, bunları aşağıdaki sırayla yaparlar:

  1. Ana bilgisayar adını yerel olarak, yani okuyarak çözmeye çalışın /etc/hosts.
  2. Bu başarısız olursa, listelenen DNS sunucularını sorgulayın /etc/resolv.conf.
  3. Bu da başarısız olursa, ana bilgisayar adı çözümlenemez.

Dnsmasq'ten bahsettiğiniz için : Bu, yerel olarak çalışan bir DNS sunucusudur. Yani, birçok modern Linux dağıtımında, /etc/resolv.conftek nokta 127.0.0.1(yerel dnsmasq'ın dinlediği yerdir). dnsmasq daha sonra Internet DNS sunucularını sorgulamak üzere yapılandırılır; dnsmasq, Internet'e bağlandıktan sonra Ağ Yöneticisi tarafından yapılandırılır.


Bunlar sistem çağrıları değil, * libc fonksiyonları.
JoshuaRLi

@JoshuaRLi emin, ben düzenledim.
rexkogitans
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.