Linux

如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 伺服器來解析本地域和遠端 DNS 伺服器來解析遠端域?

  • April 22, 2020

我通過網關連接到區域網路並訪問 Internet。本地網路中有 DNS 伺服器,能夠解析本地網路中電腦的主機名。

我想配置systemd-resolvedsystemd-networkd以便本地主機名的查找請求將專門定向(路由)到本地 DNS 伺服器,而對所有其他主機名的查找請求將專門定向到另一個遠端 DNS 伺服器。

假設我不知道配置文件在哪裡,或者我是否應該添加更多文件並要求在答案中指定它們的路徑。

在本地網路介面的配置文件(匹配名稱模式的文件/etc/systemd/network/*.network)中,我們必須指定我們要使用DHCP=選項從 DHCP 伺服器獲取本地 DNS 伺服器地址:

[Network]
DHCP=yes

DNS=或使用選項明確指定其地址:

[Network]
DNS=10.0.0.1

此外,我們需要使用Domains=選項指定(在同一部分中)本地域

Domains=domainA.example domainB.example ~example

我們指定本地域domainA.example domainB.example以獲得以下行為(來自systemd-resolved.service,systemd-resolved手冊頁):

查找以每個介面域之一結尾的主機名將專門路由到匹配的介面。

這種方式hostX.domainA.example將由我們的本地 DNS 伺服器專門解析。

我們指定~example所有以結尾的域example都將被視為僅路由域以獲得以下行為(來自送出的描述):

具有僅路由域的 DNS 伺服器應僅用於指定的域。

這種方式hostY.on.the.internet將由我們的全球遠端 DNS 伺服器專門解析。

筆記

理想情況下,使用 DHCP 協議時,應該從 DHCP 伺服器獲取本地域名,而不是在上面的網路介面配置文件中明確指定。見UseDomains=選項。但是,此功能仍然存在未解決的問題 - 請參閱systemd-networkd DHCP 搜尋域選項問題。

我們需要將遠端 DNS 伺服器指定為我們的全域、系統範圍的 DNS 伺服器。我們可以在/etc/systemd/resolved.conf文件中這樣做:

[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844

不要忘記重新載入配置並重新啟動服務:

$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved

警告!

上述保證僅適用於通過systemd-resolved 解析名稱時- 請參閱nss-resolve、libnss_resolve.so.2手冊頁和 systemd-resolved.service、systemd-resolved 的手冊頁

也可以看看:

參考:

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