我在 Virtualbox 中以訪客身份使用 Debian 進行了簡單安裝。我安裝了這個resolvconf
套件。 resolv.conf 檔案是這樣的:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 10.3.x.x
nameserver 10.219.x.x
我透過 GUI(應用程式/系統工具/網路工具)新增了名稱伺服器。
8.8.8.8 是 Google 的 DNS,我想用它來解析網路位址。需要 10.3.xx 和 10.219.xx 來解析 teleportal.company.intra 等內部域。
當我在 resolv.conf 中有這些名稱伺服器(8.8.8.8 是第一個)時,我在查詢內部位址時收到錯誤:
> host teleportal.company.intra
Host teleportal.company.intra not found: 3(NXDOMAIN)
但是,如果我明確將第二個nameserver
位址設為 nslookup 的名稱伺服器,則它可以運作:
» nslookup teleportal.company.intra 10.3.x.x
Server: 10.3.x.x
Address: 10.3.x.x#53
teleportal.company.intra canonical name = proxy.dummy1.dummy2.private.
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
resolv.conf 文件指出,nameserver
如果其中一個條目無法解析查詢,則會依序嘗試這些條目。但是,如果我在使用時打開偵錯,nslookup
我會發現nslookup
甚至不會嘗試其他條目,而只會嘗試第一個條目。
如果我更改 的順序nameservers
,則內部位址將被正確解析(nslookup 仍然僅使用第一個條目)。
我如何設定 3 個名稱伺服器,以便實用程式按順序使用所有這些伺服器?
答案1
resolv.conf
僅在逾時的情況下才會逐一聯繫名稱伺服器清單。當一個網域伺服器權威地說「不存在這樣的網域」時就不是這樣了(NXDOMAIN
)。在您的情況下,DNS8.8.8.8
顯然不知道teleportal.company.intra
,並且解析器在獲得NXDOMAIN
.
如果可能,您應該設定一台 DNS 伺服器並將其用於所有解析,並讓 DNS 伺服器決定如何解析名稱。如果10.3.x.x
是您的 Intranet DNS 伺服器,它也可能能夠解析 Internet 主機名稱。
話雖如此,如果您確實想根據名稱將請求轉發到不同的 DNS 伺服器,您可以嘗試資料中心。它是一個在本地運行的快取 DNS 代理程式。安裝它 ( apt-get install pdnsd
) 並將您的本機主機 ( 127.0.0.1
) 新增至 resolv.conf。在pdnsd.conf
設定檔中,您可以指定根據名稱配對聯絡哪些 DNS 伺服器。您的範例段落/etc/pdnsd.conf
:
server {
label= "google";
exclude = ".company.intra";
ip = 8.8.8.8;
}
server {
label= "intra";
include = ".company.intra";
ip = 10.3.x.x;
}
我在上面的文件中剪掉了許多其他參數。您應該遵循 debian 軟體包附帶的文檔和範例設定檔來設定您的pdnsd.conf
.
答案2
我思考解析器回退到二級(或三級或......)DNS僅當第一個(或第二個或...)失敗時。
在這種情況下,查詢沒有失敗,正確返回NXDOMAIN
,即網域不存在。
如果您確實想使用 Google 的 DNS(或任何其他 DNS)來解析外部網域(而不是您的內部名稱伺服器),您可以設定您的伺服器10.3.x.x
並僅10.219.x.x
用於authoritative
您的內部名稱,並將所有其他查詢轉發到外部DNS,然後使用您的內部名稱伺服器作為您的僅有的您內部電腦上的名稱伺服器。