DNS管理 · 4 min read · Sep 08, 2025
Rocky LinuxにPowerDNSとPowerAdminをインストールする方法

PowerDNSは、無料でオープンソースのDNSサーバーソフトウェアです。権威あるネームサーバーおよびDNSリカーサーとして使用できます。PowerDNSはC++で書かれており、BSD、Linux、macOSなど複数のオペレーティングシステムをサポートしています。
PowerDNSは、高性能で高機能なDNSサーバーであり、BINDやMySQL/MariaDB、PostgreSQL、Oracleデータベースなどの複数のバックエンドタイプをサポートしています。
PowerDNSサーバーは高性能で、数万の同時接続を処理でき、DNSSECをサポートし、Luaでの高いスクリプト性を提供します。
このガイドでは、Rocky LinuxシステムにPowerDNSとPowerDNS-Adminをインストールする方法を示します。MySQL/MariaDBデータベースバックエンドでPowerDNSを実行し、PowerDNSサーバーのWebベースの管理ツールとして使用されるPowerDNS-Adminを設定します。
このガイドでは、Flaskベースのプロジェクト用のPythonパッケージのインストールと、PowerDNS-Admin Webアプリケーションのリバースプロキシとして使用されるNginxおよびGunicornの設定も示します。
前提条件
このガイドを始めるには、以下の要件が必要です:
- Rocky Linuxサーバー - Rocky Linux v8またはv9を使用できます。
- sudo/root管理者権限を持つ非rootユーザー。
MariaDBデータベースサーバーのインストールと設定
PowerDNSは、PostgreSQL、MariaDB/MySQL、SQLiteなどの複数のバックエンドをサポートするスケーラブルなDNSサーバーソフトウェアです。大規模な展開の場合、PostgreSQLまたはMySQL/MariaDBをデータベースバックエンドとして使用することを検討してください。
Rocky LinuxサーバーにMariaDBデータベースをインストールして設定することから始めます。MariaDBをデータベースバックエンドとしてPowerDNSを設定します。
デフォルトのRocky Linuxリポジトリは、複数のバージョンのMariaDBサーバーパッケージを提供します。以下のdnfコマンドを実行して、MariaDBデータベースサーバーをインストールします。
sudo dnf install mariadb-server確認を求められたら、yを入力して確認し、ENTERを押して続行します。

MariaDBサーバーがインストールされたら、以下のsystemctlコマンドを実行してMariaDBサービスを開始し、有効にします。
sudo systemctl start mariadb
sudo systemctl enable mariadbこれでMariaDBサーバーが実行中であり、有効になっているはずです。以下のコマンドを実行してMariaDBサービスを確認し、サービスが実行中であることを確認します。
sudo systemctl status mariadb以下の出力が表示されます - MariaDBサービスは実行中であり、有効になっているため、サービスは起動時に自動的に実行されます。

MariaDBサーバーが実行中になったので、次にコマンドラインツール’mysql_secure_installation’を使用してMariaDBインストールを設定および保護します。
以下のコマンドを実行して、MariaDBサーバーの展開を保護します。
sudo mysql_secure_installation次に、MariaDBサーバーのいくつかの設定を求められます。
- MariaDBのrootパスワードを設定しますか? yを入力して確認し、新しいパスワードを入力し、パスワードを繰り返します。
- MariaDBのrootユーザーのリモートログインを無効にしますか? yを入力して確認し、無効にします。
- MariaDBからデフォルトの匿名ユーザーを削除しますか? yを入力して確認します。
- MariaDBからデフォルトのデータベーステストを削除しますか? yを再度入力して確認します。
- 最後に、新しい変更を適用するためにテーブルの権限を再読み込みしますか? yを入力して確認し、MariaDBはすべての権限を再読み込みし、新しい設定を適用します。
MariaDBの展開を保護したので、次にPowerDNS用の新しいMariaDBデータベースとユーザーを設定します。
まず、以下のmysqlコマンドを実行して、MariaDBのrootユーザーとしてMariaDBシェルにログインします。
sudo mysql -u root -pパスワードを求められたら、MariaDBのrootユーザーのパスワードを入力します。
次に、以下のクエリを実行して新しいMariaDBデータベースとユーザーを作成します。この例では、新しいデータベースpdnsを作成し、ユーザーpdnsadminとパスワード’password‘を作成します。
CREATE DATABASE pdns;
GRANT ALL ON pdns.* TO pdnsadmin@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
次に、以下のクエリを実行してMariaDBユーザーpdnsadmin@localhostの権限を確認します。これにより、MariaDBユーザーpdnsadmin@localhostの権限のリストが表示されます。
SHOW GRANTS FOR pdnsadmin@localhost;以下の出力が表示されます - MariaDBユーザーpdnsadmin@localhostはPowerDNSデータベースpdnsに対する権限を持っています。

‘MYSQL’シェルから退出するには、’quit‘と入力します。
MariaDBサーバーが実行中になったので、次にMariaDBデータベースバックエンドを使用してPowerDNSサーバーをインストールおよび設定します。
PowerDNSのインストールと設定
MariaDBデータベースサーバーをインストールした後、PowerDNSサーバーをインストールし、MariaDBデータベースバックエンドを使用してPowerDNSを設定します。
RHELベースのオペレーティングシステムでは、PowerDNSはEPELリポジトリで利用可能です。したがって、PowerDNSをインストールする前に、EPELリポジトリをシステムに追加する必要があります。
以下のdnfコマンドを実行してEPELリポジトリをインストールします。
sudo dnf install epel-release -yEPELリポジトリが追加されたら、以下のdnfコマンドを実行してPowerDNSとPowerDNS MySQLバックエンドをインストールします。
sudo dnf install pdns pdns-backend-mysql確認を求められたら、yを入力して確認し、ENTERを押して続行します。

PowerDNSのインストールが完了したら、以下のmysqlコマンドを実行してPowerDNSのデータベーススキーマをインポートします。以下のコマンドは、MariaDBユーザーpdnsadminを介してデータベースpdnsにデータベーススキーマをインポートします。
sudo mysql -u pdnsadmin -p pdns < /usr/share/doc/pdns/schema.mysql.sqlpdnsadminユーザーのパスワードを入力し、ENTERを押して確認し、続行します。
次に、以下のnanoエディタコマンドを使用してPowerDNS設定’/etc/pdns/pdns.conf’を編集します。
sudo nano /etc/pdns/pdns.confMariaDBバックエンド設定のコメントを解除し、データベース名、ユーザー、パスワードの詳細を変更します。作成した正しいMariaDBデータベースの詳細を使用してください。
#################################
# launch Which backends to launch and order to query them in
#
launch=gmysql
gmysql-host=localhost
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dbname=pdns次に、’api’のコメントを解除し、値を’yes‘に変更します。次に、’api-key‘オプションのコメントを解除し、デフォルトのキーを変更します。以下のPowerDNS APIは、PowerDNS-Admin Webアプリケーションを介してPowerDNSサーバーを管理するために使用されます。
#################################
# api Enable/disable the REST API (including HTTP listener)
#
api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=CHANGEMEファイルを保存し、終了したらエディタを終了します。
PowerDNSサーバーの設定が完了したら、以下のコマンドを実行してPowerDNS設定を確認します。
pdns_server --daemon=no --guardian=no --loglevel=9以下のような出力が表示されます - PowerDNSのMariaDBデータベースバックエンドへの接続が成功しました。プロセスを終了するには、’Ctrl+c’を押すことができます。

次に、以下のsystemctlコマンドを実行してPowerDNSサービスを開始し、有効にします。
sudo systemctl start pdns
sudo systemctl enable pdns最後に、PowerDNSサービスを確認して、PowerDNSが実行中であり、有効になっていることを確認します。
sudo systemctl status pdns以下の出力では、現在のPowerDNSサービスの状態が実行中であり、有効になっていることが表示されます。これは、起動プロセス時に自動的に実行されることを意味します。

これで、PowerDNSサーバーのインストールが完了しました。次に、PowerDNSサーバーのWebフロントエンド管理として使用されるPowerDNS-Adminのインストールを開始します。
PowerDNS-Adminのインストール
PowerDNSが実行中になったので、Rocky LinuxサーバーにPowerDNS-Adminをインストールおよび設定します。PowerDNS-AdminはPython FlaskベースのWebアプリケーションであるため、PowerDNS-AdminのインストールはFlask Webフレームワークのインストールとほぼ同じです。
以下は、Rocky LinuxにPowerDNS-Adminをインストールするために行う必要があるいくつかの手順です。
- パッケージ依存関係のインストール
- Python仮想環境の設定
- Python依存関係のインストール
- MariaDBデータベースでのPowerDNS-Adminの設定
- データベーススキーマの生成と静的ファイルの構築
それでは、PowerDNS-Adminのインストールを始めましょう。
パッケージ依存関係のインストール
PowerDNS-Adminをインストールするための最初のステップは、Python3、Pip、Node.js、Yarnなどのパッケージ依存関係をインストールすることです。
始める前に、以下のdnfコマンドを実行してRocky Linuxシステムで’powertools‘リポジトリを有効にします。
sudo dnf config-manager --set-enabled powertools‘powertools’リポジトリが有効になったら、以下のdnfコマンドを使用してPythonパッケージをインストールします。
sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel確認を求められたら、yを入力してENTERを押して続行します。

次に、以下のコマンドを使用してNode.jsおよびYarnリポジトリをシステムに追加します。Node.jsおよびYarnパッケージは、PowerAdmin Webアプリケーションの静的ファイルを生成するために使用されます。この例ではNode.js v16を使用します。
curl -sL https://rpm.nodesource.com/setup_16.x | bash -
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo
リポジトリが追加されたら、以下のdnfコマンドを実行してNode.jsおよびYarnパッケージマネージャーをインストールします。
sudo dnf install nodejs yarnインストールを求められたら、yを入力してENTERを押します。

また、GPGキーの確認を求められたら、yを入力してENTERを押します。

次に、以下のpip3コマンドを実行してPython pipパッケージを更新し、システムにvirtualenvをインストールします。
pip3 install -U pip
pip3 install -U virtualenvPython pipとvirtualenvは、’/usr/local/bin‘ディレクトリにインストールされます。以下のコマンドを使用して、ディレクトリ’/usr/local/bin‘をシステム$PATH環境変数に追加します。
echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc以下のコマンドを使用して、’~/.bashrc’ファイルの新しい変更を適用します。これで、’pip’および’virtualenv’コマンドを実行できるようになります。
source ~/.bashrcPython仮想環境の設定
パッケージ依存関係がインストールされたので、PowerDNS-Adminのソースコードをダウンロードし、PowerDNS-AdminのためのPython仮想環境を設定します。
以下のgitコマンドを使用して、PowerDNS-Adminのソースコードを’/opt/powerdns-admin’ディレクトリにクローンします。
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-adminソースコードがダウンロードされたら、作業ディレクトリを’/opt/powerdns-admin‘に移動し、新しいPython仮想環境’flask‘を作成します。
cd /opt/powerdns-admin
virtualenv -p python3 flask次に、以下のコマンドを使用して’flask‘ Python仮想環境を有効にします。
source flask/bin/activate有効になったら、プロンプトが’(flask) [user@hostname /directory/path]#‘のようになります。

ここから、作業環境は常にPython仮想環境’flask‘内にある必要があります。
Python依存関係のインストール
Python仮想環境を設定し、アクティブにした後、以下のpipコマンドを使用してPowerDNS-AdminのPython依存関係をインストールします。
pip install python-dotenv
pip install -r requirements.txtこれでインストールが始まります - これはPowerDNS-Adminに必要なPython依存関係をインストールします。これらは’requirements.txt‘ファイルに保存されています。

Python依存関係がインストールされたので、MariaDBデータベースでPowerDNS-Adminを設定および構成する準備が整いました。
MariaDBデータベースでのPowerDNS-Adminの設定
Python依存関係がインストールされたので、MariaDBデータベースでPowerDNS-Adminを設定します。PowerDNS-Adminのデータベースの詳細は、PowerDNSサーバーと同じデータベースになります。
以下のnanoエディタコマンドを使用してファイル’/opt/powerdns-admin/powerdnsadmin/default_config.py‘を編集します。
nano /opt/powerdns-admin/powerdnsadmin/default_config.py設定を以下のように変更します。
SALT = 'RANDOM-GENERATED'
SECRET_KEY = 'RANDOM-GENERATED'
BIND_ADDRESS = '0.0.0.0'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False
SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'password'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'pdns'
SQLALCHEMY_TRACK_MODIFICATIONS = Trueファイルを保存し、終了したらエディタを終了します。
データベーススキーマの生成と静的ファイルの構築
PowerDNS-AdminのMariaDBデータベースを設定した後、データベースを移行し、PowerDNS-Adminの静的ファイルを生成します。
まず、以下のコマンドを実行してPowerDNS-Adminのデータベースを移行します。これにより、PowerDNS-Adminで使用される新しいデータベーススキーマがデータベースに挿入されます。
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade以下は、データベース移行が完了したときに得られる出力です。

データベース移行が完了したら、以下のコマンドを実行してPowerDNS-Adminの静的ファイルを生成します。
yarn install --pure-lockfile
flask assets build以下に、yarnパッケージマネージャーを介していくつかのJavaScript依存関係のインストールと、PowerDNS-Adminの静的ファイルを生成するプロセスが表示されます。

静的ファイルが生成されたら、以下のコマンドを実行してPython仮想環境を無効にします。
deactivateこれで、MariaDBデータベースサーバーを使用したPowerDNS-Adminの基本的なインストールが完了しました。コマンドラインからPowerDNS-Adminアプリケーションを開始できますが、systemdサービスとしてPowerDNS-Adminを実行することもできます。
PowerDNS-AdminのためのSystemdサービスの設定
このステップでは、PowerDNS-Adminアプリケーションのための新しいsystemdサービスファイルを設定します。これにより、systemdコマンドを介してPowerDNS-Adminを簡単に管理および維持できます。また、PowerDNS-Adminの設定が簡素化されます。
まず、以下のnanoエディタコマンドを使用して新しいsystemdサービスファイル‘/etc/systemd/system/powerdns-admin.service’を作成します。
sudo nano /etc/systemd/system/powerdns-admin.serviceファイルに以下の設定を追加します。この設定により、PowerDNS-Adminアプリケーションをgunicornを介して実行し、ユーザーおよびグループ’pdns‘として実行します。また、PowerDNS-AdminはUNIXソケットファイル’ /run/powerdns-admin/socket‘で実行されます。
[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
PIDFile=/run/powerdns-admin/pid
User=pdns
Group=pdns
WorkingDirectory=/opt/powerdns-admin
ExecStartPre=+mkdir -p /run/powerdns-admin/
ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
ExecStart=/usr/local/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetファイルを保存し、終了したらエディタを終了します。
次に、以下のnanoエディタを使用してPowerDNS-Adminのための新しいsystemdソケットファイル’ /etc/systemd/system/powerdns-admin.socket‘を作成します。
sudo nano /etc/systemd/system/powerdns-admin.socketファイルに以下の設定を追加します。
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.targetファイルを保存し、終了したらエディタを終了します。
次に、以下のnanoエディタコマンドを使用して新しい設定ファイル‘/etc/tmpfiles.d/powerdns-admin.conf’を作成します。
sudo nano /etc/tmpfiles.d/powerdns-admin.confファイルに以下の設定を追加します。
d /run/powerdns-admin 0755 pdns pdns -ファイルを保存し、終了したらエディタを終了します。
新しいsystemdサービスファイルと新しい設定を追加した後、以下のコマンドを実行してsystemdマネージャーをリロードし、新しいサービスファイルをsystemdに適用します。
sudo systemctl daemon-reload次に、以下のsystemctlコマンドを使用してPowerDNS-Adminサービスを開始および有効にします。PowerDNS-Adminは、gunicornで実行され、’ /run/powerdns-admin/‘ディレクトリにあるソケットファイルを開く必要があります。
sudo systemctl start powerdns-admin.socket powerdns-admin.service
sudo systemctl enable powerdns-admin.socket powerdns-admin.service
最後に、以下のコマンドを実行してPowerDNS-Adminサービスを確認し、サービスが実行中であることを確認します。
sudo systemctl status powerdns-admin.service powerdns-admin.socket以下の出力では、powerdns-admin.serviceとpowerdns-admin.socketが実行中であり、両方が有効になっています。両方のサービスは、システム起動時に自動的に実行されます。

PowerDNS-AdminのリバースプロキシとしてのNginxのインストール
このステップでは、PowerDNS-AdminのリバースプロキシとしてNginxを設定します。
以下のdnfコマンドを実行してRocky LinuxサーバーにNginxをインストールします。確認を求められたら、yを入力して確認し、ENTERを押して続行します。
sudo dnf install nginx次に、以下のnanoエディタを使用して新しいNginxサーバーブロック’ /etc/nginx/conf.d/pdns.conf‘を作成します。
sudo nano /etc/nginx/conf.d/pdns.confファイルに以下の設定を追加し、ドメイン名を変更してください。この例では、PowerDNS-Adminのためにドメイン’pdns.howtoforge.local’を使用します。
server {
listen 80;
server_name pdns.howtoforge.local;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl http2;
server_name pdns.howtoforge.local;
index index.html index.htm;
error_log /var/log/nginx/error_powerdnsadmin.log error;
access_log off;
ssl_certificate /etc/letsencrypt/live/pdns.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pdns.howtoforge.local/privkey.pem;
#ssl_dhparam path_to_your_dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_session_cache shared:SSL:10m;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_redirect off;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_buffer_size 8k;
proxy_set_header Host $http_host;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include mime.types;
root /opt/powerdns-admin/powerdnsadmin;
location ~* \\.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+\.(css|js)$ { expires 7d; }
}
location ~ ^/upload/ {
include mime.types;
root /opt/powerdns-admin;
location ~* \\.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+\.(css|js)$ { expires 7d; }
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect http:// $scheme://;
}
}ファイルを保存し、終了したらエディタを終了します。
次に、以下のコマンドを実行してNginx設定を確認し、設定が正しいことを確認します。出力メッセージとして’syntax ok - test is successful‘のようなメッセージが表示されるはずです。
sudo nginx -t次に、以下のsystemctlコマンドを実行してNginxサービスを開始し、有効にします。
sudo systemctl start nginx
sudo systemctl enable nginx
最後に、以下のコマンドを実行してNginxサービスを確認し、サービスが実行中であることを確認します。
sudo systemctl status nginxNginxサービスが実行中であり、有効になっていることが表示されるはずです。これにより、Nginxサービスはシステム起動時に自動的に実行されます。

PowerDNS-Adminインストールへのアクセス
Webブラウザを開き、PowerDNS-Adminインストールのドメイン名(例: https://pdns.howtoforge.local)にアクセスすると、PowerDNS-Adminのログインページが表示されます。
‘アカウントを作成‘のリンクをクリックして、PowerDNS-Adminの新しい管理者ユーザーを設定します。

新しいユーザー、メールアドレス、パスワードの詳細を入力します。次に、’登録‘をクリックして確認します。

管理者ユーザーが作成されると、再度PowerDNS-Adminのログインページにリダイレクトされます。新しいユーザー管理者とパスワードでログインし、’サインイン‘をクリックします。

これでPowerDNS-Adminのダッシュボードが表示されます。PowerDNS-Adminは実行中ですが、まだPowerDNSサーバーに接続されていません。
PowerDNS-AdminでPowerDNSサーバーを設定するには、PowerDNSサーバーで設定したAPIキーをPowerDNS-Adminに追加する必要があります。
PowerDNSサーバーのAPIの詳細を’PDNS設定‘セクションに入力し、’更新‘をクリックします。

PowerDNS-AdminとPowerDNSサーバーがAPIを介して接続されると、ダッシュボードは以下のスクリーンショットのようになります。

ここから、PowerDNS-Adminダッシュボードを介して新しいDNSレコードを簡単に追加したり、既存のDNSレコードを変更したりできます。
結論
このガイドでは、Rocky LinuxサーバーにMySQL/MariaDBデータベースを使用してPowerDNSサーバーをインストールする方法を学びました。また、Rocky LinuxでのMariaDBデータベースの基本的な展開についても学びました。最後に、PowerDNSサーバーのWebベースの管理ツールとして使用されるPowerDNS-Adminのインストールと設定について学びました。PowerDNS-Adminは、リバースプロキシとしてNginxとMariaDBデータベースバックエンドで実行されます。
PowerDNSサーバーとPowerDNS-Adminが実行中になったので、Web管理ダッシュボードを介してDNSサーバーを管理できるようになりました。PowerDNS-Admin管理ダッシュボードを介してDNSレコードを追加、編集、または削除できます。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。