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を押して続行します。

install mariadb

MariaDBサーバーがインストールされたら、以下のsystemctlコマンドを実行してMariaDBサービスを開始し、有効にします。

sudo systemctl start mariadb  
sudo systemctl enable mariadb

これでMariaDBサーバーが実行中であり、有効になっているはずです。以下のコマンドを実行してMariaDBサービスを確認し、サービスが実行中であることを確認します。

sudo systemctl status mariadb

以下の出力が表示されます - MariaDBサービスは実行中であり、有効になっているため、サービスは起動時に自動的に実行されます。

start enable verify 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;

create database and user

次に、以下のクエリを実行してMariaDBユーザーpdnsadmin@localhostの権限を確認します。これにより、MariaDBユーザーpdnsadmin@localhostの権限のリストが表示されます。

SHOW GRANTS FOR pdnsadmin@localhost;

以下の出力が表示されます - MariaDBユーザーpdnsadmin@localhostはPowerDNSデータベースpdnsに対する権限を持っています。

show suer privileges

‘MYSQL’シェルから退出するには、’quit‘と入力します。

MariaDBサーバーが実行中になったので、次にMariaDBデータベースバックエンドを使用してPowerDNSサーバーをインストールおよび設定します。

PowerDNSのインストールと設定

MariaDBデータベースサーバーをインストールした後、PowerDNSサーバーをインストールし、MariaDBデータベースバックエンドを使用してPowerDNSを設定します。

RHELベースのオペレーティングシステムでは、PowerDNSはEPELリポジトリで利用可能です。したがって、PowerDNSをインストールする前に、EPELリポジトリをシステムに追加する必要があります。

以下のdnfコマンドを実行してEPELリポジトリをインストールします。

sudo dnf install epel-release -y

EPELリポジトリが追加されたら、以下のdnfコマンドを実行してPowerDNSとPowerDNS MySQLバックエンドをインストールします。

sudo dnf install pdns pdns-backend-mysql

確認を求められたら、yを入力して確認し、ENTERを押して続行します。

install powerdns

PowerDNSのインストールが完了したら、以下のmysqlコマンドを実行してPowerDNSのデータベーススキーマをインポートします。以下のコマンドは、MariaDBユーザーpdnsadminを介してデータベースpdnsにデータベーススキーマをインポートします。

sudo mysql -u pdnsadmin -p pdns < /usr/share/doc/pdns/schema.mysql.sql

pdnsadminユーザーのパスワードを入力し、ENTERを押して確認し、続行します。

次に、以下のnanoエディタコマンドを使用してPowerDNS設定’/etc/pdns/pdns.conf’を編集します。

sudo nano /etc/pdns/pdns.conf

MariaDBバックエンド設定のコメントを解除し、データベース名、ユーザー、パスワードの詳細を変更します。作成した正しい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’を押すことができます。

verify database connection

次に、以下のsystemctlコマンドを実行してPowerDNSサービスを開始し、有効にします。

sudo systemctl start pdns  
sudo systemctl enable pdns

最後に、PowerDNSサービスを確認して、PowerDNSが実行中であり、有効になっていることを確認します。

sudo systemctl status pdns

以下の出力では、現在のPowerDNSサービスの状態が実行中であり、有効になっていることが表示されます。これは、起動プロセス時に自動的に実行されることを意味します。

verify pdns service

これで、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を押して続行します。

install python dependnecies

次に、以下のコマンドを使用して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

setup repository

リポジトリが追加されたら、以下のdnfコマンドを実行してNode.jsおよびYarnパッケージマネージャーをインストールします。

sudo dnf install nodejs yarn

インストールを求められたら、yを入力してENTERを押します。

install nodejs

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

import gpg key

次に、以下のpip3コマンドを実行してPython pipパッケージを更新し、システムにvirtualenvをインストールします。

pip3 install -U pip  
pip3 install -U virtualenv

Python pipとvirtualenvは、’/usr/local/bin‘ディレクトリにインストールされます。以下のコマンドを使用して、ディレクトリ’/usr/local/bin‘をシステム$PATH環境変数に追加します。

echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc

以下のコマンドを使用して、’~/.bashrc’ファイルの新しい変更を適用します。これで、’pip’および’virtualenv’コマンドを実行できるようになります。

source ~/.bashrc

Python仮想環境の設定

パッケージ依存関係がインストールされたので、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]#‘のようになります。

create virtualenv

ここから、作業環境は常にPython仮想環境’flask‘内にある必要があります。

Python依存関係のインストール

Python仮想環境を設定し、アクティブにした後、以下のpipコマンドを使用してPowerDNS-AdminのPython依存関係をインストールします。

pip install python-dotenv  
pip install -r requirements.txt

これでインストールが始まります - これはPowerDNS-Adminに必要なPython依存関係をインストールします。これらは’requirements.txt‘ファイルに保存されています。

install python dependencies

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

以下は、データベース移行が完了したときに得られる出力です。

migrate database

データベース移行が完了したら、以下のコマンドを実行してPowerDNS-Adminの静的ファイルを生成します。

yarn install --pure-lockfile  
flask assets build

以下に、yarnパッケージマネージャーを介していくつかのJavaScript依存関係のインストールと、PowerDNS-Adminの静的ファイルを生成するプロセスが表示されます。

genrate static files

静的ファイルが生成されたら、以下のコマンドを実行して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

setup powerdns-admin as service

最後に、以下のコマンドを実行してPowerDNS-Adminサービスを確認し、サービスが実行中であることを確認します。

sudo systemctl status powerdns-admin.service powerdns-admin.socket

以下の出力では、powerdns-admin.serviceとpowerdns-admin.socketが実行中であり、両方が有効になっています。両方のサービスは、システム起動時に自動的に実行されます。

verify pdns services

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

setup nginx

最後に、以下のコマンドを実行してNginxサービスを確認し、サービスが実行中であることを確認します。

sudo systemctl status nginx

Nginxサービスが実行中であり、有効になっていることが表示されるはずです。これにより、Nginxサービスはシステム起動時に自動的に実行されます。

check nginx

PowerDNS-Adminインストールへのアクセス

Webブラウザを開き、PowerDNS-Adminインストールのドメイン名(例: https://pdns.howtoforge.local)にアクセスすると、PowerDNS-Adminのログインページが表示されます。

アカウントを作成‘のリンクをクリックして、PowerDNS-Adminの新しい管理者ユーザーを設定します。

pdns create account

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

setup admin user

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

pdns admin login

これでPowerDNS-Adminのダッシュボードが表示されます。PowerDNS-Adminは実行中ですが、まだPowerDNSサーバーに接続されていません。

PowerDNS-AdminでPowerDNSサーバーを設定するには、PowerDNSサーバーで設定したAPIキーをPowerDNS-Adminに追加する必要があります。

PowerDNSサーバーのAPIの詳細を’PDNS設定‘セクションに入力し、’更新‘をクリックします。

setup api

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

pdnsadmin dashboard

ここから、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レコードを追加、編集、または削除できます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。