Linux가 DNS를 확인하는 순서는 무엇입니까?

Linux가 DNS를 확인하는 순서는 무엇입니까?

Linux 구문 분석 순서는 무엇입니까 DNS? 을 읽고 /etc/nsswitch.conf을 읽은 hosts다음 DNS로 이동한 /etc/resolv.conf다음 네트워크 연결로 이동 하시겠습니까 DNS?

나는 이것에 대해 거의 아는 바가 없으며 DNS이해하는 데 도움이 될 수 있는 답변을 주시면 정말 감사하겠습니다.

답변1

Linux가 DNS를 확인하는 순서는 다음과 같습니다.매우 구성 가능.

hosts:의 줄을 읽는 것부터 시작하세요 /etc/nsswitch.conf. 이 줄의 키워드는 다양한 소스가 사용되는 순서를 지정합니다.

사용 가능한 키워드 세트는 Linux 배포판에 따라 다릅니다. 고전적인 것들은 다음과 같습니다:

  • files시스템에 읽도록 ​​지시/etc/hosts
  • dns에 지정된 DNS 서버를 사용하도록 시스템에 지시합니다 /etc/resolv.conf. (사용 중인 최신 시스템에서는 systemd-resolved결국 이 기능을 더 이상 사용하지 않게 만들 수 있습니다.)
  • nis또는 nisplusNIS/NIS+ 시스템에 대한 중앙 관리 호스트 테이블을 참조하십시오(실제로는 사용되지 않음).
  • compat와 유사 files하지만 이전에 사용된 이전 NIS 확장 구문도 허용합니다 /etc/nsswitch.conf. (실제로는 구식)

최신 시스템에는 다음과 같은 새로운 키워드가 추가될 수 있습니다.

  • resolve시스템에 을 사용하도록 지시합니다 systemd-resolved. 이 키워드가 있는 경우 이 resolvectl명령을 사용하여 실제 DNS 서버 설정을 확인합니다. dns키워드도 없으면 파일 /etc/resolv.conf완전히 무시됨.

  • mdns4_minimal, mdns6_minimal또는 각각 IPv4, IPv6 또는 둘 다를 사용하여 적절한 멀티캐스트 주소로 mDNS 패킷을 전송하여 짧은 호스트 이름이나 긴 이름 형식을 확인 mdns_minimal하도록 시스템에 지시합니다 . shortname.local멀티캐스트 주소는 IPv4의 경우 224.0.0.251이고 IPv6의 경우 ff02::fb이며, 두 경우 모두 대상 포트는 5353/UDP입니다. 동일한 네트워크의 다른 시스템이 다른 mDNS 응답기로 구성된 경우 실제 DNS 서버를 설정하거나 각 시스템에서 파일을 유지 관리 avahi-daemon하지 않고도 로컬 네트워크 세그먼트의 호스트 이름을 사용할 수 있습니다 ./etc/hosts

  • myhostname/etc/hostsDNS 서버가 구성되어 있지 않고 네트워크 연결이 존재하지 않는 경우에도 시스템이 항상 자체 호스트 이름을 성공적으로 확인할 수 있도록 합니다 .

  • mymachines시스템이 다음을 사용하여 설정된 가상 머신의 호스트 이름을 자동으로 확인할 수 있습니다.systemd-machined.service

/etc/nsswitch.conf이름 서비스 전환 API를 구현하는 공유 라이브러리를 제공하여 시스템을 확장할 수 있으므로 다른 키워드가 있을 수 있습니다 libnss_<keyword>.so*.


nameserver 127.0.0.53에 줄이 보이면 /etc/resolv.conf이 플래그도 사용 중인 플래그이므로 실제 DNS 설정을 확인하는 데 systemd-resolved사용해야 합니다 .resolvectl

대부분의 프로그램은 C 표준 라이브러리의 호스트 이름 확인 기능(일반적으로 glibc)을 사용하지만 일부 아주 오래된 프로그램이나 DNS 진단을 위해 특별히 설계된 프로그램은 /etc/resolv.conf직접 읽습니다.

resolvein 키워드를 사용하면 /etc/nsswitch.confC 표준 라이브러리의 호스트 이름 확인 기능이 로 직접 라우팅되며 systemd-resolved, nameserver 127.0.0.53in은 /etc/resolv.conf로컬 systemd-resolved.

키워드 교체를 고려하면 연결별 DNS 서버의 개념을 실제로 지원하지 않기 때문에 모든 DNS 서버가 동일한 것을 알고 있다는 기본 가정이 있으므로 하나의 DNS 서버가 무언가를 말하면 알지 못합니다 dns. /etc/resolv.conf존재한다면 그들은 다른 DNS 서버에 2차 의견을 요청할 이유가 없다고 생각합니다.

systemd-resolved연결별 DNS 서버 구성을 허용하고 특정 도메인에 대한 쿼리가 연결별 DNS 서버로 전달되도록 허용합니다.

(기술적으로 DNS 서버가 "요청한 레코드가 존재하지 않습니다."라고 응답하는 경우,오류가 아닌 유효한 답변입니다.- 비록 이것이 당신이 원하는 대답이 아닐 수도 있습니다. "나는 그 질문에 대답할 수 없습니다" 또는 "나는 당신에게 말할 수 없습니다"와 같은 응답만이 잘못된 것입니다. )

관련 정보