DNS 클라이언트 라이브러리가 수행합니다.

DNS 클라이언트 라이브러리가 수행합니다.

내 Centos 7 서버가 도메인 이름을 올바르게 확인할 수 없습니다. 내가 아는 한, 최신 Linux 시스템에서는 /etc/resolv.conf일반적으로 dhclient, dnsmasq또는 Network Manager.

그래서 현대 Linux의 네트워킹 스택에 대한 일반적인 이론적 질문이 있습니다.

독서는 누가 담당하나요 /etc/resolv.conf? 이름 확인에 참여하는 행위자(서비스 또는 커널 하위 시스템)는 무엇입니까?

짧은 답변: 아치 리눅스 매뉴얼도메인 이름 확인의 고급 구성에 관한 것입니다.에 완료됨 /etc/nsswitch.conf이름 서비스 전환 glibcAPI를 사용합니다.

glibcnss-resolveDNS 요청을 DNS 서버로 보내는 기능을 사용하십시오 .

일반적으로 최신 CentOS 시스템에서nss-resolve 에 달려있다 systemd-resolved제공하다. /etc/resolv.conf유사한 항목에 의해 생성된 dhclient-script경우 이를 systemd-resolved읽고 호환 모드에서 작업하여 BINDDNS 클라이언트와 같은 이전 시스템의 동작을 시뮬레이션합니다.

답변1

DNS 클라이언트 라이브러리가 수행합니다.

C 라이브러리에는 DNS 프로토콜의 이름-주소 조회를 캡슐화하고 이를 프록시 DNS 서버에 넘겨 쿼리 확인의 모든 무거운 작업을 수행하는 DNS 클라이언트가 포함되어 있습니다. 그러한 DNS 클라이언트가 많이 있습니다. 운영 체제의 기본 C 런타임 라이브러리에 있는 라이브러리는 ISC의 BIND 라이브러리일 가능성이 높습니다. 하지만 Daniel J. Bernstein의 라이브러리부터 c-ares, adns까지 dns훨씬 더 많은 것들이 있습니다 .

그 중 일부는 고유한 기본 구성 메커니즘을 포함하고 있지만 일반적으로 resolv.confISC의 BIND C 클라이언트 라이브러리에 대한 구성 파일인 BIND 라이브러리 호환 모드를 읽습니다.

NSS는 그 위에 위치하며 nsswitch.conf. NSS 조회가 내부적으로 호출할 수 있는 것 중 하나는 DNS 클라이언트이며, nsswitch.conf조회를 DNS 클라이언트에 전달할지 여부와 위치 및 다양한 응답을 처리하는 방법을 결정하기 위해 C 라이브러리의 NSS 코드로 읽혀집니다.

(이 아이디어는 이름 서비스 캐싱 데몬 nscd로 인해 약간 복잡합니다. 그러나 이것은 C 라이브러리에 특수 프로토콜을 로컬 서버에 전달하는 추가 상위 수준 클라이언트를 추가할 뿐이며, 이는 차례로 DNS 클라이언트 및 프록시 역할을 합니다. . DNS 프로토콜을 사용하는 DNS 서버는 systemd-resolved비슷한 복잡성을 추가합니다.

systemd-resolved, NetworkManager, connman, dhcpcdresolvconf기타 다른 사람들은 BIND DNS 클라이언트 구성 파일을 조정하여 DNS 클라이언트가 즉시 다른 프록시 DNS 서버와 통신하도록 전환했습니다. 이는 이 답변의 범위를 벗어납니다. 특히 이 메커니즘과 관련된 복잡한 세부 사항을 이미 다루는 WWW 사이트에 많은 답변이 있기 때문입니다.

Unix 세계에서 보다 전통적인 작업 방식은 컴퓨터 자체나 LAN에서 프록시 DNS 서버를 실행하는 것입니다. 따라서 FreeBSD 매뉴얼에서는 일반적으로 구성된 시스템을 다음과 같이 설명합니다. DNS 클라이언트 라이브러리가 없는 경우 DNS 클라이언트 라이브러리의 기본 작업은 resolv.confUnix 시스템 관리자가 일반적으로 수행하는 작업, 즉 127.0.0.1 프록시 DNS를 수신하는 작업과 일치합니다. 섬기는 사람. (FreeBSD 매뉴얼은 resolv.conf실제로 doco입니다.반품BIND는 ISC에서 시작되었으며 BIND DNS 클라이언트 라이브러리가 다른 위치(예: GNU C 라이브러리)에 병합된 곳에서 찾을 수 있습니다. )

추가 읽기

답변2

더 나은 FreeBSD 매뉴얼 페이지에서구성 파일 구문 분석:

 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.

답변3

이 파일은 /etc/resolv.conf호스트 이름 확인을 수행하는 *libc 호출로 읽혀집니다. 이는 대부분 더 이상 getaddrinfo사용되지 않습니다 gethostbyname.

이러한 함수에 DNS 이름이 전달되면 다음 순서로 작업을 수행합니다.

  1. 예를 들어 /etc/hosts.
  2. 실패하면 쿼리에 나열된 DNS 서버가 쿼리됩니다 /etc/resolv.conf.
  3. 이 방법도 실패하면 호스트 이름을 확인할 수 없습니다.

당신이 언급한 이후로도메인 명 시스템: 로컬로 실행되는 DNS 서버입니다. 따라서 많은 최신 Linux 배포판에서 /etc/resolv.conf가리킬 수 있는 유일한 지점은 127.0.0.1로컬 dnsmasq가 수신하는 곳입니다. 그런 다음 인터넷 DNS 서버에 쿼리를 전달하도록 dnsmasq를 구성합니다. dnsmasq는 인터넷에 연결할 때 네트워크 관리자에 의해 구성됩니다.

관련 정보