メインコンテンツへスキップ
  1. Linux 関連記事一覧/
  2. Ubuntu 26.04 LTS Server/

Ubuntu 26.04 LTS Server の名前解決設定(systemd-resolved)

目次

名前解決の確認と設定方法

Ubuntu 26.04 LTS Server の名前解決は systemd-resolved が担当します。アプリケーションからの問い合わせをいったん受け取り、適切な DNS サーバーへ転送する仕組みです。

このため、/etc/resolv.conf を直接編集しても設定は変わりません。確認と設定には resolvectl と Netplan を使います。

/etc/resolv.conf の中身

まず /etc/resolv.conf を見ると、127.0.0.53 という自分自身のアドレスだけが書かれています。

resolv.conf の確認コマンド
ls -l /etc/resolv.conf
cat /etc/resolv.conf
resolv.conf の確認 実行例
kazulog@sv1:~$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Aug 24 01:24 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
kazulog@sv1:~$ cat /etc/resolv.conf
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0 trust-ad
search kazulog.example
kazulog@sv1:~$
確認する箇所内容
シンボリックリンク実体は /run/systemd/resolve/stub-resolv.conf。systemd-resolved が生成する
nameserver 127.0.0.53問い合わせの受け口(スタブリゾルバ)。実際の DNS サーバーではない
search検索ドメイン。ここには反映される
Do not edit.編集しても再生成される

アプリケーションは 127.0.0.53 に問い合わせ、systemd-resolved が本来の DNS サーバーへ転送します。本来の DNS サーバーは別の場所で管理されているため、resolv.conf を見ても分かりません。

現在の設定を確認する

resolvectl status で、systemd-resolved が実際に使っている DNS サーバーを確認します。

名前解決の設定確認コマンド
resolvectl status
名前解決の設定確認 実行例
kazulog@sv1:~$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (ens2)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 10.1.0.1
       DNS Servers: 10.1.0.1 10.1.0.2
     Default Route: yes

Link 3 (ens3)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.100.1
       DNS Servers: 192.168.100.1 2001:db8:100::1
        DNS Domain: kazulog.example
     Default Route: yes
kazulog@sv1:~$
項目内容
Globalどのインタフェースにも属さない設定
Link N (名前)インタフェースごとの設定
Current DNS Serverいま問い合わせに使っている DNS サーバー
DNS Serversそのインタフェースに設定された DNS サーバー
DNS Domain検索ドメイン
DNS サーバーはインタフェースごとに保持されます。 複数のインタフェースがあると、それぞれ別の DNS サーバーを持てます。問い合わせ先は、宛先の名前と各インタフェースの検索ドメインから選ばれます。特定のインタフェースだけを見る場合は resolvectl status [INTERFACE] を使います。

DNS サーバーを設定する

恒久的な設定は Netplan で行います。ネットワーク設定(Netplan)と同じファイルに nameservers を書きます。

DNS サーバーの設定例
network:
  version: 2
  ethernets:
    ens3:
      addresses:
        - 192.168.100.10/24
      nameservers:
        addresses: [192.168.100.1]
        search: [kazulog.example]
項目内容
nameservers.addressesDNS サーバーのアドレス(複数指定可)
nameservers.search検索ドメイン(複数指定可)

netplan apply で反映すると、resolvectl status の表示が変わります。

設定後の確認 実行例
kazulog@sv1:~$ resolvectl status ens3
Link 3 (ens3)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.100.1
       DNS Servers: 192.168.100.1
        DNS Domain: kazulog.example
     Default Route: yes
kazulog@sv1:~$

名前解決を試す

resolvectl query を使うと、どのインタフェースのどの経路で解決したかまで分かります。

名前解決の確認コマンド
resolvectl query [NAME]
入力箇所入力内容
[NAME]解決したいホスト名
名前解決の確認 実行例
kazulog@sv1:~$ resolvectl query www.kazulog.example
www.kazulog.example: 192.168.100.20            -- link: ens3

-- Information acquired via protocol DNS in 5.1987s.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network
kazulog@sv1:~$ resolvectl query www
www: 192.168.100.20                            -- link: ens3
     (www.kazulog.example)

-- Information acquired via protocol DNS in 7.0ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: cache
kazulog@sv1:~$ resolvectl query sv1.kazulog.example
sv1.kazulog.example: 192.168.100.10            -- link: ens3

-- Information acquired via protocol DNS in 6.1378s.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

出力の最後の行に注目してください。

表示内容
-- link: ens3どのインタフェースの DNS を使ったか
Data from: networkDNS サーバーへ問い合わせて得た結果
Data from: cacheキャッシュから返した結果。問い合わせは発生していない
(www.kazulog.example)検索ドメインで補完された結果。短い名前を指定した場合に表示される

2回目の www は短い名前ですが、検索ドメイン kazulog.example が補完されて解決しています。所要時間も1回目と比べて大きく短く、キャッシュから返っていることが分かります。

/etc/hosts との優先順位

名前解決の順序は /etc/nsswitch.confhosts: 行で決まります。

優先順位の確認コマンド
grep '^hosts:' /etc/nsswitch.conf
/etc/hosts を優先する 実行例
kazulog@sv1:~$ grep '^hosts:' /etc/nsswitch.conf
hosts:          files dns
kazulog@sv1:~$ grep kazulog /etc/hosts
192.168.100.99 www.kazulog.example
kazulog@sv1:~$ resolvectl query www.kazulog.example
www.kazulog.example: 192.168.100.99

-- Information acquired via protocol DNS in 3.0ms.
-- Data is authenticated: yes; Data was acquired via local or encrypted transport: yes
-- Data from: synthetic
kazulog@sv1:~$ getent hosts www.kazulog.example
192.168.100.99  www.kazulog.example

files dns の順になっているため、/etc/hosts が DNS より優先されます。上の例では DNS サーバーが 192.168.100.20 を返す名前に対して、/etc/hosts に書いた 192.168.100.99 が返っています。

resolvectl query の出力が Data from: synthetic になっている点にも注目してください。これは systemd-resolved が /etc/hosts の内容から応答を作ったことを示します。

一時的に DNS サーバーを変更する

動作確認などで一時的に変更する場合は resolvectl dns を使います。

一時的な変更のコマンド
sudo resolvectl dns [INTERFACE] [ADDRESS]
一時的な変更と復帰 実行例
kazulog@sv1:~$ resolvectl dns ens3
Link 3 (ens3): 192.168.100.1
kazulog@sv1:~$ sudo resolvectl dns ens3 192.168.100.20
kazulog@sv1:~$ resolvectl dns ens3
Link 3 (ens3): 192.168.100.20
kazulog@sv1:~$ sudo netplan apply
kazulog@sv1:~$ resolvectl dns ens3
Link 3 (ens3): 192.168.100.20
kazulog@sv1:~$ sudo resolvectl revert ens3
kazulog@sv1:~$ resolvectl dns ens3
Link 3 (ens3): 192.168.100.1

netplan apply では元に戻りません。 resolvectl dns による変更は実行時の上書きとして保持されるためです。元の設定へ戻すには resolvectl revert を使います。

設定を元に戻すコマンド
sudo resolvectl revert [INTERFACE]

上の実行例でも、netplan apply の後は変更した値のままで、resolvectl revert を実行して初めて Netplan の設定値に戻っています。

キャッシュを確認する

systemd-resolved は解決結果をキャッシュします。統計は resolvectl statistics で確認します。

キャッシュの確認コマンド
sudo resolvectl statistics
キャッシュの確認 実行例
kazulog@sv1:~$ sudo resolvectl statistics
Transactions
                       Current Transactions:  0
                         Total Transactions: 57
                                               
Cache                                          
                         Current Cache Size:  0
                                 Cache Hits: 27
                               Cache Misses: 33
                                               
Failure Transactions                           
                             Total Timeouts:  3
         Total Timeouts (Stale Data Served):  0
                    Total Failure Responses:  2
Total Failure Responses (Stale Data Served):  0
                                               
DNSSEC Verdicts                                
                                     Secure:  0
                                   Insecure:  0
                                      Bogus:  0
                              Indeterminate:  0
項目内容
Cache Hits / Cache Missesキャッシュで返せた回数と、問い合わせが必要だった回数
Current Cache Size現在保持しているエントリ数
Total Timeouts応答が得られなかった回数

DNS サーバー側の変更が反映されない場合は、キャッシュを消します。

キャッシュの消去コマンド
sudo resolvectl flush-caches

resolv.conf を直接編集したい場合

通常は編集しないでください。 systemd-resolved が再生成するため元に戻ります。

どうしても静的なファイルにしたい場合は、シンボリックリンクを削除して通常のファイルに置き換えます。ただし、この場合はインタフェースごとの DNS やキャッシュといった systemd-resolved の機能が使えなくなります。Netplan で設定するのが正しい方法です。

検証環境と実行ログ

本記事の実行例は、CML 上に Ubuntu 26.04 LTS Server(sv1)と Cisco ルータ(R1)を置いて採取しました。R1 を DNS サーバーとして動かし、実際に名前解決しています。

検証構成
  sv1 (Ubuntu 26.04)              R1 (IOS XE)
   ens3 192.168.100.10/24          Gi2 192.168.100.1/24
   DNS: 192.168.100.1              ip dns server
   search: kazulog.example         www.kazulog.example  = 192.168.100.20
      |                            sv1.kazulog.example  = 192.168.100.10
      +---------- LAB-SW ----------+
手順実行ログ
初期状態(resolv.conf と resolvectl status)show
DNS サーバーの設定と名前解決show
/etc/hosts との優先順位show
キャッシュの統計show
一時的な変更と復帰show

各 STEP の設定ファイルと syslog も保存しています。

手順設定ファイルsyslog
初期状態conflog
DNS サーバーの設定conflog
/etc/hosts の追加conflog

DNS サーバーとして動かした R1 の記録です。検証Configはこの ..._run.txt です。

R1show出力syslogrunning-config
DNS サーバーとして動作中showlogrun

参考リンク

systemd-resolved.service(8) - systemd documentation

関連記事

Ubuntu 公式ページ