並非所有名稱伺服器都被查找
所以我有多個域名伺服器
/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.conf
onlynameserver 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 配置語法有點冗長。