名前解決の確認と設定方法
Ubuntu 26.04 LTS Server の名前解決は systemd-resolved が担当します。アプリケーションからの問い合わせをいったん受け取り、適切な DNS サーバーへ転送する仕組みです。
このため、/etc/resolv.conf を直接編集しても設定は変わりません。確認と設定には resolvectl と Netplan を使います。
/etc/resolv.conf の中身
まず /etc/resolv.conf を見ると、127.0.0.53 という自分自身のアドレスだけが書かれています。
ls -l /etc/resolv.conf
cat /etc/resolv.confkazulog@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 statuskazulog@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 | 検索ドメイン |
resolvectl status [INTERFACE] を使います。DNS サーバーを設定する
恒久的な設定は Netplan で行います。ネットワーク設定(Netplan)と同じファイルに nameservers を書きます。
network:
version: 2
ethernets:
ens3:
addresses:
- 192.168.100.10/24
nameservers:
addresses: [192.168.100.1]
search: [kazulog.example]| 項目 | 内容 |
|---|---|
nameservers.addresses | DNS サーバーのアドレス(複数指定可) |
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: network | DNS サーバーへ問い合わせて得た結果 |
Data from: cache | キャッシュから返した結果。問い合わせは発生していない |
(www.kazulog.example) | 検索ドメインで補完された結果。短い名前を指定した場合に表示される |
2回目の www は短い名前ですが、検索ドメイン kazulog.example が補完されて解決しています。所要時間も1回目と比べて大きく短く、キャッシュから返っていることが分かります。
/etc/hosts との優先順位
名前解決の順序は /etc/nsswitch.conf の hosts: 行で決まります。
grep '^hosts:' /etc/nsswitch.confkazulog@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.examplefiles 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.1netplan apply では元に戻りません。 resolvectl dns による変更は実行時の上書きとして保持されるためです。元の設定へ戻すには resolvectl revert を使います。
sudo resolvectl revert [INTERFACE]上の実行例でも、netplan apply の後は変更した値のままで、resolvectl revert を実行して初めて Netplan の設定値に戻っています。
キャッシュを確認する
systemd-resolved は解決結果をキャッシュします。統計は resolvectl statistics で確認します。
sudo resolvectl statisticskazulog@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-cachesresolv.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 |
|---|---|---|
| 初期状態 | conf | log |
| DNS サーバーの設定 | conf | log |
| /etc/hosts の追加 | conf | log |
DNS サーバーとして動かした R1 の記録です。検証Configはこの ..._run.txt です。
| R1 | show出力 | syslog | running-config |
|---|---|---|---|
| DNS サーバーとして動作中 | show | log | run |
参考リンク
systemd-resolved.service(8) - systemd documentation
関連記事
- Ubuntu 26.04 LTS Server のホスト名の変更(hostnamectl)
- Ubuntu 26.04 LTS Server のパッケージ更新(apt update / upgrade)
- Ubuntu 26.04 LTS Server のタイムゾーン設定と時刻同期
- Ubuntu 26.04 LTS Server のユーザー作成と sudo 権限の設定
- Ubuntu 26.04 LTS Server の SSH サーバー設定(公開鍵認証)
- Ubuntu 26.04 LTS Server のサービス管理(systemctl)とログ確認(journalctl)
- Ubuntu 26.04 LTS Server の自動更新設定(unattended-upgrades)
- Ubuntu 26.04 LTS Server の初期設定を自動化する(cloud-init)
- Ubuntu 26.04 LTS Server のカーネルパラメータ設定(sysctl)
- Ubuntu 26.04 LTS Server のネットワーク設定(Netplan)
- Ubuntu 26.04 LTS Server の名前解決設定(systemd-resolved)
- Ubuntu 26.04 LTS Server の NTP 同期先の変更(chrony)
- Ubuntu 26.04 LTS Server のスタティックルート設定(Netplan)
- neovim 公式サイトから最新バージョンをインストールする手順 Ubuntu 26.04 LTS Server