Linux-Mint

並非所有名稱伺服器都被查找

  • October 4, 2018

所以我有多個域名伺服器/etc/resolv.conf,但關於它們出現的順序,我能夠或不能解析我的公司 VPN 主機名:當 VPN 的 DNS 在我的本地 DNS 之前時,能夠解析公司主機。當我的本地名稱伺服器是第一個時,我無法解析公司主機。

我不認為這是故意的行為,因為所有名稱伺服器都必須經過測試,然後再扔給我NXDOMAIN

我將如何使所有名稱伺服器處於活動狀態(第一次失敗時不返回),所以該順序無關緊要?

在 DNS 中,NXDOMAIN 消息並不完全是失敗。它是,或者至少應該是,您請求的域不存在的完全有效的資訊。錯誤可能是“我不知道”或“我不能告訴你”或“

$$ dead silence until timeout $$”。 在/etc/resolv.conf中,期望*所有配置的名稱伺服器都是平等的。*也就是說,它們都應該對 DNS 資訊具有相同的訪問權限:它們都應該能夠解析您可能需要解析的任何名稱。

如果這不是真的,那麼傳統的 Unix 風格/etc/resolv.conf就不夠用了。許多人試圖通過調整文件中 DNS 伺服器的順序來實現您所尋求的,但都失敗了:它只是不能那樣工作。

相反,您通常需要設置一個 DNS 解析器/記憶體/代理,可以配置一些規則,例如“如果您需要解析的名稱屬於這些域之一,則詢問這些伺服器之一;如果名稱是在域中,然後使用伺服器;對於其他一切,使用這些伺服器。”

例如,您可以在以下位置設置dnsmasq和編寫類似的內容dnsmasq.conf

no-resolv
server=/corporate-domain.com.example/10.1.2.3
rev-server=10.1.0.0/16,10.1.2.3
server=/google.com/8.8.8.8
server=9.9.9.9

這意味著:

  • 忽略/etc/resolv.conf(以防止循環)
  • 使用名稱伺服器 10.1.2.3 解析corporate-domain.com.example域中的任何名稱以及對 10.1.0.0/16 網路中 IP 地址的任何反向查詢
  • 使用 8.8.8.8 解析google.com域中的任何名稱
  • 其餘的,使用 9.9.9.9。

一旦您dnsmasq像這樣進行配置,您將配置/etc/resolv.confonly nameserver 127.0.0.1,將所有本地 DNS 請求重定向到本地dnsmasq.

如果您的本地名稱伺服器是 BIND,您可以使用以下區域聲明執行相同操作type forward

zone "corporate-domain.com.example" {
   type forward;
   forwarders { 10.1.2.3; };
};

zone "1.10.in-addr.arpa" {
   type forward;
   forwarders { 10.1.2.3; };
}; 

zone "google.com" {
   type forward;
   forwarders { 8.8.8.8; 8.8.4.4; }; 
};

options {
   forwarders { 9.9.9.9; };
   forward only;
};

這實現了與上面的配置完全相同的結果dnsmasq,但 BIND 配置語法有點冗長。

引用自:https://unix.stackexchange.com/questions/473062