resolv.conf 和 systemd-resolved:在未找到網域的回應上查詢下一個伺服器

resolv.conf 和 systemd-resolved:在未找到網域的回應上查詢下一個伺服器

我正在嘗試為我的筆記型電腦建立一個簡單的級聯 DNS 解析演算法:

  • 查詢DHCP提供的伺服器
  • 未找到/失敗?查詢 8.8.8.8 及其朋友
  • 未找到/失敗?在127.ABC上查詢本地dnsmasq

目前看來,只有前一個伺服器以某種方式失敗時才會請求下一個伺服器,但如果它回復了空回复,解析過程就會停止。

是否有可能透過核心機製或 systemd 解析強制 Linux 驅動的機器以上述級聯方式執行此操作?透過 dnsmasq 路由請求當然是可能的(在第一個server=指令中設定systemd-resolved 以將查詢轉送到DHCP 提供的伺服器),但我更喜歡採用不太混亂的方式,這樣可以盡可能保持我的發行版完整。

答案1

不幸的是,這並不是 DNS 的工作原理。查詢其他伺服器的唯一時間是先前定義的伺服器沒有回應時。任何回應,即使該回應是 NXDOMAIN,也是回應。即使查詢被拒絕的回應也是回應...

答案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 解析和全域 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 可能還需要更改解析順序。

相關內容