如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 伺服器來解析本地域和遠端 DNS 伺服器來解析遠端域?
我通過網關連接到區域網路並訪問 Internet。本地網路中有 DNS 伺服器,能夠解析本地網路中電腦的主機名。
我想配置systemd-resolved和systemd-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 的手冊頁。
也可以看看:
參考: