メインコンテンツへスキップ
  1. ブログ/

【初心者向け】AlmaLinux 10 で Knot DNS 権威サーバーを構築する方法

·
DNS AlmaLinux Linux
目次

【初心者向け】AlmaLinux 10 で Knot DNS 権威サーバーを構築する方法
【初心者向け】AlmaLinux 10 で Knot DNS 権威サーバーを構築する方法

初めに
#

DNSサーバーは、現代のインターネットを支える基盤技術のひとつです。

私たちが日常的に利用している Web サイトへのアクセスや、メールの送受信といった通信の多くは、DNS による名前解決機能によって成り立っています。

しかし、AWS Route 53GCP Cloud DNS といった高性能なクラウド DNS サービスの普及により、権威 DNS サーバーを自前で構築・運用する機会は、減少傾向にあります。

一方で、オンプレミス環境での運用や独自インフラの構築、DNS の仕組みを理解するための学習用途など、クラウドに依存しない DNS サーバーを構築したい場面も今なお存在します。

また、近年ではデータ主権やセキュリティ、法令遵守の観点から国産サービスや国内環境を選択する動きも広がっており、自前でインフラを構築・管理する重要性があらためて注目されています。

こうした背景を踏まえて、本記事では最新の AlmaLinux 10 環境にて Knot DNS を利用し、権威 DNS サーバーを構築する方法を、初心者の方に向けて解説します。

Knot DNS とは
#

Knot DNS は、チェコのドメインレジストリである CZ.NIC によって開発されている、OSS(オープンソース)の 権威 DNS サーバー です。

再帰的な名前解決機能は持たず、権威 DNS サーバーとしての機能に特化しています。

そのため、キャッシュ DNS サーバーやフォワーダとしては動作しません。

Knot DNS は 高パフォーマンスかつ高効率に設計されており、広く利用されている BIND と比較しても、高速に動作するとされています。

また、設定ファイルはシンプルな書き方になっており、DNS サーバーを初めて構築する場合でも、無理なく扱うことができます。

Knot DNS のインストール
#

Knot DNS のインストール方法には、EPEL リポジトリからインストールする方法と、Copr リポジトリを利用する方法の2通りがあります。

このうち、初心者の方には EPEL リポジトリを利用する方法がおすすめです。

EPEL は Fedora Project によって提供されている、Enterprise Linux 向けの追加パッケージリポジトリとなっており、高い安定性と信頼性を備えた、準公式的な位置づけのリポジトリとなっています。

初めに次のコマンドを実行し EPEL を有効化してください。

すでに有効になっている場合は、この作業は不要です。

dnf install epel-release

続いて、Knot DNS の本体および関連パッケージのインストールを行います。

次のコマンドを実行してください。

dnf install knot

実行すると、以下のようにインストールパッケージの確認画面が表示されます。

dnf install knot
Extra Packages for Enterprise Linux 10 - x86_64                                                                                        5.3 MB/s | 5.6 MB     00:01    
Last metadata expiration check: 0:00:04 ago on Sun 14 Dec 2025 12:46:27 PM JST.
Dependencies resolved.
=======================================================================================================================================================================
 Package                                Architecture                        Version                                       Repository                              Size
=======================================================================================================================================================================
Installing:
 knot                                   x86_64                              3.4.8-1.el10_1                                epel                                   709 k
Installing dependencies:
 knot-libs                              x86_64                              3.4.8-1.el10_1                                epel                                   416 k
 libxdp                                 x86_64                              1.5.5-1.el10_0                                appstream                               66 k

Transaction Summary
=======================================================================================================================================================================
Install  3 Packages

Total download size: 1.2 M
Installed size: 4.1 M
Is this ok [y/N]: 

内容を確認し問題なければ y を入力してインストールを進めてください。

EPEL リポジトリを初めて利用する場合は、GPG キーのインポート確認が表示されます。

先ほど同様に y を入力して続行してください。

Total                                                                                                                                  655 kB/s | 1.2 MB     00:01     
Extra Packages for Enterprise Linux 10 - x86_64                                                                                        1.6 MB/s | 1.6 kB     00:00    
Importing GPG key 0xE37ED158:
 Userid     : "Fedora (epel10) <epel@fedoraproject.org>"
 Fingerprint: 7D8D 15CB FC4E 6268 8591 FB26 33D9 8517 E37E D158
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-10
Is this ok [y/N]: 

インストールが完了すると、次のメッセージが表示されます。

Complete!

以下のコマンドを実行することで、パッケージの導入有無を確認することができます。

rpm -qa |grep "knot"
knot-libs-3.4.8-1.el10_1.x86_64

上記のようにパッケージ情報が表示されれば、Knot DNS のインストールは完了となります。

ゾーンファイルの作成
#

DNS では、利用するドメイン名に関する情報を 「ゾーン」 と呼びます。

その内容はファイルとして管理されることもあれば、実装によってはデータベースなどで管理される場合もあります。

Knot DNS では、これらのゾーン情報をファイルとして定義します。

ここからは、Knot DNS で管理するゾーン情報を作成していきます。

1.ディレクトリの作成
#

ゾーンファイルは任意のディレクトリに配置することができます。

配置先のディレクトリは、後述する knot.conf の設定項目で指定する必要があります。

本記事では、公式ドキュメントの例に従い、/var/lib/knot/zones/ をゾーンファイルの配置先として使用します。

以下のコマンドを実行しディレクトリを作成してください。

mkdir -p /var/lib/knot/zones/

2.ゾーンファイルの作成
#

次にゾーンファイルの作成を行ないます。

今回は例として example.com のゾーンファイルを作成します。

以下のコマンドを実行し先ほど作成したディレクトリにゾーンファイルを作成してください

vi /var/lib/knot/zones/example.com.zone

続いて、作成したファイルに以下の内容を記述してください。

$ORIGIN example.com.
$TTL 86400

@ IN SOA ns1.example.com. hostmaster.example.com. (
    2025121401  ; Serial
    10800       ; Refresh
    3600        ; Retry
    604800      ; Expire
    3600        ; Negative Cache TTL
)

@               IN NS     ns1.example.com.
@               IN NS     ns2.example.com.

@               IN A      192.0.2.10
www             IN A      192.0.2.10

ns1             IN A      192.0.2.11
ns2             IN A      192.0.2.12

このゾーンファイルでは、ドメインに関する DNS 情報を定義しています。

ゾーンファイルの冒頭にある $ORIGIN および $TTL は、このファイル全体の基本ルールを定めています。

項目 設定値 内容
$ORIGIN example.com. このゾーンファイルで扱うドメイン名
$TTL 86400 レコードのキャッシュ時間(秒)

以降の設定はレコード情報を記述しています。

設定内容は以下の通りとなります。

設定項目 名前 内容
SOA ゾーン全体の管理情報を定義
NS ns1.example.com. プライマリネームサーバー
NS ns2.example.com. セカンダリネームサーバー
A example.com 192.0.2.10 ドメイン本体の IP アドレス
A www.example.com 192.0.2.10 Web サイト用
A ns1.example.com 192.0.2.11 ネームサーバー 1
A ns2.example.com 192.0.2.12 ネームサーバー 2

3.設定ファイル編集
#

続いて、Knot DNSのメイン設定ファイルである /etc/knot/knot.conf を編集し、先ほど作成したゾーンファイルを利用するように設定します。

初めに以下のコマンドを実行しバックアップを作成してください。

今回はわかりやすく knot.conf.bk としてバックアップを作成します。

cp -a /etc/knot/knot.conf /etc/knot/knot.conf.bk

次に以下のコマンドを実行し編集を行なってください。

vi /etc/knot/knot.conf

ファイルに以下の内容を記述してください。

server:
    rundir: "/run/knot"
    user: knot:knot
    automatic-acl: on
    listen: [ 0.0.0.0@53 ]

log:
  - target: syslog
    any: info

database:
    storage: "/var/lib/knot"

zone:
  - domain: example.com
    storage: "/var/lib/knot/zones/"
    file: "%s.zone"

以下のセクションでは、サーバー全体の設定を行っています。

Knot DNS の動作に必要なソケットファイルや PID ファイルのディレクトリ、実行するユーザー、待ち受ける IP アドレスとポートなどを指定しています。

server:
    rundir: "/run/knot"
    user: knot:knot
    automatic-acl: on
    listen: [ 0.0.0.0@53 ]

以下のセクションでは Knot DNS のログ出力先やレコードデータの保存場所を設定しています。

log:
  - target: syslog
    any: info

database:
    storage: "/var/lib/knot"

以下のセクションでは実際に管理するゾーン(ドメイン)ごとの設定を行なっています。

ドメイン数が多くなる場合は template セクションを利用し、ゾーンごとの設定を共通化する事で効率的に管理を行う事ができます。

zone:
  - domain: example.com
    storage: "/var/lib/knot/zones/"
    file: "%s.zone"

4.権限の設定
#

Knot DNS はセキュリティ上の理由から、管理者(root)ではなく専用ユーザーである knot を利用し実行することが推奨されています。

そのため、ゾーンファイルや設定ファイルが knot ユーザーから読み書き可能である必要があります。

以下のコマンドを実行して必要ファイルの権限を設定してください。

chown -R knot:knot /var/lib/knot/zones
chown -R knot:knot /etc/knot/

5.設定の文法チェック
#

設定が完了したら、以下のコマンドを実行し内容に問題がないか構文チェック(シンタックスチェック)を行ってください。

knotc conf-check

問題がなければ、次のようなメッセージが表示されます。

Configuration is valid

ファイアウォールの設定
#

DNS サーバーを運用する場合、外部からの DNS クエリを受け付けられるように、53 番ポートを開放する必要があります。

なお、本手順はサーバーのファイアウォール管理ツールとして firewalld が稼働している環境を前提としています。

利用環境に合わせて手順を調整し進めてください。

DNS は UDPTCP の両方で通信を行うため、以下のコマンドを順に実行してください。

firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp

どちらのコマンドも実行結果が success と表示されれば成功となります。

--permanent で変更した設定を反映させるために以下のコマンドを実行しリロードしてください。

firewall-cmd --reload

こちらも実行結果が success と表示されれば成功となります。

DNSサーバーの起動
#

各種設定や権限の確認が完了したら、Knot DNS サーバーを起動する事ができます。

以下のコマンドにてサービスと自動起動を有効化する事ができます。

systemctl enable --now knot

次に以下のコマンドを実行し、サービスの起動確認を行ってください。

systemctl is-active knot

以下のように表示されれば、サービスが正常に稼働しています。

active

動作確認
#

サービスの起動が完了したら、dig コマンドを利用し DNS が正しく応答しているか確認してください。

今回はサンプル用のドメインを利用しているためドメイン登録情報(Whois)を利用せず、直接サーバーを指定し名前解決の確認を行います。

確認を行うには以下のコマンドを実行してください。

dig @<サーバーIP> example.com +short

以下のようにゾーンファイルに設定した IP アドレスが返答されていれば成功です。

192.0.2.10

本番環境にて利用する場合
#

今回の手順は、学習やテスト、個人利用向けのシングルサーバー構成となります。

本番環境での安定運用を目的とする場合は、以下のような追加対策が必要となります。

項目 内容
冗長化構成 複数の権威 DNS サーバーを用意し、障害時もサービスが継続できるようにする
セキュリティ対策 DDoS 対策やアクセス制御、不要なポートの閉鎖など
監視とログ管理 DNS クエリの監視や異常検知、ログの定期的な確認
バックアップ ゾーンファイルや設定ファイルの定期的なバックアップ

関連記事

【初心者向け】timeoutコマンド入門|Linuxでプロセスの実行時間を制限する
Timeout AlmaLinux Linux
【初心者向け】RPMのChangelogからセキュリティ修正を確認する方法
Linux RPM セキュリティ AlmaLinux
【簡単ガイド】AlmaLinuxでNginxをインストールする方法
Linux AlmaLinux Nginx Webサーバー
【セキュリティ】LinuxでASLRの設定を確認する方法
Linux ASLR セキュリティ AlmaLinux 音声解説あり
【脆弱性確認】RPMファイルを展開してソースコードとパッチを確認する方法
Linux RPM セキュリティ AlmaLinux
【2025年12月15日更新】AlmaLinuxバージョン一覧まとめ
RHEL AlmaLinux Linux