resolv.conf & systemd-resolved: 도메인에서 다음 서버 쿼리를 찾을 수 없음 응답

resolv.conf & systemd-resolved: 도메인에서 다음 서버 쿼리를 찾을 수 없음 응답

내 노트북에 대한 간단한 계단식 DNS 확인 알고리즘을 구축하려고 합니다.

  • DHCP에서 제공하는 서버 쿼리
  • 찾을 수 없거나 실패했습니까? 8.8.8.8을 쿼리하면 친구가 됩니다.
  • 찾을 수 없거나 실패했습니까? 127.ABC에서 로컬 dnsmasq 쿼리

현재는 이전 서버가 어떤 식으로든 실패한 경우에만 다음 서버를 요청하는 것으로 보이지만 빈 응답으로 응답하면 해결 프로세스가 중지됩니다.

커널 메커니즘이나 systemd-resolved를 통해 위에서 설명한 계단식 방식으로 Linux 기반 시스템이 이를 수행하도록 강제할 수 있습니까? dnsmasq를 통해 요청을 라우팅하면 가능 server=하지만(첫 번째 지시문에서 systemd-resolved를 DHCP 제공 서버로 전달하도록 설정) 가능한 한 많은 배포판을 그대로 유지할 수 있는 덜 지저분한 방법을 선호합니다.

답변1

불행히도 이것은 DNS가 작동하는 방식이 아닙니다. 다른 서버가 쿼리되는 유일한 시간은 정의된 이전 서버가 응답하지 않을 때입니다. 응답이 NXDOMAIN이더라도 모든 응답은 응답입니다. Query Denied 응답도 응답입니다...

답변2

결과적으로 내 요구 사항을 충족하는 매우 유사한 작업을 다른 방법으로 수행할 수 있습니다(도메인이 겹치지 않기 때문에). 필요한 기능은 dnsmasq 자체에 있으며 다음과 같은 방법으로 원하는 것을 얻을 수 있습니다.

  1. 127.0.0.53에서 systemd-resolved 시작

  2. dnsmasq.conf에 필요한 규칙을 추가하세요.

    address = /banana.services/127.0.0.1
    address = /mango.services/127.0.0.1
    
  3. systemd-resolved 및 전역 DNS의 대체 서버로 dnsmasq.conf를 마무리합니다.

    server = 127.0.0.53
    server = 8.8.8.8
    server = 8.8.4.4
    server = 1.1.1.1
    
  4. 짜잔 - 이제* dnsmasq는 먼저 로컬 재정의를 제공한 다음 로컬 DNS를 조사하고 마지막으로 역시 빈손으로 반환되면 잘 알려진 DNS 서버 목록을 쿼리합니다.

* nsswitch.conf에서도 확인 순서를 변경해야 할 수도 있습니다.

관련 정보