Ai đọc /etc/resolv.conf?


16

Máy chủ Centos 7 của tôi không giải quyết đúng tên miền. Từ những gì tôi thấy, trong các hệ thống Linux hiện đại /etc/resolv.confthường được tạo bằng dhclient, dnsmasqhoặc Network Manager.

Vì vậy, tôi có một câu hỏi lý thuyết chung về ngăn xếp mạng trong các Linux hiện đại:

Ai chịu trách nhiệm đọc /etc/resolv.conf? Những người chơi (dịch vụ hoặc hệ thống con kernel) có liên quan đến độ phân giải tên miền?

TRẢ LỜI NGẮN: Hướng dẫn sử dụng Arch linux nói rằng cấu hình cấp cao của độ phân giải tên miền được thực hiện /etc/nsswitch.conf và dựa vào glibcAPI Dịch vụ chuyển đổi tên .

glibcsử dụng nss-resolvechức năng gửi yêu cầu DNS đến máy chủ DNS.

Thông thường trên các hệ thống CentOS hiện đại nss-resolve phụ thuộc vào systemd-resolved dịch vụ. Nếu /etc/resolv.confđược tạo bởi một cái gì đó như dhclient-script, systemd-resolvedđọc nó và hoạt động ở chế độ tương thích, mô phỏng hành vi của các hệ thống cũ hơn như BINDmáy khách DNS.

Câu trả lời:


20

Thư viện máy khách DNS nào.

Các thư viện C chứa các máy khách DNS bao bọc các tra cứu tên-địa chỉ trong giao thức DNS và bàn giao chúng cho các máy chủ DNS proxy để thực hiện tất cả các công việc khó khăn của giải quyết truy vấn. Có rất nhiều khách hàng DNS này. Cái nằm trong thư viện thời gian chạy C chính của hệ điều hành của bạn rất có thể là cái từ BIND của ISC. Nhưng có rất nhiều người khác từ dnsthư viện của Daniel J. Bernstein thông qua c-ares để quảng cáo.

Mặc dù một vài trong số chúng chứa các cơ chế cấu hình riêng của chúng, nhưng nhìn chung chúng có chế độ tương thích thư viện BIND nơi chúng đọc resolv.conf, là tệp cấu hình cho thư viện máy khách BIND C của ISC.

NSS được xếp chồng lên trên này và được cấu hình bởi nsswitch.conf. Một trong những điều mà tra cứu NSS có thể gọi bên trong là máy khách DNS và nsswitch.confđược đọc bởi mã NSS trong thư viện C để xác định xem và nơi tìm kiếm được chuyển đến máy khách DNS và cách xử lý các phản hồi khác nhau.

(Có một sự phức tạp nhỏ đối với ý tưởng này do Bộ đệm dịch vụ tên D Namemon, nscd gây ra. Nhưng điều này chỉ đơn giản là thêm một máy khách lớp trên trong thư viện C, nói một giao thức riêng cho máy chủ cục bộ, đến lượt nó hoạt động như một Máy khách DNS nói giao thức DNS với máy chủ DNS proxy. Thêm systemd-resolvedcác biến chứng tương tự.)

systemd-resolved, NetworkManager, connman, dhcpcd, resolvconf, Và những người khác điều chỉnh các tập tin cấu hình máy khách BIND DNS cho các khách hàng chuyển đổi DNS để nói chuyện với các máy chủ DNS proxy khác nhau một cách nhanh chóng. Điều này nằm ngoài phạm vi của câu trả lời này, đặc biệt vì có rất nhiều câu trả lời trên trang WWW này đã xử lý các chi tiết byzantine mà một cơ chế như vậy liên quan.

Cách làm truyền thống hơn trong thế giới Unix là chạy máy chủ DNS proxy trên chính máy hoặc trên mạng LAN. Do đó, hướng dẫn FreeBSD nói về các hệ thống được cấu hình thông thường, trong đó hành động mặc định của thư viện máy khách DNS trong trường hợp không resolv.confkhớp với những gì quản trị viên hệ thống Unix thường có, đó là máy chủ DNS proxy nghe trên 127.0.0.1. (Hướng dẫn sử dụng FreeBSD cho resolv.confthực tế là tài liệu cũng bắt nguồn từ BIND của ISC, và tất nhiên cũng có thể được tìm thấy ở nơi thư viện máy khách BIND DNS đã được kết hợp vào những nơi khác như thư viện GNU C.)

đọc thêm


7

Từ trang người dùng FreeBSD tốt hơn nhiều, decv.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

Tệp /etc/resolv.confđược đọc bởi các cuộc gọi * libc thực hiện phân giải tên máy chủ. Điều này là chủ yếu getaddrinfovà không dùng nữa gethostbyname.

Nếu các chức năng này được thông qua một tên DNS, thì chúng thực hiện những việc này theo thứ tự sau:

  1. Cố gắng giải quyết tên máy chủ cục bộ, đó là bằng cách đọc /etc/hosts.
  2. Nếu thất bại, sau đó truy vấn các máy chủ DNS liệt kê trong /etc/resolv.conf.
  3. Nếu điều này cũng thất bại, thì tên máy chủ không thể được giải quyết.

Vì bạn đề cập đến dnsmasq : Đây là một máy chủ DNS chạy cục bộ. Vì vậy, trên nhiều bản phân phối Linux hiện đại, /etc/resolv.confđiểm duy nhất 127.0.0.1(đây là nơi mà dnsmasq cục bộ lắng nghe). dnsmasq sau đó được cấu hình để chuyển tiếp các máy chủ Internet DNS truy vấn; dnsmasq được cấu hình bởi Trình quản lý mạng khi kết nối với Internet.


Đó không phải là các cuộc gọi hệ thống, đó là các chức năng * libc.
JoshuaRLi

@JoshuaRLi chắc chắn, tôi đã chỉnh sửa nó.
rexkogitans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.