介紹如何在 Ubuntu Linux 中設定與使用 systemd-resolved
本機應用程式 DNS 解析服務。
systemd-resolved
是一個提供本機應用程式 DNS 解析的服務,包含解析主機名稱、IP 地址、域名、DNS 資源記錄等,支援 DNSSEC、LLMNR 與 MulticastDNS,可用來替代傳統 Linux 上的 NSS(name service switch)。
systemd-resolved
服務基本操作由於 systemd-resolved
是 systemd
的一部分,所以不需要另外安裝,而在操作上可以向一般的服務一樣透過 systemctl
來控制:
# 查詢 systemd-resolved 服務狀態 systemctl status systemd-resolved # 啟動 systemd-resolved 服務 sudo systemctl start systemd-resolved # 停止 systemd-resolved 服務 sudo systemctl stop systemd-resolved # 重新啟動 systemd-resolved 服務 sudo systemctl restart systemd-resolved
systemd-resolved
服務與 /etc/resolv.conf
在 Linux 系統上跟 DNS 解析有關的設定檔主要有:
/etc/hosts
:本機的主機名稱對應檔,當進行 DNS 查詢時,會優先查詢此對應表。/etc/resolv.conf
:DNS 伺服器設定檔,當 /etc/hosts
查不到的時候,就會根據此處的設定,透過 DNS 伺服器查詢。而 systemd-resolved
服務本身會維護一份 /run/systemd/resolve/stub-resolv.conf
設定檔,若要採用 systemd-resolved
服務,其線上手冊中提供了好幾種方式,建議的作法是將 /etc/resolv.conf
連結到 /run/systemd/resolve/stub-resolv.conf
設定檔(在 Ubuntu Linux 中預設就是這樣設定的):
# 將 /etc/resolv.conf 連結至 /run/systemd/resolve/stub-resolv.conf sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
在 /run/systemd/resolve/stub-resolv.conf
設定檔中會將 DNS 伺服器設定為 127.0.0.53
,這一個位址就是 systemd-resolved
在本機所提供的 DNS 伺服器,這樣就可以將 systemd-resolved
服務與既有的 /etc/resolv.conf
整合在一起了。
systemd-resolved
服務設定檔systemd-resolved
服務的設定檔位於 /etc/systemd/resolved.conf
,而 systemd-resolved
本身就有預設的設定值,所以在一般狀況下不需要特別去編輯設定檔。以下是設定檔的參數說明與範例:
[Resolve] # 指定 DNS 伺服器,以空白分隔,支援 IPv4 或 IPv6 位置 DNS=192.168.35.1 fd7b:d0bd:7a6e::1 # 備用 DNS 伺服器 FallbackDNS=8.8.8.8 # 設定搜尋域名 Domains=your.com.tw # 設定 LLMNR 是否啟用,可用的選項有 yes、no、resolve LLMNR=yes # 設定 MulticastDNS 是否啟用,可用的選項有 yes、no、resolve MulticastDNS=yes # 設定 DNSSEC 是否啟用,可用的選項有 yes、no、allow-downgrade DNSSEC=yes # 設定快取是否啟用,可用的選項有 yes、no、no-negative Cache=no-negative
關於選項的詳細說明,可以參考 systemd-resolved
與 resolved.conf
的線上手冊:
# 查詢 systemd-resolved 線上手冊 man systemd-resolved # 查詢 resolved.conf 線上手冊 man resolved.conf
resolvectl
測試工具resolvectl
是一個可以用來測試 systemd-resolved
服務的工具,以下是常用的測試指令與參數。
使用 resolvectl
來測試 DNS 正向解析:
# DNS 正向解析
resolvectl query www.google.com
www.google.com: 172.217.24.4 -- link: ens3 -- Information acquired via protocol DNS in 24.4ms. -- Data is authenticated: no
亦可測試 DNS 反向解析:
# DNS 反向解析 resolvectl query 172.217.24.4
172.217.24.4: tsa01s07-in-f4.1e100.net -- link: ens3 -- Information acquired via protocol DNS in 126.9ms. -- Data is authenticated: no
查詢 MX
記錄:
# 查詢 MX 記錄 resolvectl -t MX query gmail.com
gmail.com IN MX 20 alt2.gmail-smtp-in.l.google.com -- link: ens3 gmail.com IN MX 5 gmail-smtp-in.l.google.com -- link: ens3 gmail.com IN MX 40 alt4.gmail-smtp-in.l.google.com -- link: ens3 gmail.com IN MX 30 alt3.gmail-smtp-in.l.google.com -- link: ens3 gmail.com IN MX 10 alt1.gmail-smtp-in.l.google.com -- link: ens3 -- Information acquired via protocol DNS in 5.9ms. -- Data is authenticated: no
查詢目前 systemd-resolved
服務的設定:
# 查詢 systemd-resolved 服務的設定
resolvectl status
Global LLMNR setting: no MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no DNSSEC supported: no DNSSEC NTA: 10.in-addr.arpa 16.172.in-addr.arpa 168.192.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa corp d.f.ip6.arpa home internal intranet lan local private test Link 2 (ens3) Current Scopes: DNS DefaultRoute setting: yes LLMNR setting: yes MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no DNSSEC supported: no Current DNS Server: 101.101.101.101 DNS Servers: 101.101.101.101 8.8.8.8 DNS Domain: your.com.tw
# 查詢 systemd-resolved 服務的統計資訊
resolvectl statistics
DNSSEC supported by current servers: no Transactions Current Transactions: 0 Total Transactions: 4 Cache Current Cache Size: 2 Cache Hits: 1 Cache Misses: 3 DNSSEC Verdicts Secure: 0 Insecure: 0 Bogus: 0 Indeterminate: 0
清除 systemd-resolved
服務的快取:
# 清除 systemd-resolved 服務的快取
resolvectl flush-caches