DNS設定 · 3 min read · Sep 08, 2025
Rocky Linux 9でUnboundを使用してローカルDNSリゾルバーを設定する方法

Unboundは、検証、再帰、およびキャッシュDNSリゾルバーに使用できる無料のオープンソースDNSサーバーソフトウェアです。これは、DNS-over-TLS(DoT)、DNS-over-HTTPS(DoH)、クエリ名の最小化、DNSSEC検証キャッシュの積極的使用、および権限ゾーンのサポートをサポートする機能豊富なDNSサーバーです。Unboundは、DNSのプライバシーとセキュリティに重点を置いていますが、速度とパフォーマンスを犠牲にすることはありません。
Unboundは主にNLnet Labsによって開発され、BSDライセンスの下で配布されており、DNSサーバーのオープンスタンダードに基づく最新の機能をサポートしています。Unboundは厳密に監査されており、Linux、BSD、およびmacOSで実行できます。UnboundはこれらのOSのほとんどで利用可能で、システムパッケージマネージャーを介してインストールできます。
このチュートリアルでは、Rocky Linux 9サーバーでUnboundを使用してローカルDNSサーバーを設定します。Unboundを権威のある、検証済み、再帰的キャッシュDNSとして構成します。それに加えて、DNS-over-TLS(DoT)を有効にして、ローカルネットワークのDNSリゾルバーとしてUnboundを設定します。
このチュートリアルの最後までに、RsyslogとLogrotateを介してUnboundログを設定し、UnboundをDNSリゾルバーとして使用するLinuxクライアントマシンを設定し、そこからインストール全体を確認します。
前提条件
このチュートリアルを始める前に、次の要件があることを確認してください:
- Rocky Linux 9がインストールされたサーバー - この例では、ホスト名が‘unbound-rocky’で、IPアドレスが‘192.168.5.25’のRocky Linuxを使用します。
- root/sudo管理者権限を持つ非rootユーザー。
- SELinuxが許可モードで実行されています。
それだけです。すべての要件が整ったら、サーバーにUnboundをインストールし始めてください。
Unboundのインストール
Unboundは、Linux、BDS、macOSを含むほとんどのオペレーティングシステムをサポートするDNSサーバーソフトウェアです。Rocky Linuxでは、Unboundパッケージは公式のRocky Linux AppStreamリポジトリにデフォルトで利用可能です。
この最初のステップでは、Rocky LinuxシステムにUnboundパッケージをインストールします。
次に、以下のdnfコマンドを実行して、AppStreamリポジトリで利用可能な’unbound‘パッケージを確認します。この執筆時点では、Rocky Linux AppStreamリポジトリはUnbound1.16を提供しています。
sudo dnf info unbound出力:

以下のdnfコマンドを使用してUnboundをインストールします。プロンプトが表示されたら、yを入力して確認し、ENTERを押して続行します。
sudo dnf install unbound出力:

Unboundがインストールされたら、以下のsystemctlコマンドユーティリティを介して’unbound’サービスを開始および有効にします。これにより、Rocky LinuxサーバーでUnboundが起動し、システム起動時に自動的に実行されるようになります。
sudo systemctl start unbound
sudo systemctl enable unbound以下のsystemctlコマンドを使用してUnboundサービスを確認します。出力’active (running)‘は、Unboundサービスが実行中であることを確認します。出力’loaded ….; enabled;…‘は、Unboundサービスが有効であることを確認します。
sudo systemctl status unbound出力:

Unboundは現在、デフォルトの設定ファイル’/etc/unbound/unbound.conf‘でインストールされ、実行中です。次に、Unbound設定ファイル’/etc/unbound/unbound.conf‘を変更し、Unboundを権威のある、検証済み、再帰的キャッシュDNSとして設定し、DoTを有効にしたDNSリゾルバーとしてUnboundを有効にします。
Unboundの設定
デフォルトでは、Unbound設定ファイルは’/etc/unbound/unbound.conf’にあります。このステップでは、設定ファイル’/etc/unbound/unbound.conf’を変更し、Unboundのインストールを設定および最適化します。
Unboundを権威のある、検証済み、再帰的キャッシュDNSとして実行するように設定します。それに加えて、パフォーマンス、プライバシー、およびセキュリティのためにUnboundのインストールを最適化します。最後に、ローカルネットワーク用のDNSリゾルバーとしてUnboundを設定します。
最初に、以下のwgetコマンドを実行して、ルートDNSファイルを’/etc/unbound/root.hints‘にダウンロードします。次に、ファイル‘/etc/unbound/root.hints‘の所有権をユーザーとグループ’unbound‘に変更します。
wget https://www.internic.net/domain/named.root -O /etc/unbound/root.hints
sudo chown unbound:unbound /etc/unbound/root.hints次に、デフォルトのUnbound設定ファイルを’/etc/unbound/unbound.conf.orig‘にバックアップし、以下のnanoエディタコマンドを使用して元のファイル‘/etc/unbound/unbound.conf’を変更します。
sudo cp -v /etc/unbound/unbound{.conf,.conf.orig}
sudo nano /etc/unbound/unbound.confさあ、Unboundの設定を始めましょう。
Unbound基本設定
最初に、Unboundサービスが実行されるIPアドレスとポートを設定します。次に、上流接続を認証するために使用される証明書バンドルを設定し、’root-hints’パラメータを介してルートDNSサーバーを追加します。
以下の行を’server:‘セクション内に追加します。これらの設定により、UnboundはローカルIPアドレス‘192.168.5.25’でデフォルトのUDPポート’53‘で実行されます。
server:
...
...
# interface-automatic: no
do-ip6: no
interface: 192.168.5.25
port: 53
prefetch: yes
tls-cert-bundle: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
root-hints: /etc/unbound/root.hints詳細パラメータ:
- do-ip6: UnboundをIPv6で実行するには’yes‘を使用し、IPv6を無効にするには’no‘を設定します。
- interface: unboundが実行されるネットワークインターフェースまたはIPアドレス。IPアドレスまたは’eth0’のようなインターフェース名を使用できます。また、次のように特定のポートで実行することもできます’IP-ADDRESS@PORT’。
- port: Unboundが実行されるポートを指定し、クライアントの接続がこのポートで処理されます。デフォルトのDNSポートは53です。
- prefetch:ほぼ期限切れのメッセージキャッシュエントリのプリフェッチを有効にするには’yes‘に設定します。
- tls-cert-bundle: 上流接続を認証するために使用される証明書。RHELベースのディストリビューションでは、証明書ファイルは‘/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem’にあります。
- root-hints: ルートDNSサーバーの詳細を含むファイル。あなたはこのファイルを‘/etc/unbound/root.hints’にダウンロードしました。
DNSキャッシュの有効化
次に、以下の行を追加して、Unboundを介して再帰的キャッシュDNSを有効にします。これにより、Unboundサーバーでクライアントによって行われたDNSクエリが一定の時間キャッシュされます。
cache-max-ttl: 14400
cache-min-ttl: 1200詳細パラメータ:
- cache-max-ttl: RRSetsおよびDNSキャッシュ内のメッセージのTTL(Time To Live)。形式は秒単位です。
- cache-min-ttl: キャッシュの最小TTL。デフォルトは0ですが、’1200‘秒など、好みに応じて変更できます。これを1時間以上に設定しないでください。古いデータのために問題が発生します。
Unboundの強化
プライバシーとセキュリティのためのいくつかのパラメータは、RHELベースのディストリビューションでデフォルトで有効になっています。しかし、次のような追加のパラメータを追加することもできます。
hide-identity: yes
hide-version: yes
use-caps-for-id: yes詳細パラメータ:
- hide-identity: id.serverまたはhostname.bindに関するbindクエリからの回答を無効にするにはyesに設定します。
- hide-version: version.serverおよびversion.bindクエリを無効にするにはyesに設定します。
- use-caps-for-id: スプーフィングの試みを防ぐために、クエリで‘0x20-encoded’の使用を有効にするにはyesに設定します。
プライベートアドレスとアクセス制御リストの定義
次に、ローカルネットワーク用のprivate-addressとACL(アクセス制御リスト)を定義する必要があります。以下の行のローカルサブネットを現在のネットワーク環境に変更してください。
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
# (再帰的)クエリを行うことが許可されているクライアントを制御します
access-control: 127.0.0.1/32 allow_snoop
access-control: ::1 allow_snoop
access-control: 127.0.0.0/8 allow
access-control: 192.168.5.0/24 allow詳細パラメータ:
- private-address: インフラストラクチャ上のプライベートネットワークサブネットを定義します。これらのプライベートアドレスを持つことが許可されているのは、’private-domain‘および‘local-data‘名のみです。
- access-control: Unboundサーバーに対して(再帰的)クエリを行うことが許可されているクライアントのアクセス制御を定義します。パラメータ’allow‘は再帰を有効にし、’allow_snoop‘は再帰的および非再帰的の両方を有効にします。
ローカルドメイン名とサブドメインの設定
プライベートアドレスとアクセス制御リストの設定後、次にUnboundの’local-zone’パラメータを介してローカルドメイン名を作成します。これは、特にローカルネットワーク上に複数の自己ホストアプリケーションがある場合に非常に便利です。ドメイン名やサブドメインを簡単に定義し、特定のターゲットIPアドレスにポイントできます。
この例では、’static‘ローカルドメイン’garden.lan‘を設定し、’local-data‘パラメータを介して複数のサブドメインを作成します。各サブドメインは特定のIPアドレスにポイントされ、また、’local-data-ptr‘パラメータを介してPTRレコードを作成します。
# ローカルゾーン
local-zone: "garden.lan." static
local-data: "firewall.garden.lan. IN A 10.0.0.1"
local-data: "vault.garden.lan. IN A 10.0.0.2"
local-data: "media.garden.lan. IN A 10.0.0.3"
local-data: "docs.garden.lan. IN A 10.0.0.4"
local-data: "wiki.garden.lan. IN A 10.0.0.5"
local-data-ptr: "10.0.0.1 firewall.garden.lan"
local-data-ptr: "10.0.0.2 vault.garden.lan"
local-data-ptr: "10.0.0.3 media.garden.lan"
local-data-ptr: "10.0.0.4 docs.garden.lan"
local-data-ptr: "10.0.0.5 wiki.garden.lan"詳細パラメータ:
- local-zone: ここでローカルドメインを定義します。
- local-data: サブドメインのAレコードを定義し、どのローカルIPアドレスが解決されるかを指定します。
- local-data-ptr: サブドメインのptrレコードを定義します。
Unboundの最適化と調整
次に、Unboundのインストールを最適化するために以下の行を追加します。現在の環境に応じて、以下のパラメータを調整および調整できます。
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 8m詳細パラメータ:
- msg-cache-slabs: メッセージキャッシュに使用するスラブの数。Unboundがキャッシュ用により多くのメモリを使用するように最適化するために8に設定します。
- rrset-cache-slabs: RRsetキャッシュに使用するスラブの数。UnboundがRRSetキャッシュ用により多くのメモリを使用するように最適化するために8に設定します。
- infra-cache-slabs: インフラストラクチャキャッシュに使用するスラブの数。Unboundがインフラストラクチャキャッシュ用により多くのメモリを使用するように最適化するために8に設定します。
- key-cache-slabs: キーキャッシュに使用するスラブの数。Unboundがキーキャッシュ用により多くのメモリを使用するように最適化するために8に設定します。
- rrset-cache-size: RRSetキャッシュ用のメモリ量を指定します。この例では256MBを使用し、デフォルトはわずか4MBです。
- msg-cache-size: メッセージキャッシュ用のメモリ量を指定します。この例では128MBを使用し、デフォルトはわずか4MBです。
- so-rcvbuf: DNSポート53/udpのバッファサイズを8MBに設定します。
DoT(DNS-over-TLS)を使用したDNSリゾルバーとしてUnboundを設定
最後に、新しいセクション’forward-zone‘を追加して、Unboundをローカルネットワーク用のDNSリゾルバーとして設定します。この例では、DoT(DNS-over-TLS)が有効なQuad9 DNSサーバーを上流DNSリゾルバーとして使用します。
forward-zone:
name: "."
forward-ssl-upstream: yes
## IBM IPv6 Quad9 over TLSも追加
forward-addr: 9.9.9.9@853#dns.quad9.net
forward-addr: 149.112.112.112@853#dns.quad9.net詳細パラメータ:
- forward-zone: Unboundのフォワードゾーンを定義します。
- name: “.”に設定して、すべてのDNSクエリをフォワードします。
- forward-addr: すべてのDNSクエリをフォワードするために特定のフォワーダーを使用します。この例では、Quad9 DNSを使用し、DNS-over-TLS (DoT)を有効にしています。
すべてが完了したら、ファイル’/etc/unbound/unbound.conf‘を保存して終了します。
次に、以下のコマンドを実行してUnboundの設定を確認し、正しい設定が行われていることを確認します。成功すると、出力は’unbound-checkconf: no errors in /etc/unbound/unbound.conf‘になります。
unbound-checkconf
次に、以下のsystemctlコマンドユーティリティを介してUnboundサービスを再起動し、変更を適用します。
sudo systemctl restart unboundこれで、Unboundの設定が完了し、IPアドレス’192.168.5.25‘でデフォルトのUDPポート’53‘で実行されています。
次のステップでは、firewalldを設定してDNSポートを開き、RsyslogとLogrotateを介してUnboundのログを設定します。
Firewalldの設定
UnboundはデフォルトのUDPポート53で稼働しています。次に、firewalldでDNSポート53/UDPを開き、クライアントがUnbound DNSサーバーにアクセスできるようにする必要があります。
以下のfirewall-cmdコマンドを実行して、新しいサービス’dns‘を追加します。次に、firewalldを再読み込みして変更を適用します。成功すると、ターミナルに’success‘のような出力が表示されます。
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload次に、以下のコマンドを実行してfirewalldで有効なサービスのリストを確認します。’dns‘サービスがfirewalldに追加されていることが確認できます。
sudo firewall-cmd --list-all出力:

RsyslogとLogrotateを介したUnboundログの設定
firewalldの設定後、rsyslogとlogrotateを介してUnboundのログファイルを設定します。rsyslogサービスはUnbound用の特定のログファイルを作成し、logrotateは一定の時間でUnboundのログファイルをローテートします。
以下のnanoエディタコマンドを使用して新しい設定ファイル’/etc/rsyslog.d/unbound.conf‘を作成します。
sudo nano /etc/rsyslog.d/unbound.confファイルに以下の行を追加します。これにより、Rsyslogは’$programname’ == ‘unbound’のための新しいログファイル’/var/log/unbound.log’を作成します。
# Unboundアプリケーションによって生成されたログメッセージ
if $programname == 'unbound' then /var/log/unbound.log
# それ以上の処理を停止します
& stop完了したら、ファイル’/etc/rsyslog.d/unbound.conf‘を保存して終了します。
次に、以下のnanoエディタコマンドを使用して新しいLogrotate設定ファイル’/etc/logrotate.d/unbound‘を作成します。
sudo nano /etc/logrotate.d/unboundファイルに以下の行を追加します。これにより、Unboundのログファイル’/var/log/unbound.log‘のログローテーションが毎日行われます。
/var/log/unbound.log {
daily
rotate 7
missingok
create 0640 root adm
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}ファイルを保存してエディタを終了します。
最後に、以下のsystemctlコマンドユーティリティを実行して、RsyslogとLogrotateサービスの両方を再起動し、システムに変更を適用します。
sudo systemctl restart rsyslog
sudo systemctl restart logrotateこれで、Unboundのインストールが完了しました。次のステップでは、UnboundをDNSリゾルバーとして使用するためにローカルクライアントマシンを設定する方法を2つの方法で学び、そこからUnbound DNSサーバーを確認します。

クライアント用のDNSリゾルバーの設定
クライアントマシンでDNSリゾルバーを設定するには、さまざまな方法を使用できます。このステップでは、NetworkManagerを介してDNSリゾルバーを設定する方法と、systemd-resolvedとNetworkManagerを組み合わせて使用する方法を学びます。
NetworkManagerを介して
NetworkManagerを介してDNSリゾルバーを直接設定する場合は、’/etc/NetworkManager/system-connections/‘ディレクトリに保存されているネットワークインターフェースの設定を編集する必要があります。
この例では、クライアントマシンのメイン接続は’eth0‘であるため、NetworkManagerの設定は‘/etc/NetworkManager/system-connections/eth0.nmconnection‘である必要があります。eth1など、異なるインターフェース名がある場合があります。
以下のnanoエディタコマンドを使用してNetworkManagerインターフェース設定ファイル’/etc/NetworkManager/system-connections/eth0.nmconnection‘を開きます。
sudo nano /etc/NetworkManager/system-connections/eth0.nmconnection‘[ipv4]‘セクションに以下の行を追加します。また、’dns‘パラメータのIPアドレスをUnbound DNSサーバーのものに変更してください。
[ipv4]
...
dns=192.168.5.25
ignore-auto-dns=true完了したら、ファイルを保存して終了します。
次に、以下のsystemctlコマンドを実行してNetworkManagerサービスを再起動し、変更を適用します。その後、catコマンドを介してDNSリゾルバー設定ファイル‘/etc/resolv.conf’を確認します。
sudo systemctl restart NetworkManager
cat /etc/resolv.confクライアントマシンのデフォルトDNSリゾルバーとしてIPアドレス’192.168.5.25‘が設定されていることを示す出力が得られるはずです。

systemd-resolvedとNetworkManagerを介して
DNSリゾルバーを設定する別の方法は、systemd-resolvedとNetworkManagerを介してです。これにより、システム全体でDNSリゾルバーを簡単に変更でき、システムのネットワークインターフェースに依存しなくなります。
RHELベースのディストリビューションでは、systemd-resolvedはまだインストールされていません。以下のdnfコマンドを介して簡単にインストールできます。プロンプトが表示されたら、yを入力して確認し、ENTERを押して続行します。
sudo dnf install systemd-resolved出力:

systemd-resolvedがインストールされたら、以下のnanoエディタコマンドを使用して設定ファイル’/etc/systemd/resolved.conf‘を開きます。
sudo nano /etc/systemd/resolved.conf‘[Resolver]’セクションで、’DNS‘パラメータのコメントを外し、Unbound DNSサーバーのIPアドレスを追加します。
[Resolver]
DNS=192.168.5.25完了したら、ファイルを保存して終了します。
次に、以下のsystemctlコマンドを実行して’systemd-resolved’サービスを開始および有効にします。
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
次に、’systemd-resolved’サービスを確認して、サービスが実行中であることを確認します。出力は’active (running)‘のようになり、サービスが実行中であることを確認します。また、出力‘Loaded ../../systemd-resolved.service; enabled;..‘は、サービスが有効であり、システム起動時に自動的に開始されることを確認します。
sudo systemctl status systemd-resolved出力:

systemd-resolvedが実行中の状態で、次にNetworkManagerサービスのDNSバックエンドを変更します。
以下のnanoエディタコマンドを使用してNetworkManager設定ファイル’/etc/NetworkManager/NetworkManager.conf‘を開きます。
sudo nano /etc/NetworkManager/NetworkManager.conf‘[main]‘セクションの下に、’dns‘パラメータを値’systemd-resolved‘で追加します。これにより、NetworkManagerのDNSサーバーが’systemd-resolved’サービスを使用するように上書きされます。
[main]
dns=systemd-resolved完了したら、ファイルを保存して終了します。
次に、以下のsystemctlコマンドを実行してNetworkManagerサービスを再起動し、変更を適用します。NetworkManagerの新しいDNSリゾルバーは’/run/NetworkManager/resolv.conf‘ファイルに書き込まれます。
sudo systemctl restart NetworkManager以下のコマンドを実行して、デフォルトファイル’/etc/resolve.conf’を削除します。次に、’/run/NetworkManager/resolv.conf‘の新しいシンボリックリンクファイルを’/etc/resolv.conf‘に作成します。
rm -f /etc/resolv.conf
ln -s /run/NetworkManager/resolv.conf /etc/resolv.confこれで、クライアントマシンはsystemd-resolvedをDNSリゾルバーとして使用しています。’systemd-resolved’の背後で、Unbound DNSサーバーを使用しています。
以下は、systemd-resolvedとNetworkManagerを使用した後の‘/etc/resolv.conf’ファイルの詳細です。
cat /etc/resolv.conf出力:

Unbound DNSサーバーの確認
以下のdigコマンドを実行して、Unbound DNSがDNSリゾルバーとして機能していることを確認します。パラメータ’@192.168.5.25‘は、IPアドレス’192.168.5.25‘で実行されているUnbound DNSサーバーを使用していることを確認します。
dig @192.168.5.25成功すると、以下の出力のようにルートDNSサーバーからの回答を受け取ります。また、ヘッダー出力に’ad‘(認証データ)フラグが表示され、DNSSECが有効であることがわかります。

次に、以下のコマンドを実行して、クライアントがインターネット上のドメイン名にアクセスできることを確認します。
dig google.com
dig fb.com成功すると、ドメイン’google.com‘および’fb.com‘のDNSレコードの詳細が出力されます。クエリに応答するDNSリゾルバーが’127.0.0.53#53‘であることがわかります。これは、systemd-resolvedがUnboundをデフォルトのリゾルバーとして使用していることを示しています。また、各クエリの’Query time‘も表示され、’google.com‘へのクエリ時間は’74ms‘、’fb.com‘へのクエリ時間は’154ms‘です。
google.comの出力:

fb.comの出力:

上記のdigコマンドを再実行すると、’Query time‘が短縮されるはずです。これにより、クエリがキャッシュされ、DNSキャッシュが機能していることが確認されます。
dig google.com
dig fb.com出力:


次に、以下のdigコマンドを実行してローカルドメインまたはサブドメインを確認します。成功すると、各サブドメインがUnbound設定ファイル’/etc/unbound/unbound.conf‘で設定された正しいIPアドレスにポイントされます。
dig firewall.garden.lan +short
dig vault.garden.lan +short
dig media.garden.lan +short出力:

次に、以下のdigコマンドを実行して、PTRレコードが正しいドメイン名にポイントされていることを確認します。
dig -x 10.0.0.1 +short
dig -x 10.0.0.2 +short
dig -x 10.0.0.3 +short出力:

最後に、tcpdumpを介してDoT(DNS over TLS)を確認することもできます。以下のdnfコマンドを介してUnboundサーバーに’tcpdump‘パッケージをインストールします。
sudo dnf install tcpdumpプロンプトが表示されたらyを入力し、ENTERを押して続行します。

次に、以下のtcpdumpコマンドを実行して、DoTポート853でインターフェース’eth0‘のトラフィックを監視します。この例では、Unbound DNSはIPアドレス’192.168.5.25‘で実行されており、インターフェースは’eth0‘です。
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'クライアントマシンに移動し、以下のコマンドを実行して、digコマンドを介して外部/インターネットドメイン名にアクセスします。
dig twitter.com出力:

その後、Unboundサーバーに戻り、tcpdump出力にこのような出力が表示されるはずです。

これで、Unboundを介してローカルDNSサーバーをインストールおよび構成しました。また、RHELクライアントでsystemd-resolvedとNetworkManagerを介してDNSリゾルバーを構成しました。
結論
このガイドでは、Rocky Linux 9サーバーにUnboundローカルDNSサーバーをインストールしました。DNSキャッシュ、DNSSEC(デフォルトで有効)、プライベートアドレスとACLの構成、local-zoneを介したローカルドメインの追加、次にDoT(DNS-over-TLS)を使用したDNSリゾルバーとしてUnboundを構成しました。
さらに、基本的なDNSプライバシーとセキュリティを構成し、Unboundを最適化し、Rsyslogとlogrotateを介してUnboundログを構成しました。
このガイドの最後までに、NetworkManagerとsystemd-resolvedを介してRHELベースのディストリビューションでDNSリゾルバーを設定する方法も学びました。また、DNSサーバーを確認するためのdigコマンドの基本的な使用法も学びました。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。