UbuntuでDNSを確認・変更する方法【resolv.conf/systemd-resolved】

システム管理

UbuntuでDNSの設定を確認したいとき、「cat /etc/resolv.conf でいいの?」と迷う方が多いです。結論から言うと、Ubuntu 24.04 / 22.04 LTS では resolvectl status が最も正確な確認方法です。

理由は、Ubuntu 20.04 以降では /etc/resolv.confsystemd-resolved によって管理されており、実際には 127.0.0.53(ローカルスタブリゾルバ)へのシンボリックリンクになっているからです。つまり cat /etc/resolv.conf では「本当のDNSサーバー」が見えません。

本記事では Ubuntu 24.04 LTS(Docker公式イメージ + 実機)で実際に確認した結果をもとに、DNS設定の確認方法・変更方法を丁寧に解説します。dnsutils(dig / nslookup)のインストール手順と実行例も含みます。

この記事のポイント

  • Ubuntu 22.04/24.04 では /etc/resolv.confsymlink(→ /run/systemd/resolve/stub-resolv.conf
  • resolvectl status で実際のDNSサーバーを確認できる
  • dig / nslookupapt install dnsutils で追加インストール(バージョン 9.18.39、Ubuntu 24.04 で実測)
  • DNS変更は /etc/systemd/resolved.conf または resolved.conf.d/ ドロップインで行う
  • 変更後は sudo systemctl restart systemd-resolved が必要

動作確認環境

本記事のコマンドは Ubuntu 24.04.4 LTS(Docker公式イメージ ubuntu:24.04)で検証しています。Ubuntu 22.04 LTS でも同様に動作しますが、バージョン番号が異なります。VPS・WSL2・実機いずれでも手順は共通です。

目次

  1. UbuntuのDNSの仕組みを理解する
  2. 現在のDNS設定を確認する方法
  3. dnsutils(dig / nslookup)をインストールして調べる
  4. DNS設定を変更する方法
  5. よくあるエラーと解決策
  6. まとめ

UbuntuのDNSの仕組みを理解する

Ubuntu 18.04 以前は /etc/resolv.conf に直接 DNSサーバーのIPアドレスを書いていました。しかし現代のUbuntu(20.04以降)では systemd-resolved というサービスがDNS解決を担当しています。

①systemd-resolved とは

systemd-resolved(システムディー・リゾルブド)は systemd に同梱されているDNSリゾルバです。単なるDNS中継ではなく、以下のような機能を持っています。

  • DNSキャッシュ(同じドメインへの繰り返しクエリを高速化)
  • DNSSEC検証(DNSの改ざん検知)
  • 複数ネットワークインターフェースのDNS管理
  • mDNS / LLMNR サポート(ローカルネットワーク名前解決)

②/etc/resolv.conf はシンボリックリンク

Ubuntu 20.04 以降では /etc/resolv.conf はファイルではなく シンボリックリンクになっています。

Ubuntu 24.04 の /etc/resolv.conf と resolvectl status 表示(再現UI)
Ubuntu 24.04 の /etc/resolv.conf と resolvectl status 表示(再現UI)

上の図のように、ls -la /etc/resolv.conf を実行すると:




ubuntu@vps: ~
$ ls -la /etc/resolv.conf
lrwxrwxrwx 1 root root 39 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

-> ../run/systemd/resolve/stub-resolv.conf と表示されれば、正常にsystemd-resolvedが管理しています。nameserver 127.0.0.53 という行が見えますが、これは systemd-resolved のローカルスタブリゾルバのアドレスで、実際のDNSサーバーではありません。




ubuntu@vps: ~
$ cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
# …
nameserver 127.0.0.53
options edns0 trust-ad
search .

正直、これは初めて見ると「え、こんなアドレス?」と戸惑いますよね。127.0.0.53 は systemd-resolved が待ち受けているポートです。実際のDNSサーバーはその先にあります。

現在のDNS設定を確認する方法

手順1:resolvectl status で確認する(推奨)

実際に使用中のDNSサーバーを確認するには resolvectl status が最も確実です。




ubuntu@vps: ~
$ resolvectl status
Global
Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
Fallback DNS Servers: 1.1.1.1 8.8.8.8
Link 2 (eth0)
Current Scopes: DNS
Current DNS Server: 192.168.1.1

Current DNS Server の行に表示されているのが、実際に使われているDNSサーバーです。VPSやルーターから DHCP で割り当てられたものが表示されます。

手順2:systemctl status で稼働確認

systemd-resolved が正常に動いているか確認します。




ubuntu@vps: ~
$ systemctl status systemd-resolved
● systemd-resolved.service – Network Name Resolution
Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled)
Active: active (running) since Fri 2026-06-13 10:00:00 UTC; 1h ago
Docs: man:systemd-resolved.service(8)
man:org.freedesktop.resolve1(5)
Main PID: 456 (systemd-resolve)
Status: “Processing requests…”

Active: active (running) と表示されれば正常です。inactive になっている場合は sudo systemctl enable --now systemd-resolved で起動・自動起動設定ができます。

手順3:resolvectl query でDNS引きを試す




ubuntu@vps: ~
$ resolvectl query google.com
google.com: 142.251.23.100 — link: eth0
142.251.23.101
142.251.23.113
— Information acquired via protocol DNS in 8.3ms.
— Data is authenticated: no; Data was acquired via local or encrypted transport: no

DNSが正常に機能していれば、ドメインのIPアドレスが返ってきます。

dnsutils(dig / nslookup)をインストールして調べる

dig(Domain Information Groper)や nslookup はより詳細なDNS調査に使えます。Ubuntu 24.04 では別途インストールが必要です。

手順1:dnsutils をインストールする




ubuntu@linuxlab: ~
$ sudo apt update && sudo apt install dnsutils
Setting up bind9-dnsutils (1:9.18.39-0ubuntu0.24.04.5) …
Setting up dnsutils (1:9.18.39-0ubuntu0.24.04.5) …
$ dig -v
DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu

実際に ubuntu:24.04 Docker イメージで確認したところ、dnsutils 1:9.18.39-0ubuntu0.24.04.5 がインストールされ、dig / nslookup / host の3コマンドが使えるようになりました。

なお、dnsutils は Ubuntu 22.04/24.04 ともに bind9-dnsutils移行(メタ)パッケージです。実体は bind9-dnsutils が提供しています。

Ubuntu 22.04/24.04 の dnsutils バージョン比較(実測)
Ubuntu 22.04/24.04 の dnsutils バージョン比較(実測)

手順2:dig でDNS検索する

dig/nslookup コマンド実行結果(ubuntu:24.04 で実測)
dig/nslookup コマンド実行結果(ubuntu:24.04 で実測)

以下は ubuntu:24.04 で実際に実行した結果です。




ubuntu@linuxlab: ~
$ dig google.com @8.8.8.8 +short
142.251.23.100
142.251.23.101
142.251.23.113
142.251.23.102
142.251.23.138
142.251.23.139

@8.8.8.8 のように @ の後にDNSサーバーのIPを指定すると、そのサーバーに直接問い合わせます。Google DNS(8.8.8.8)や Cloudflare DNS(1.1.1.1)を使うと、現在の設定に関係なくDNS引きの動作確認ができます。

google.com が複数のIPアドレスを返しているのは、ロードバランシングのためです(Googleの仕様)。このように実際のDNSクエリ結果を見ることで「DNSが本当に動いているか」を確認できます。

手順3:nslookup で確認する




ubuntu@linuxlab: ~
$ nslookup google.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: google.com
Address: 142.251.169.101

nslookup <ドメイン> <DNSサーバーIP> の形式で使います。Non-authoritative answer とはキャッシュからの応答という意味で、正常な動作です。

手順4:host コマンドで逆引きする




ubuntu@linuxlab: ~
$ host google.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
google.com has address 142.251.23.100
google.com mail is handled by 10 smtp.google.com.
$ host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer dns.google.

host コマンドはIPアドレスからドメイン名を調べる逆引きにも便利です。host 8.8.8.8dns.google と返ってきているのが確認できます。

DNS設定を変更する方法

VPSで運用する場合や、プロバイダのDNSが遅い・信頼できないと感じたとき、自分でDNSサーバーを指定したいケースがあります。Ubuntuでは systemd-resolved の設定ファイルを変更するのが正しい方法です。

注意

/etc/resolv.conf を直接編集しないでください。systemd-resolved が管理しているため、再起動後に上書きされます。また、/etc/resolv.conf のシンボリックリンクを削除・変更するとDNSが機能しなくなります。

方法1:resolved.conf.d/ にドロップインファイルを置く(推奨)

Ubuntu の公式ドキュメントでは、/etc/systemd/resolved.conf 本体を編集するよりも、/etc/systemd/resolved.conf.d/ ディレクトリにドロップインファイルを作成する方法を推奨しています。apt upgrade でメインファイルが更新されても設定が残るためです。

resolved.conf.d/ ドロップインファイルでDNS変更する手順(mock)
resolved.conf.d/ ドロップインファイルでDNS変更する手順(mock)



ubuntu@vps: ~
$ sudo mkdir -p /etc/systemd/resolved.conf.d/
$ sudo nano /etc/systemd/resolved.conf.d/dns.conf

ファイルの内容はこのように書きます(Cloudflare DNS + Google DNSを指定する例):




/etc/systemd/resolved.conf.d/dns.conf
[Resolve]
DNS=1.1.1.1 1.0.0.1
FallbackDNS=8.8.8.8 8.8.4.4

保存後、systemd-resolved を再起動します:




ubuntu@vps: ~
$ sudo systemctl restart systemd-resolved
$ resolvectl status | grep -A3 “DNS Server”
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1 1.0.0.1

方法2:/etc/systemd/resolved.conf を直接編集する

こちらは設定ファイルの全体像を把握したい方や、一時的に設定したい場合に使います。

/etc/systemd/resolved.conf デフォルト内容(ubuntu:24.04 に systemd-resolved をインストールして実測)
/etc/systemd/resolved.conf デフォルト内容(ubuntu:24.04 に systemd-resolved をインストールして実測)

デフォルトでは全オプションがコメントアウトされています(ubuntu:24.04 に systemd-resolved をインストールして確認)。ファイルサイズは 1,551バイト(2026-06-13実測)。




ubuntu@vps: ~
$ sudo nano /etc/systemd/resolved.conf
# 変更前(コメントアウトされている行)
#DNS=
#FallbackDNS=
# 変更後(コメントを外して値を設定)
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
$ sudo systemctl restart systemd-resolved

方法3:netplan で設定する(VPS・Ubuntu Server向け)

Ubuntu Server(VPS)では、/etc/netplan/ の YAML ファイルでネットワーク設定を管理している場合があります。そこに nameservers を書く方法もあります。




ubuntu@vps: ~
$ ls /etc/netplan/
50-cloud-init.yaml
$ sudo nano /etc/netplan/50-cloud-init.yaml
# networkセクションに追記する例
network:
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
$ sudo netplan apply

ただしVPSのクラウドプロバイダ(Vultr / DigitalOcean / Linodeなど)では cloud-init が netplan を再生成することがあるため、resolved.conf.d/ 方式の方が安定しています。

よくあるエラーと解決策

①resolvectl: command not found




ubuntu@vps: ~
$ resolvectl status
bash: resolvectl: command not found

原因:systemd-resolved がインストールされていない(Dockerコンテナや最小インストール)。

解決策sudo apt install systemd-resolved でインストール後、sudo systemctl enable --now systemd-resolved を実行します。

②Temporary failure in name resolution




ubuntu@vps: ~
$ curl https://example.com
curl: (6) Could not resolve host: example.com
Temporary failure in name resolution

原因:DNSサーバーへの到達不可 / systemd-resolved が停止中 / /etc/resolv.conf が壊れている。

解決策

  1. systemctl status systemd-resolved でサービス状態を確認
  2. 停止中なら sudo systemctl restart systemd-resolved
  3. ls -la /etc/resolv.conf でシンボリックリンクを確認
  4. シンボリックリンクが壊れている場合:sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

③dig: command not found

原因:dnsutils が未インストール。

解決策sudo apt install dnsutils(Ubuntu 24.04 では dnsutils 1:9.18.39-0ubuntu0.24.04.5 がインストールされます)。

④resolv.conf を直接編集したら再起動後に戻った

原因:systemd-resolved が管理しているファイルを直接編集したため、再起動時に上書きされた。

解決策/etc/systemd/resolved.conf.d/dns.conf を作成する「方法1」の手順でDNSを設定してください。

まとめ

UbuntuのDNS設定は、慣れるまで「どこを見ればいいの?」「何を変えればいいの?」と迷いやすいポイントですが、整理すると次のとおりです。

  • resolvectl status で現在のDNSサーバーを確認する(Ubuntu 20.04 以降推奨)
  • /etc/resolv.conf は symlink なので直接編集しない
  • dnsutils(dig / nslookup / host)は apt install dnsutils で追加(Ubuntu 24.04: バージョン 9.18.39-0ubuntu0.24.04.5)
  • DNS変更は /etc/systemd/resolved.conf.d/dns.conf に書いて systemctl restart systemd-resolved
  • dig google.com @1.1.1.1 +short でDNS動作を手軽に確認できる

VPS上でUbuntuを運用するなら、DNSの設定はサーバーの安定稼働に直結します。Cloudflare DNS(1.1.1.1)やGoogle DNS(8.8.8.8)に切り替えると応答速度が改善するケースもあるので、ぜひ試してみてください。

著者アイコン
著者アイコン

VPSでWebサーバーを立てる際は、DNSの名前解決が正常に動いているかを最初に確認しておくと後のトラブルが減ります。dig 自分のドメイン @8.8.8.8 でサーバーのIPと一致しているかチェックする習慣をつけましょう。

VPSの選び方やサーバー構築の基礎については、こちらもあわせてご覧ください。

VPS比較2026年版 — Vultr / DigitalOcean / Linode を実測ベンチで比較

UbuntuにSSHで接続する方法【鍵認証設定まで】

コメント

タイトルとURLをコピーしました