ใครอ่าน / etc / resolv.conf?


16

เซิร์ฟเวอร์ Centos 7 ของฉันแก้ไขชื่อโดเมนไม่ถูกต้อง จากสิ่งที่ผมเห็นในระบบ Linux ทันสมัย/etc/resolv.confมักจะถูกสร้างขึ้นด้วยdhclient, หรือdnsmasqNetwork Manager

ดังนั้นฉันมีคำถามทางทฤษฎีทั่วไปเกี่ยวกับเครือข่ายสแต็คใน Linuxes ที่ทันสมัย:

ใครเป็นผู้รับผิดชอบในการอ่าน/etc/resolv.conf? ผู้เล่นใด (บริการหรือระบบย่อยเคอร์เนล) เกี่ยวข้องกับการแก้ไขชื่อโดเมน

SHORT ANSWER: Arch linux manualกล่าวว่าการกำหนดค่าระดับสูงของการจำแนกชื่อโดเมนเสร็จสิ้นแล้ว /etc/nsswitch.confและใช้ Name Service Switch glibcAPI

glibcใช้nss-resolveฟังก์ชั่นสำหรับส่งคำขอ DNS ไปยังเซิร์ฟเวอร์ DNS

โดยปกติในระบบ CentOS ที่ทันสมัยจะnss-resolve ขึ้นอยู่กับ systemd-resolvedบริการ หาก/etc/resolv.confถูกสร้างโดยสิ่งที่ชอบdhclient-scriptให้systemd-resolvedอ่านและทำงานในโหมดความเข้ากันได้เลียนแบบพฤติกรรมของระบบเก่าเช่นBINDไคลเอนต์ DNS

คำตอบ:


20

ไลบรารีไคลเอ็นต์ DNS ทำ

ไลบรารี C ประกอบด้วยไคลเอนต์ DNS ที่รวมการค้นหาแบบชื่อ - ที่อยู่ในโปรโตคอล DNS และส่งไปยังพร็อกซีเซิร์ฟเวอร์ DNS เพื่อทำงานทั้งหมดของการแก้ปัญหาแบบสอบถาม มีไคลเอ็นต์ DNS เหล่านี้จำนวนมาก สิ่งที่อยู่ในไลบรารีรันไทม์ C หลักของระบบปฏิบัติการของคุณนั้นน่าจะมาจาก BIND ของ ISC แต่มีคนอื่นมากมายจากdnsห้องสมุดของ Daniel J. Bernstein ผ่าน c-ares ไปสู่ ​​adns

แม้ว่าหลายคนมีกลไกการกำหนดค่าดั้งเดิมของตนเอง แต่โดยทั่วไปจะมีโหมดความเข้ากันได้ของไลบรารี BIND ที่พวกเขาอ่านresolv.confซึ่งเป็นไฟล์กำหนดค่าสำหรับไลบรารีไคลเอ็นต์ BIND C ของ ISC

nsswitch.confเอ็นเอสเป็นชั้นบนนี้และจะเป็นผู้กำหนด สิ่งหนึ่งที่การค้นหา NSS สามารถเรียกใช้ภายในได้คือไคลเอนต์ DNS และnsswitch.confอ่านโดยรหัส NSS ในไลบรารี C เพื่อตรวจสอบว่ามีการส่งการค้นหาไปยังไคลเอนต์ DNS หรือไม่และจัดการกับคำตอบที่หลากหลายได้อย่างไร

(มีความซับซ้อนเล็กน้อยจากแนวคิดนี้ที่เกิดจาก Name Services Cache Dæmon, nscd แต่เพียงเพิ่มไคลเอ็นต์ชั้นบนพิเศษในไลบรารี C ซึ่งพูดโปรโตคอล idiosyncratic ไปยังเซิร์ฟเวอร์ท้องถิ่นซึ่งจะทำหน้าที่เป็น ไคลเอ็นต์ DNS พูดโปรโตคอล DNS ไปยังเซิร์ฟเวอร์ DNS พร็อกซี systemd-resolvedเพิ่มภาวะแทรกซ้อนที่คล้ายกัน)

systemd-resolved, NetworkManager, connman, dhcpcd, resolvconfและอื่น ๆ ปรับการตั้งค่าไฟล์ลูกค้าห่วง DNS ให้กับลูกค้าของสวิทช์ DNS ที่จะพูดคุยกับพร็อกซีเซิร์ฟเวอร์ DNS ที่แตกต่างกันเกี่ยวกับการบิน นี่อยู่นอกขอบเขตสำหรับคำตอบนี้โดยเฉพาะอย่างยิ่งเนื่องจากมีคำตอบมากมายในไซต์ WWW นี้ที่จัดการกับรายละเอียดไบเซนไทน์ที่กลไกดังกล่าวเกี่ยวข้องแล้ว

วิธีดั้งเดิมในการทำสิ่งต่าง ๆ ในโลกของ Unix ก็คือการเรียกใช้พร็อกซีเซิร์ฟเวอร์ DNS ทั้งบนตัวเครื่องหรือบน LAN ดังนั้นสิ่งที่คู่มือ FreeBSD กล่าวเกี่ยวกับระบบที่มีการกำหนดค่าตามปกติซึ่งการดำเนินการเริ่มต้นของไลบรารีไคลเอนต์ DNS ในกรณีที่ไม่resolv.confตรงกับสิ่งที่ผู้ดูแลระบบ Unix ปกติมีอยู่ซึ่งเป็นเซิร์ฟเวอร์ DNS พร็อกซีที่รับฟัง 127.0.0.1 (คู่มือ FreeBSD สำหรับresolv.confเป็นจริง doco ที่ยังมาจาก ISC ของห่วงและสามารถของหลักสูตรยังพบได้ที่ห้องสมุดลูกค้าห่วง DNS ได้รับการจดทะเบียนเป็นสถานที่อื่น ๆ เช่นห้องสมุด GNU C.)

อ่านเพิ่มเติม


7

จากหน้า FreeBSD ที่ดียิ่งขึ้น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

ไฟล์/etc/resolv.confถูกอ่านโดยการเรียก * libc ที่ดำเนินการแก้ไขชื่อโฮสต์ นี้เป็นหลักและเลิกใช้getaddrinfogethostbyname

หากฟังก์ชั่นเหล่านี้ผ่านชื่อ DNS แล้วพวกเขาจะทำสิ่งเหล่านี้ตามลำดับต่อไปนี้:

  1. /etc/hostsพยายามที่จะแก้ไขชื่อโฮสต์เฉพาะที่เป็นโดยการอ่าน
  2. หากล้มเหลวแล้วสอบถามเซิร์ฟเวอร์ DNS /etc/resolv.confที่ระบุไว้ใน
  3. หากยังล้มเหลวชื่อโฮสต์จะไม่สามารถแก้ไขได้

เนื่องจากคุณพูดถึงdnsmasq : นี่คือเซิร์ฟเวอร์ DNS ที่ทำงานในเครื่อง ดังนั้นใน Linux distros ที่ทันสมัยหลาย ๆ/etc/resolv.confจุดเท่านั้นที่จะชี้ไปที่127.0.0.1(นี่คือที่ dnsmasq ในพื้นที่รับฟัง) dnsmasq ได้รับการกำหนดค่าให้ส่งต่อคิวรีเซิร์ฟเวอร์ DNS ทางอินเทอร์เน็ต dnsmasq ได้รับการกำหนดค่าโดย Network Manager เมื่อเชื่อมต่อกับอินเทอร์เน็ต


สิ่งเหล่านี้ไม่ใช่การเรียกของระบบนั่นคือฟังก์ชัน * libc
JoshuaRLi

@JoshuaRLi ฉันแน่ใจว่าฉันแก้ไขมัน
rexkogitans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.