DNS管理 · 3 min read · Oct 01, 2025

CentOS 7にPowerDNSとPoweradminをインストールする方法

PowerDNS (pdns) は、C++で書かれ、GPLライセンスの下でリリースされたオープンソースのDNSサーバーです。従来のDNSサーバーであるBindの良い代替手段となり、より良いパフォーマンスと低メモリ要件で設計されています。PowerDNSは、権威サーバーとリカーサーの2つの製品を提供しています。PowerDNS権威サーバーは、プレーンなBindゾーンファイル、MySQL、PostgreSQL、SQLite3、またはLDAPなどの異なるバックエンドを介して構成できます。

このチュートリアルでは、MariaDBデータベースサーバーをバックエンドとして使用し、簡単なDNS管理のためにPoweradminを使用してPowerDNS権威サーバーをインストールおよび構成する方法を示します。

前提条件

  • CentOS 7サーバー
  • ルート権限

何をするか:

  1. EPELおよびRemiリポジトリをインストール
  2. MariaDBをインストールおよび構成
  3. PowerDNSをインストール
  4. Poweradminをインストール
  5. Poweradminのインストール後の設定
  6. サンプルゾーンを作成

ステップ1 - EPELおよびRemiリポジトリをインストール

まず、PowerDNSのインストールに必要な依存関係をインストールする必要があります。EPELリポジトリとPHP 7.2のインストール用のREMIをインストールします。

以下のコマンドを使用してEPELおよびPHP Remiリポジトリをインストールします。

yum -y install epel-release  
 yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

これらのリポジトリがシステムに追加されたら、’yum-utils’パッケージをインストールします。

yum -y install yum-utils

次に、以下のコマンドを使用してPHP 7.2 Remiリポジトリを有効にします。

yum-config-manager --enable remi-php72

ステップ2 - MariaDBをインストールおよび構成

PowerDNS権威サーバーは、MySQL/MariaDBデータベースサーバーを含むさまざまなバックエンドをサポートしています。’バックエンド’という用語は、サーバーがDNSレコード(および一部のメタデータ)を含むデータストアを参照することを指します。このガイドでは、MariaDBをバックエンドとして使用します。

以下のyumコマンドを使用してMariaDBをインストールします。

yum -y install mariadb mariadb-server

インストールが完了したら、MariaDBサービスを開始し、起動時に自動的に起動するように設定します。

systemctl start mariadb  
 systemctl enable mariadb

次に、’mysql_secure_installation’というインタラクティブツールを使用してMariaDBのルートパスワードを構成します。

以下のコマンドを実行します。

mysql_secure_installation

データベースサーバーのルートパスワードを設定するように求められます。ルートパスワードを設定するために’Y’と入力し、強力なパスワードを入力します。

Set root password? [Y/n] Y  
New password:   
Re-enter new password: 

他の質問には、すべて’Y’と入力します。

Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] Y  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

その結果、MariaDBデータベースサーバーがインストールされ、認証用のルートパスワードが設定されました。

次に、PowerDNSのインストール用に新しいデータベースとユーザーを作成します。rootユーザーとパスワードでMySQLシェルにログインします。

以下のMySQLコマンドを実行します。

mysql -u root -p  
 PASSWORD

新しいデータベース’powerdns’を作成し、’pdns’という名前の新しいユーザーに’pdnspassword2018’というパスワードでデータベースのすべての権限を付与します。

create database powerdns;  
 grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword2018';  
 flush privileges;

PowerDNSデータベースのインストール

その後、以下のMySQLクエリを実行してPowerDNSデータベースのテーブル構造を作成します。

use powerdns;  
   
 CREATE TABLE domains (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255) NOT NULL,  
   master                VARCHAR(128) DEFAULT NULL,  
   last_check            INT DEFAULT NULL,  
   type                  VARCHAR(6) NOT NULL,  
   notified_serial       INT DEFAULT NULL,  
   account               VARCHAR(40) DEFAULT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX name_index ON domains(name);  
   
   
 CREATE TABLE records (  
   id                    BIGINT AUTO_INCREMENT,  
   domain_id             INT DEFAULT NULL,  
   name                  VARCHAR(255) DEFAULT NULL,  
   type                  VARCHAR(10) DEFAULT NULL,  
   content               VARCHAR(64000) DEFAULT NULL,  
   ttl                   INT DEFAULT NULL,  
   prio                  INT DEFAULT NULL,  
   change_date           INT DEFAULT NULL,  
   disabled              TINYINT(1) DEFAULT 0,  
   ordername             VARCHAR(255) BINARY DEFAULT NULL,  
   auth                  TINYINT(1) DEFAULT 1,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX nametype_index ON records(name,type);  
 CREATE INDEX domain_id ON records(domain_id);  
 CREATE INDEX recordorder ON records (domain_id, ordername);  
   
   
 CREATE TABLE supermasters (  
   ip                    VARCHAR(64) NOT NULL,  
   nameserver            VARCHAR(255) NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   PRIMARY KEY (ip, nameserver)  
 ) Engine=InnoDB;  
   
   
 CREATE TABLE comments (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   name                  VARCHAR(255) NOT NULL,  
   type                  VARCHAR(10) NOT NULL,  
   modified_at           INT NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   comment               VARCHAR(64000) NOT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX comments_domain_id_idx ON comments (domain_id);  
 CREATE INDEX comments_name_type_idx ON comments (name, type);  
 CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);  
   
   
 CREATE TABLE domainmetadata (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   kind                  VARCHAR(32),  
   content               TEXT,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);  
   
   
 CREATE TABLE cryptokeys (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   flags                 INT NOT NULL,  
   active                BOOL,  
   content               TEXT,  
   PRIMARY KEY(id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainidindex ON cryptokeys(domain_id);  
   
   
 CREATE TABLE tsigkeys (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255),  
   algorithm             VARCHAR(50),  
   secret                VARCHAR(255),  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);  
   
 quit;

その結果、MySQL/MariaDBデータベースとPowerDNSインストール用のユーザーが作成されました。

ステップ3 - PowerDNSをインストール

以下のコマンドを使用してPowerDNSと必要なすべてのパッケージをインストールします。

yum -y install pdns pdns-backend-mysql bind-utils

PowerDNSパッケージをインストールした後、’/etc/pdns/‘ディレクトリに移動し、vimエディタを使用して設定ファイル’pdns.conf’を編集します。

cd /etc/pdns/  
 vim pdns.conf

デフォルトでは、PowerDNSは’bind’をバックエンドとして使用しています。したがって、’launch=bind’の設定の前にコメント’#’を入力し、以下のMySQLバックエンドの設定を貼り付けます。

#launch=bind  
  
launch=gmysql  
gmysql-host=localhost  
gmysql-user=pdns  
gmysql-password=pdnspassword2018  
gmysql-dbname=powerdns

保存して閉じます。

PowerDNSのインストール

次に、pdnsサービスを開始し、起動時に自動的に起動するように設定します。

systemctl start pdns  
 systemctl enable pdns

その後、DNSサービスをファイアウォールに追加します。

firebase-cmd --add-service=dns --permanent  
 firebase-cmd --reload

ファイアウォールの構成

PowerDNSサービスが起動しているかどうかを確認するには、以下のコマンドを使用します。

netstat -tap | grep pdns  
 netstat -tulpn | grep 53  
 dig @10.9.9.10

その結果、pdnsサービスがポート53で起動しており、PowerDNSサーバーからの応答が得られます。

PowerDNSの状態を確認

ステップ4 - Poweradminをインストール

このステップでは、PowerDNS用のDNS管理ツールである’Poweradmin’をインストールします。これはPHPに基づいたWebアプリケーションであるため、アプリケーションを実行するためにPHPとWebサーバーをインストールする必要があります。

以下のコマンドを使用してhttpd WebサーバーとPHPパッケージをインストールします。

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

インストール後、追加のPHP Pearパッケージをインストールする必要があります。以下のコマンドを実行します。

yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

httpdとPHPのインストールが完了したら、httpdサービスを開始し、起動時に自動的に起動するように設定します。

systemctl start httpd  
 systemctl enable httpd

次に、’/var/www/html’ディレクトリに移動し、poweradminのソースコードをダウンロードします。

cd /var/www/html/  
 wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

poweradminの圧縮ファイルを解凍し、名前を変更します。

tar xvf poweradmin-2.1.7.tgz  
 mv poweradmin-2.1.7/ poweradmin/

その後、ファイアウォールにHTTPおよびHTTPSプロトコルを追加します。

firebase-cmd --add-service={http,https} --permanent  
 firebase-cmd --reload

これでPoweradminのインストール後の設定が準備完了です。

ステップ5 - Poweradminのインストール後の設定

Webブラウザを開き、サーバーのIPアドレスに/poweradmin/install/パスURLを追加してインストールを開始します。私のは:

http://10.9.9.10/poweradmin/install/

希望する言語を選択し、’Go to Step 2’ボタンをクリックします。

次に、’Go to Step 3’ボタンをクリックします。

データベースの設定が表示されます。作成したPowerDNSデータベースの詳細とPowerDNSの管理者パスワードを入力します。

PowerAdminデータベース設定

‘Go to Step 4’ボタンをクリックします。

その後、権限が制限された新しいユーザーを作成する必要があります。以下の詳細を入力し、ユーザー、パスワードなどを自分のものに変更します。

次に、’Go to Step 5’ボタンをクリックします。

以下のページが表示されます。

サーバーのターミナルに戻り、rootユーザーとパスワードでログインします。次に、ページに表示されているMySQLクエリを実行します。

mysql -u root -p  
 PASSWORD  
   
 GRANT SELECT, INSERT, UPDATE, DELETE  
 ON powerdns.*  
 TO 'hakase'@'localhost'  
 IDENTIFIED BY 'hakase-labs123';

Mysqlコマンド

Webブラウザに戻り、’Go to Step 6’ボタンをクリックします。

以下のページが表示されます。

インストールステップ6

インストーラーは新しい設定’../inc/config.inc.php’を作成できませんでした。したがって、手動で作成する必要があります。

ターミナルサーバーに戻り、’/var/www/html/poweradmin’ディレクトリに移動し、新しい設定ファイル’inc/config.inc.php’を作成します。

cd /var/www/html/poweradmin  
 vim inc/config.inc.php

ページのPHPスクリプトをそこに貼り付けます。

保存して閉じ、ブラウザに戻ってボタンをクリックします。

データベース設定ファイル

インストールが完了しました。

オプション:

他の動的プロバイダーによって使用されるURLをサポートしたい場合は、htaccessファイルをコピーします。

cd /var/www/html/poweradmin  
 cp install/htaccess.dist .htaccess

その後、’install’ディレクトリを削除する必要があります。

rm -rf /var/www/html/poweradmin/install

再度Webブラウザに戻り、以下のURLを使用してPoweradminダッシュボードにログインします。

http://10.9.9.10/poweradmin/

デフォルトのユーザー’admin’とパスワードでログインし、’Go’ボタンをクリックします。

その結果、Poweradminダッシュボードが表示され、インストールが完了しました。

ステップ6 - サンプルゾーンとDNSレコードを作成

この段階では、’emma.io’というドメインの新しいDNSゾーンを作成することでPowerDNSとPoweradminのインストールをテストします。

Poweradminダッシュボードで、’Add master zone’メニューをクリックします。

ゾーン名をドメイン名’emaa.io’に設定し、’Add zone’ボタンをクリックします。

‘List zones’メニューをクリックして、すべての利用可能なゾーンを取得します。そして、ゾーン’emma.io’の’edit’ボタンをクリックします。

‘List zones’メニューをクリックして、すべての利用可能なゾーンを取得します。そして、ゾーン’emma.io’の’edit’ボタンをクリックします。

ゾーンのリスト

今、’Add record’ボタンをクリックし、DNSゾーンとDNSレコードをドメイン名’emma.io’に正常に追加しました。

次に、’dig’ DNSユーティリティコマンドを使用してドメイン’emma.io’をテストします。

ドメイン’emma.io’のネームサーバーまたはnsレコードを確認します。

dig NS emma.io @10.9.9.10

digコマンドでゾーンを確認

ドメイン’emma.io’のA DNSレコードを確認します。

dig A emma.io @10.9.9.10

digコマンドの結果

その結果、ドメイン’emma.io’には私たちのDNSサーバー’ns1.hakase-labs.io’からのネームサーバーがあり、そのドメイン名の’A’はサーバーIPアドレス’10.9.9.11’との設定と一致します。

最後に、CentOS 7でのPowerDNSとPoweradminのインストールと構成が成功裏に完了しました。

参考

Share: X/Twitter LinkedIn

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

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