RHEL9やUbuntu 22.04以降では名前解決の仕組みが大きく変わり、systemd-resolvedというデーモンがDNSキャッシュと名前解決を担うようになっています。/etc/resolv.conf を直接編集しても反映されないのはそのためで、以前の手順がそのまま通用しなくなっています。
この記事では、systemd-resolvedを操作するCLIツール「resolvectl」の使い方を解説します。DNSキャッシュのクリア(flush-caches)、DNS設定の確認(status)、名前解決のテスト(query)を、RHEL 9.4 / Ubuntu 22.04 LTSの実機出力とともに紹介します。
この記事のポイント
・sudo resolvectl flush-caches でDNSキャッシュを即時クリアできる
・resolvectl status で現在のDNSサーバー設定と動作モードを確認できる
・resolvectl query でdigと同様に名前解決のテストと確認ができる
・resolvectl statistics でキャッシュヒット率と統計を把握できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
resolvectlとsystemd-resolvedの役割を整理する
CentOS7以前では /etc/resolv.conf にDNSサーバーのIPアドレスを直接書き込むのが一般的でした。RHEL8・RHEL9・Ubuntu 18.04以降では、systemd-resolved というデーモンが名前解決を一元管理するようになり、/etc/resolv.conf の扱いが変わっています。実際に確認してみましょう。
# /etc/resolv.confの実体を確認する $ ls -la /etc/resolv.conf lrwxrwxrwx. 1 root root 37 3月 10 09:12 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
$ cat /run/systemd/resolve/stub-resolv.conf # This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8). # Do not edit. nameserver 127.0.0.53 options edns0 trust-ad search localdomain
resolvectl は、このsystemd-resolvedを制御するCLIコマンドです。DNS設定の確認・キャッシュ操作・名前解決テストなど、DNS関連の作業をresolvectl一本でこなせます。
systemd-resolved が起動しているかは以下で確認します。
$ systemctl status systemd-resolved * systemd-resolved.service - Network Name Resolution Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2026-09-26 09:00:12 JST; 2h 15min ago
resolvectl statusでDNS設定を確認する
Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (eth0) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 8.8.4.4 DNS Servers: 8.8.8.8 8.8.4.4 Link 3 (wlan0) Current Scopes: none Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Link 5 (tailscale0) Current Scopes: DNS Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 100.100.100.100 DNS Servers: 100.100.100.100 fd7a:115c:a1e0::53 DNS Domain: tailcd0d62.ts.net ~0.e.1.a.c.5.1.1.a.7.d.f.ip6.arpa ~100.100.in-addr.arpa ~101.100.in-addr.arpa ~102.100.in-addr.arpa ~103.100.in-addr.arpa ~104.100.in-addr.arpa ~105.100.in-addr.arpa ~106.100.in-addr.arpa ~107.100.in-addr.arpa ~108.100.in-addr.arpa ~109.100.in-addr.arpa ~110.100.in-addr.arpa ~111.100.in-addr.arpa ~112.100.in-addr.arpa ~113.100.in-addr.arpa ~114.100.in-addr.arpa ~115.100.in-addr.arpa ~116.100.in-addr.arpa ~117.100.in-addr.arpa ~118.100.in-addr.arpa ~119.100.in-addr.arpa ~120.100.in-addr.arpa ~121.100.in-addr.arpa ~122.100.in-addr.arpa ~123.100.in-addr.arpa ~124.100.in-addr.arpa ~125.100.in-addr.arpa ~126.100.in-addr.arpa ~127.100.in-addr.arpa ~64.100.in-addr.arpa ~65.100.in-addr.arpa ~66.100.in-addr.arpa ~67.100.in-addr.arpa ~68.100.in-addr.arpa ~69.100.in-addr.arpa ~70.100.in-addr.arpa ~71.100.in-addr.arpa ~72.100.in-addr.arpa ~73.100.in-addr.arpa ~74.100.in-addr.arpa ~75.100.in-addr.arpa ~76.100.in-addr.arpa ~77.100.in-addr.arpa ~78.100.in-addr.arpa ~79.100.in-addr.arpa ~80.100.in-addr.arpa ~81.100.in-addr.arpa ~82.100.in-addr.arpa ~83.100.in-addr.arpa ~84.100.in-addr.arpa ~85.100.in-addr.arpa ~86.100.in-addr.arpa ~87.100.in-addr.arpa ~88.100.in-addr.arpa ~89.100.in-addr.arpa ~90.100.in-addr.arpa ~91.100.in-addr.arpa ~92.100.in-addr.arpa ~93.100.in-addr.arpa ~94.100.in-addr.arpa ~95.100.in-addr.arpa ~96.100.in-addr.arpa ~97.100.in-addr.arpa ~98.100.in-addr.arpa ~99.100.in-addr.arpa ~ts.net はsystemd-resolvedが認識している現在のDNS設定を一覧表示します。「どのDNSサーバーが使われているか」を最初に確認するコマンドです。1. コマンドを実行して出力を確認する
$ resolvectl status Global Protocols: -LLMNR -mDNS -DNSSECstub DNS server resolv.conf mode: stub Current DNS Server: 192.168.1.1 (ens160) DNS Servers: 192.168.1.1 Link 2 (ens160) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSSECstub DNS server Current DNS Server: 192.168.1.1 DNS Servers: 192.168.1.1
2. 出力の主要な項目の読み方
・Protocols: +/-でプロトコルが有効か無効かを示す。-LLMNRはLLMNRが無効、-mDNSはmDNSが無効を意味する・resolv.conf mode: stub ——スタブモード(127.0.0.53を経由する)で動作中であることを示す
・Current DNS Server: 実際に名前解決に使われているDNSサーバーとインターフェース名
・DNS Servers: 設定されている全DNSサーバー(複数の場合はフェイルオーバー順)
・+DefaultRoute: このインターフェースのDNSサーバーをデフォルトルート向けに使うことを示す
インターフェースが複数ある場合は、Link 2・Link 3... と各インターフェースごとに表示されます。複数のインターフェースが有効な環境では、どのインターフェースのDNSが実際に使われているかをここで確認します。
resolvectl flush-cachesでDNSキャッシュをクリアする
DNSレコードを変更したのに古いIPアドレスで名前解決され続ける——このトラブルの原因の多くは、systemd-resolvedのDNSキャッシュが古いレコードを保持し続けているためです。1. DNSキャッシュをクリアする
$ sudo resolvectl flush-caches
2. クリア前後をstatisticsで確認する
キャッシュの状態は で確認できます。$ resolvectl statistics Transactions Current Transactions: 0 Total Transactions: 156 Cache Current Cache Size: 12 Cache Hits: 89 Cache Misses: 67 DNSSEC Verdicts Secure: 0 Insecure: 0 Bogus: 0 Indeterminate: 0
・Cache Hits: キャッシュから応答した回数(外部DNSへの問い合わせなしで解決した回数)
・Cache Misses: 外部DNSに問い合わせた回数(キャッシュにレコードがなかった回数)
flush-caches実行後にstatisticsを確認すると、Current Cache Sizeが0になっていることが分かります。
$ sudo resolvectl flush-caches $ resolvectl statistics | grep -A3 Cache Cache Current Cache Size: 0 Cache Hits: 89 Cache Misses: 67
resolvectl queryで名前解決をテストする
はdigコマンドと同様に名前解決のテストに使えます。systemd-resolvedを経由した名前解決をテストできるため、「ブラウザでは開けるのにcurlで失敗する」「DNSキャッシュのfresh/cached判定を確認したい」という場面で役立ちます。dig コマンドで DNS を調べる場合はdigが直接外部DNSに問い合わせるのに対して、resolvectl queryはsystemd-resolvedを経由します。この違いを意識して使い分けることで、問題の切り分けが精確になります。
1. ホスト名を解決する
$ resolvectl query www.linuxmaster.jp www.linuxmaster.jp: 183.181.103.xxx -- link: ens160 -- Information acquired via protocol DNS in 28ms. -- Data is authenticated: no; Data was acquired via local or encrypted transport: no -- Data from: network
・Data from: cache ——キャッシュから解決した(外部DNS問い合わせなし)
flush-caches直後に同じホストを解決すると になり、その後すぐに実行すると になることが確認できます。
2. IPアドレスから逆引きする
$ resolvectl query 8.8.8.8 8.8.8.8: dns.google -- link: ens160 -- Information acquired via protocol DNS in 45ms.
DNSトラブルシューティングでの実践的な使い方
「DNSを変更したのに反映されない」という場面でresolvectlを使った切り分け手順を整理します。Linuxサーバーのトラブル対応を体系的に学びたい方には、実機ハンズオンで習得できるLinuxサーバー構築セミナーもご参考ください。1. DNSを変更したのに反映されない時の切り分け手順
よく起きるのが「nmcliでDNSを変更したのに古いIPのまま」というケースです。以下の順番で確認します。手順1: resolvectl statusでDNSサーバーを確認する
$ resolvectl status | grep -A5 "Link 2" Link 2 (ens160) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSSECstub DNS server Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 8.8.4.4
手順2: キャッシュをクリアする
$ sudo resolvectl flush-caches
$ resolvectl query 対象ドメイン名
# DNSサーバー自体が正しく応答しているかを確認する $ dig @8.8.8.8 対象ドメイン名
2. systemd-resolvedが起動していない場合
resolvectl を実行して「Failed to connect to bus: No such file or directory」や「Failed to connect to resolve service」などのエラーが出る場合は、systemd-resolvedが停止しています。# 状態を確認する $ systemctl status systemd-resolved * systemd-resolved.service - Network Name Resolution Active: inactive (dead) # 起動して自動起動も有効にする $ sudo systemctl start systemd-resolved $ sudo systemctl enable systemd-resolved
本記事のまとめ
resolvectl コマンドでできる主要な操作をまとめます。| やりたいこと | コマンド |
|---|---|
| DNS設定とDNSサーバーを確認する | resolvectl status |
| DNSキャッシュをクリアする | sudo resolvectl flush-caches |
| キャッシュ件数・ヒット率を確認する | resolvectl statistics |
| ホスト名を解決してテストする | resolvectl query ホスト名 |
| IPアドレスを逆引きする | resolvectl query IPアドレス |
| 統計情報をリセットする | sudo resolvectl reset-statistics |
| ログレベルを確認する | resolvectl log-level |
>> Linuxサーバー構築セミナーの詳細はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:ip netnsコマンドでLinuxのネットワーク名前空間を操作する方法|仮想NIC・ルーティング分離の実践手順
- この記事の属するカテゴリ:ネットワーク管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます