Ubuntuやその他のLinuxディストリビューションを使っていて、ネットワーク設定で困った経験はありませんか?
特にDNSの設定をしようと/etc/resolv.confを開いたら、「これは自動生成ファイルです。編集しないでください」と書かれていて戸惑った方も多いでしょう。
その背後で動いているのがsystemd-resolvedです。今回は、この現代的なDNS管理サービスについて、初心者の方でも分かりやすく解説していきます!
systemd-resolvedとは?基本を理解しよう

systemd-resolved(システムディー・リゾルブド)は、Linuxシステムでネットワークの名前解決を担当するサービスです。
名前解決って何?
インターネット上のサービスにアクセスするとき、私たちは「google.com」のような名前を使いますよね。でも、実際の通信には「142.250.196.78」のようなIPアドレスが必要です。
この「名前からIPアドレスへの変換」を名前解決と呼び、その仕組みをDNSリゾルバーと言います。
systemd-resolvedは、まさにこのDNSリゾルバーの役割を果たすんですよ。
systemdファミリーの一員
systemdはLinuxシステムの初期化システムで、様々なサービスを管理しています。
systemd-resolvedは、そのファミリーの一員として:
- ネットワーク名の解決
- DNSキャッシュの管理
- セキュリティ機能の提供
- 複数のネットワークインターフェースの統合管理
これらの機能を一手に引き受けているんです。
なぜsystemd-resolvedが必要になったの?
従来のLinuxでは、/etc/resolv.confにDNSサーバーを直接書き込む方式でした。
従来の方式の問題点
問題1:複数のネットワークへの対応が難しい
Wi-Fiと有線LANを同時に使う場合、どちらのDNSサーバーを使うべきか判断できませんでした。
問題2:VPN接続での混乱
VPNに接続すると、企業の内部DNSと一般のDNSが混在して、うまく名前解決できないことがありました。
問題3:動的な変更に弱い
ネットワーク環境が変わるたびに、手動で設定を変える必要がありましたね。
systemd-resolvedの解決策
複数のDNSソースを統合管理
各ネットワークインターフェースごとに異なるDNSサーバーを設定でき、適切に使い分けられます。
動的な設定変更に対応
NetworkManagerなどと連携して、ネットワーク環境が変わっても自動的に設定を更新しますよ。
キャッシュ機能で高速化
一度解決した名前をキャッシュして、次回からの応答を高速化します。
セキュリティ機能の統合
DNSSEC(DNSのセキュリティ拡張)にも対応しています。
systemd-resolvedの主な機能
このサービスには、便利な機能がたくさんあります。
DNS解決とキャッシング
基本的なDNS解決:
アプリケーションからの名前解決リクエストを受け取り、適切なDNSサーバーに問い合わせます。
インテリジェントなキャッシング:
頻繁にアクセスするドメイン名をキャッシュに保存し、応答時間を短縮しますね。
DNSSEC検証
DNSSECは、DNS応答が改ざんされていないことを検証する技術です。
systemd-resolvedは、このDNSSEC検証を自動的に行えます。セキュリティ意識の高い環境では重要な機能ですよ。
mDNS対応
mDNS(マルチキャストDNS)は、ローカルネットワーク内で名前解決するための仕組みです。
「printer.local」のようなローカル名を使えるようになります。特にホームネットワークで便利です。
LLMNR対応
LLMNR(Link-Local Multicast Name Resolution)は、Windowsネットワークでよく使われる名前解決の仕組みです。
異種OS混在環境で、相互に名前解決ができるようになりますね。
systemd-resolvedの基本的な使い方
実際にどう使うのか見ていきましょう。
状態の確認
現在の設定や状態を確認するには、以下のコマンドを使います。
# systemd-resolvedの状態確認
systemctl status systemd-resolved
# 詳細な解決情報を表示
resolvectl status
出力例:
Global
Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
DNS Servers: 8.8.8.8
8.8.4.4
Link 2 (enp0s3)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute +LLMNR +mDNS +DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
これで、どのDNSサーバーが使われているか一目で分かりますよ。
手動で名前解決してみる
特定のドメイン名を解決してテストできます。
# ドメイン名を解決
resolvectl query google.com
# 詳細情報も表示
resolvectl query google.com --verbose
出力例:
google.com: 142.250.196.78
-- link: enp0s3
-- Information acquired via protocol DNS in 23.4ms.
どのネットワークインターフェース経由で、どのくらいの時間で解決されたかが分かります。
キャッシュの操作
DNSキャッシュをクリアしたい場合もあります。
# キャッシュをフラッシュ
resolvectl flush-caches
# 統計情報を表示
resolvectl statistics
DNS関連のトラブルシューティングで役立ちますね。
/etc/resolv.confとの関係

systemd-resolvedを使っている環境では、/etc/resolv.confの扱いが特殊です。
スタブリゾルバーの仕組み
多くのディストリビューションでは、/etc/resolv.confはシンボリックリンクになっています。
# シンボリックリンクを確認
ls -l /etc/resolv.conf
典型的な出力:
lrwxrwxrwx 1 root root 39 Mar 15 10:23 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
3つのresolv.confファイル
systemd-resolved環境には、実は3種類のファイルがあります。
stub-resolv.conf(推奨)
/run/systemd/resolve/stub-resolv.conf
ローカルのスタブリゾルバー(127.0.0.53)を指定します。ほとんどの場合、これを使うのが適切ですよ。
resolv.conf(動的生成)
/run/systemd/resolve/resolv.conf
現在使用中の実際のDNSサーバーのリストです。レガシーなアプリケーション用に用意されています。
static resolv.conf(フォールバック)
/etc/systemd/resolved.conf
設定ファイルで、デフォルトのDNSサーバーなどを指定できます。
設定ファイルの編集方法
systemd-resolvedの動作をカスタマイズしたい場合は、設定ファイルを編集します。
メイン設定ファイル
sudo nano /etc/systemd/resolved.conf
主な設定項目:
[Resolve]
# グローバルDNSサーバー
DNS=8.8.8.8 8.8.4.4
#FallbackDNS=1.1.1.1 1.0.0.1
# ドメイン
#Domains=
# DNSSEC検証
DNSSEC=allow-downgrade
# DNS over TLS
#DNSOverTLS=no
# mDNSを有効化
#MulticastDNS=yes
# LLMNRを有効化
#LLMNR=yes
# キャッシュサイズ
#Cache=yes
#CacheFromLocalhost=no
# DNSスタブリゾルバー
#DNSStubListener=yes
編集後は、サービスを再起動します。
sudo systemctl restart systemd-resolved
特定のネットワーク向け設定
NetworkManagerを使っている場合、接続ごとにDNSを設定できます。
# GUI設定(Ubuntu/Gnome)
# 設定 → ネットワーク → 接続の設定 → IPv4/IPv6タブ → DNS
# CLIでの設定(nmcli)
nmcli connection modify "接続名" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection up "接続名"
VPNや企業ネットワークでは、この方法が便利ですね。
DNS over TLS(DoT)の設定
systemd-resolvedは、暗号化されたDNS通信もサポートしています。
DNS over TLSを有効にする
設定ファイルで有効化します。
sudo nano /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google
DNSOverTLS=opportunistic
モードの説明:
| モード | 説明 |
|---|---|
no | DNS over TLSを使用しない |
opportunistic | 可能なら使用(推奨) |
yes | 必ず使用(サーバーが対応していない場合は失敗) |
設定を反映します。
sudo systemctl restart systemd-resolved
動作確認
DNS over TLSが使われているか確認しましょう。
resolvectl status
+DNSOverTLSと表示されていればOKです。
トラブルシューティング:よくある問題と解決法

systemd-resolvedで問題が起きたときの対処法を紹介します。
問題1:名前解決ができない
症状:
インターネットに接続できない、Webサイトが開けない。
確認手順:
# systemd-resolvedが動作しているか確認
systemctl status systemd-resolved
# 手動で解決を試みる
resolvectl query google.com
# ログを確認
journalctl -u systemd-resolved -n 50
解決策:
# サービスを再起動
sudo systemctl restart systemd-resolved
# キャッシュをクリア
resolvectl flush-caches
問題2:特定のドメインだけ解決できない
症状:
社内サーバーや.localドメインが解決できない。
原因:
VPNやスプリットDNSの設定が不適切な可能性があります。
解決策:
# 現在の設定を確認
resolvectl status
# 特定のドメインに対するDNSサーバーを指定
resolvectl dns インターフェース名 DNSサーバーIP
resolvectl domain インターフェース名 ドメイン名
例:
# tun0インターフェースで会社のDNSを使用
sudo resolvectl dns tun0 10.0.0.1
sudo resolvectl domain tun0 company.local
問題3:resolv.confが書き換わってしまう
症状:
/etc/resolv.confを編集しても、すぐに元に戻ってしまう。
原因:
systemd-resolvedが自動管理しているためです。
解決策:
直接編集するのではなく、正しい設定方法を使いましょう。
# systemd-resolved用の設定ファイルを編集
sudo nano /etc/systemd/resolved.conf
# または、NetworkManagerで設定
nmcli connection modify "接続名" ipv4.dns "8.8.8.8"
問題4:DNSSECエラー
症状:
「DNSSEC validation failed」というエラーが出る。
原因:
DNSサーバーがDNSSECに対応していないか、設定に問題があります。
一時的な解決策:
sudo nano /etc/systemd/resolved.conf
[Resolve]
DNSSEC=no
sudo systemctl restart systemd-resolved
ただし、これはセキュリティを下げるので、本番環境では注意が必要です。
systemd-resolvedを無効にする方法
どうしても従来の方式に戻したい場合の手順です。
完全に無効化する
# systemd-resolvedを停止・無効化
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# シンボリックリンクを削除
sudo unlink /etc/resolv.conf
# 手動でresolv.confを作成
sudo nano /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
# 編集を防ぐため、属性を変更(オプション)
sudo chattr +i /etc/resolv.conf
resolvconfやdnsmasqに切り替える
別のDNS管理ツールを使うこともできます。
# resolvconfをインストール(Ubuntu/Debian)
sudo apt install resolvconf
# または、dnsmasqをインストール
sudo apt install dnsmasq
ただし、最近のディストリビューションはsystemd-resolvedを前提に設計されているため、無効化すると一部の機能が使えなくなる可能性があることに注意しましょう。
実用例:様々なシナリオでの活用
実際の使用場面を見てみましょう。
シナリオ1:VPN接続時の設定
VPNで会社に接続したとき、社内DNSを使いたい場合です。
# VPN接続を確立
sudo openvpn --config company.ovpn
# VPNインターフェース(tun0)にDNSを設定
sudo resolvectl dns tun0 10.0.0.53
sudo resolvectl domain tun0 ~company.local
# 確認
resolvectl status tun0
これで、server.company.localのような社内ドメインが解決できるようになります。
シナリオ2:広告ブロックDNSの利用
AdGuard DNSなどを使って、広告をブロックしたい場合です。
sudo nano /etc/systemd/resolved.conf
[Resolve]
DNS=94.140.14.14 94.140.15.15
DNSOverTLS=opportunistic
sudo systemctl restart systemd-resolved
システム全体で広告がブロックされるようになりますよ。
シナリオ3:開発環境での.localドメイン使用
ローカル開発で「project.local」のようなドメインを使いたい場合です。
sudo nano /etc/systemd/resolved.conf
[Resolve]
MulticastDNS=yes
LLMNR=yes
sudo systemctl restart systemd-resolved
これで、Avahi(mDNSデーモン)と連携して、ローカル名が使えるようになります。
セキュリティのベストプラクティス
systemd-resolvedを安全に使うためのポイントです。
DNS over TLSを有効にする
通信を暗号化することで、DNSスプーフィング攻撃を防げます。
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=opportunistic
DNSSECを有効にする
DNS応答の改ざんを検出できるようになります。
[Resolve]
DNSSEC=allow-downgrade
allow-downgradeは、対応していないサーバーでも動作するモードです。
信頼できるDNSプロバイダーを使う
プライバシーポリシーが明確で、信頼できるDNSサービスを選びましょう。
推奨サービス:
- Cloudflare(1.1.1.1)
- Google Public DNS(8.8.8.8)
- Quad9(9.9.9.9)
不要なプロトコルを無効化
LLMNRは攻撃に悪用される可能性があるため、必要なければ無効にします。
[Resolve]
LLMNR=no
パフォーマンス最適化
systemd-resolvedのパフォーマンスを向上させる方法です。
キャッシュサイズの調整
デフォルトでは、約4096エントリがキャッシュされます。
# 統計情報を確認
resolvectl statistics
キャッシュヒット率が低い場合は、設定ファイルで調整できます。
[Resolve]
Cache=yes
応答時間の監視
各DNSサーバーの応答時間を確認して、遅いサーバーを除外しましょう。
# 詳細情報を表示
resolvectl query google.com --verbose
並列クエリの活用
複数のDNSサーバーを設定すると、並列にクエリが送信されて高速化します。
[Resolve]
DNS=8.8.8.8 8.8.4.4 1.1.1.1
よくある質問
Q: systemd-resolvedは必須?無効にしても大丈夫?
A: 必須ではありませんが、無効にすると一部の機能(VPNのスプリットDNSなど)が使いにくくなります。特別な理由がなければ、有効にしておくことをおすすめしますよ。
Q: キャッシュはどのくらいの期間保持される?
A: DNS応答に含まれるTTL(Time To Live)値に従います。一般的には数分〜数時間ですが、ドメインによって異なりますね。
Q: systemd-resolvedとdnsmasqの違いは?
A: どちらもローカルDNSキャッシュですが、systemd-resolvedはsystemdと統合されていて、現代的な機能(DNS over TLS、DNSSECなど)をサポートしています。dnsmasqはシンプルで軽量ですが、機能は限定的です。
Q: Docker環境での注意点は?
A: Dockerは独自のDNS解決を行うため、systemd-resolvedとコンフリクトすることがあります。Dockerが127.0.0.53を使えるよう設定を調整する必要がある場合があります。
Q: 複数のネットワークインターフェースがある場合は?
A: systemd-resolvedは自動的に最適なDNSサーバーを選択します。各インターフェースに異なるDNS設定をすることもできますよ。
まとめ:systemd-resolvedを使いこなそう
systemd-resolvedについて、重要なポイントをおさらいします。
今日学んだこと:
- systemd-resolvedは現代的なDNSリゾルバー
- 複数のネットワークを統合管理できる
- DNSSEC、DNS over TLS、mDNSをサポート
/etc/resolv.confは自動管理されるresolvectlコマンドで状態確認・操作- 設定は
/etc/systemd/resolved.confで行う - VPNやスプリットDNSにも対応
- セキュリティとパフォーマンスの両立が可能
systemd-resolvedは、一見複雑に見えますが、実は非常に便利なツールです。
特に、複数のネットワークを切り替えながら使うノートPCや、VPNを頻繁に使う環境では、その真価を発揮しますよ。従来の方式に比べて、設定が自動化されて手間が減るだけでなく、セキュリティも向上するんです。
最初は戸惑うかもしれませんが、基本的な使い方を覚えてしまえば、快適なLinux生活が待っています。ぜひ、今日学んだ知識を活かして、systemd-resolvedを使いこなしてみてください!
関連記事:
- NetworkManagerの基本と設定方法
- VPN接続の設定とトラブルシューティング
- Linuxのネットワーク診断コマンド集

コメント