DNS의 이상한 문제: 드릴은 작동하지만 getent 호스트는 작동하지 않습니다.

DNS의 이상한 문제: 드릴은 작동하지만 getent 호스트는 작동하지 않습니다.

저는 Raspberry Pi 4에서 Arch Linux ARM을 실행하고 있습니다. 현재 도메인 확인 문제가 있습니다. "사용자 공간" 애플리케이션(핑, 웹 브라우저 등 포함)은 호스트에 액세스할 수 있지만 호스트를 확인할 수 없습니다.https://1.1.1.1크롬에서. 드릴 비트는 잘 작동하지만(?!) getent hosts작동하지 않습니다. 나는 (편집을 통해 ) 재정의 /etc/resolv.conf하고 사용해 보았지만 소용이 없었습니다. 어떤 아이디어가 있나요? ( 예상대로 작동합니다)resolvconf -u/etc/resolvconf.conf/etc/hosts

$ cat /etc/resolv.conf 
domain lan
nameserver 1.1.1.1

$ drill unix.stackexchange.org
;; ->>HEADER<<- opcode: QUERY:, rcode: NXDOMAIN, id: 45971
;; flags qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;; unix.stackexchange.org.    IN       A

;; ANSWER SECTION:
unix.stackexchange.org. 14400   IN    CNAME    stackexchange.org.
stackexchange.org.      14400   IN    A        67.227.226.240

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 111 msec
;; SERVER: 192.168.42.129
;; WHEN: Tue Nov 26 13:09:11 2019
;; MSG SIZE rcvd: 70
$ grep hosts /etc/nsswitch.conf
hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns

답변1

최신 브라우저는 DNS-over-HTTPS(크롬,파이어폭스 브라우저). 따라서 기본 운영 체제와 완전히 독립적으로 유효한 호스트 이름 확인을 가질 수 있습니다.

즉, nsswitch.conf기존 DNS 기반 조회보다 먼저 시도하도록 지정합니다 . resolve요청한 데이터가 없거나 임시 오류 코드가 보고된 경우 조회 결과 실패로 처리됩니다. 실행하여 어떤 DNS 서버가 사용되고 있는지 확인할 수 있습니다.systemd-resolvedresolv.confdnssystemd-resolvedsystemd-resolvedresolvectl status

이 명령은 기본 네임서버를 drill명시적으로 찾습니다 . 그렇지 않으면 전체 작업을 건너뛰고 모든 작업을 자체적으로 수행합니다.resolv.confnsswitch.conf

( 에 지정하여 리디렉션이 허용된 프로그램은 systemd-resolved명시적으로 무시되며 , 또한 다른 네트워크 인터페이스에 대해 다른 DNS 서버를 구성할 수 있기 때문입니다.)resolv.confdrillsystemd-resolvednameserver 127.0.0.53resolv.confsystemd-resolved

그래서 무슨 일이 일어나고 있는지에 대한 나의 설명은 다음과 같습니다.

  • Chromium: DNS-over-HTTPS를 사용하기 때문에 작동합니다.
  • drill: 건너뛰고 nsswitch.conf직접 보기 때문에 작동합니다 resolv.conf.
  • 기본적으로 그 밖의 모든 것: 에 지정된 메커니즘을 사용하여 nsswitch.conf쿼리를 종료합니다. systemd-resolved어떤 이유에서든 작동하지 않는 DNS 설정이 있는 것 같습니다(요청이 방화벽에 의해 차단되었거나 비협조적인 DNS 서버와 통신 중일 수 있습니까?). DNS 정보를 얻을 수 없습니다. resolv.conf이러한 프로그램은 "영구 실패" 결과 코드를 반환하려고 시도하는 경우에만 지정된 DNS 서버를 사용합니다. systemd-resolved현재는 이러한 일이 발생하지 않습니다.

mymachines아마 nsswitch.conf다음을 가리키는 것 같다이 호스트 이름 확인 모듈로컬 VM 및 기타 항목을 자동으로 확인합니다 systemd-machined. 로컬이 아닌 이름을 확인하는 데는 영향을 주지 않습니다.

마찬가지로 myhostname다음을 참조할 수 있습니다.이 호스트 이름 확인 모듈이렇게 하면 네트워크 연결이 없더라도 현재 로컬 호스트 이름, 이름 localhostlocalhost.localdomain이름이 항상 확인됩니다._gateway

관련 정보