Categories: Linux

Linux 本機 DNS 解析服務 systemd-resolved 設定與使用教學

介紹如何在 Ubuntu Linux 中設定與使用 systemd-resolved 本機應用程式 DNS 解析服務。

systemd-resolved 是一個提供本機應用程式 DNS 解析的服務,包含解析主機名稱、IP 地址、域名、DNS 資源記錄等,支援 DNSSEC、LLMNR 與 MulticastDNS,可用來替代傳統 Linux 上的 NSS(name service switch)。

systemd-resolved 服務基本操作

由於 systemd-resolvedsystemd 的一部分,所以不需要另外安裝,而在操作上可以向一般的服務一樣透過 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 解析有關的設定檔主要有:

  1. /etc/hosts:本機的主機名稱對應檔,當進行 DNS 查詢時,會優先查詢此對應表。
  2. /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-resolvedresolved.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

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago