PowerDNSの構築(CentOS7)

2019 年 1 月 21 日 by fuku

こんにちは。fukuです。

社内(イントラネット)で利用するDNSサーバが必要となり、
かつ、レコード管理がGUIで容易に管理できるもの利用したく「PowerDNS」を採用しました。

今回は、社内の開発環境へ「PowerDNS」を導入した際の手順をご紹介します。

□ 環境情報
——————
OS :CentOS7
DNS:PowerDNS
DB :mariaDB
WEB:httpd
——————

□ 構築手順
1)まずは、CentOS7をインストールします。
 (標準の[最小限のインストール]で)
2)IPアドレスを設定
  DNSは、ローカルIPアドレスを設定(127.0.0.1)
3)ひとまず、yumアップデート
  # yum -y update
4)digコマンドを使用する為、必要であればインストール
  # yum install bind-utils

□ ここからはPowerDNS(以降 PDNS)のインストールです。
標準のyumではインストールできないので環境を整えます。
5)yum環境の設定
  # yum install epel-release
6)PowerDNSのインストール(DBも合わせてインストール)
  # yum install pdns pdns-backend-mysql mariadb-server
7)DBの起動
  # systemctl start mariadb
  # systemctl enable mariadb     —自動起動 ON—
8)DBでテーブル作成
  # mysql -uroot

  ### DB作成

MariaDB [(none)]> CREATE DATABASE powerdns CHARACTER SET utf8;

  ### ユーザ作成、権限設定

MariaDB [(none)]> CREATE USER 'powerdns'@'%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns'@'%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';

  ### テーブル作成

MariaDB [(none)]> use powerdns
MariaDB [(none)]> 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;
MariaDB [(none)]> CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [(none)]> CREATE TABLE records (id INT 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;
MariaDB [(none)]> CREATE INDEX nametype_index ON records(name,type);
MariaDB [(none)]> CREATE INDEX domain_id ON records(domain_id);
MariaDB [(none)]> CREATE INDEX recordorder ON records (domain_id, ordername);
MariaDB [(none)]> CREATE TABLE supermasters (ip VARCHAR(64) NOT NULL,nameserver VARCHAR(255) NOT NULL,account VARCHAR(40) NOT NULL,PRIMARY KEY (ip, nameserver)) Engine=InnoDB;
MariaDB [(none)]> 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;
MariaDB [(none)]> CREATE INDEX comments_domain_id_idx ON comments (domain_id);
MariaDB [(none)]> CREATE INDEX comments_name_type_idx ON comments (name, type);
MariaDB [(none)]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
MariaDB [(none)]> CREATE TABLE domainmetadata (id INT AUTO_INCREMENT,domain_id INT NOT NULL,kind VARCHAR(32),content TEXT,PRIMARY KEY (id)) Engine=InnoDB;
MariaDB [(none)]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
MariaDB [(none)]> 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;
MariaDB [(none)]> CREATE INDEX domainidindex ON cryptokeys(domain_id);
MariaDB [(none)]> CREATE TABLE tsigkeys (id INT AUTO_INCREMENT,name VARCHAR(255),algorithm VARCHAR(50),secret VARCHAR(255),PRIMARY KEY (id)) Engine=InnoDB;
MariaDB [(none)]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
MariaDB [(none)]> quit

7)pdns.configの変更
  # cd /etc/pdns
  # cp -p pdns.conf pdns.conf_yyyymmdd
  # vi pdns.conf
– 以下を追加 ——————

local-ipv6=
gmysql-host=127.0.0.1
gmysql-user=powerdns
gmysql-password=password
gmysql-dbname=powerdns

————————————
※最低限、動作するための設定のみ
※[local-ipv6=]はOSにipv6の設定がされていないと起動エラーになる

8)PowerDNSを起動
  # systemctl start pdns.service
  # systemctl enable pdns.service

9)動作確認
  # ss -tan |grep 53
– 実行結果 ——————

LISTEN 0 128 *:53 *:*         ←出力結果

————————————
  # dig @127.0.0.1
– 以下が表示されること —–

;; SERVER: 127.0.0.1#53(127.0.0.1)    ←出力結果

————————————

□ ここからはPowerAdmin(管理画面)のインストールと設定です。
10)コンテンツの取得(poweradmin)
  # cd /tmp

  管理画面を表示するためのコンテンツを取得/展開
  # wget http://downloads.sourceforge.net/project/
   poweradmin/poweradmin-2.1.7.tgz
  # tar -zxvf poweradmin-2.1.7.tgz
  # mv ./poweradmin-2.1.7 /var/www/html/poweradmin

  管理画面を表示させるのに必要なものをインストール
  # yum install httpd php php-cli php-pdo php-mysql php-mcrypt

11)管理画面の設定
  # cd /var/www/html/poweradmin/inc/
  # cp -p /var/www/html/poweradmin/inc/config-me.inc.php
    /var/www/html/poweradmin/inc/config.inc.php

  # systemctl start httpd
  # systemctl enable httpd

ここからブラウザで操作します。

1)HTTPアクセス→[ http://[サーバIP]/poweradmin/install ]
ページ1

2)ページ2

3)ページ3

まず、DB関連の設定です
——————
Username :powerdns   ←DB作成時のユーザ名
Password :password   ←DB作成時のパスワード
Database type:MySQL     ←デフォルト
Hostname :localhost   ←任意
DB Port :3306     ←デフォルト
Database :powerdns   ←DB作成時のデータベース名
Password :password   ←Poweradmin管理者のパスワード
——————

4)ページ4

次に管理画面用の設定です
——————
Username :powerdns      ←管理用ユーザ
Password :password      ←管理用ユーザのパスワード
Hostmaster :hogehoge.net    ←ドメイン名
Primary :ns1.hogehoge.net  ←プライマリDNSサーバ
Secondary :ns2.hogehoge.net  ←セカンダリDNSサーバ
——————

5)ページ5 →画面に記載されているSQLを実行する

  # mysql -uroot

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> exit

6)ページ6

  下記ファイルの中身を全て削除して画面に記載されている設定情報を貼りつけて保存する
  # vi /var/www/html/poweradmin/inc/config.inc.php

7)ページ7

  設定は完了したので[install]フォルダを削除
  # rm -rf /var/www/html/poweradmin/install

ここまでくればセットアップ完了です!

管理画面へアクセスしてみましょう。
HTTPアクセス→[ http://[サーバIP]/poweradmin ]

→ようこそ画面が表示されればOK

ゾーンやレコードの追加手順などはまた別の記事でご紹介したいと思いますが、
構築後は、まだ何も登録されていないのでまずは好きに追加して試してみてください。

今回はバックエンドDBをMariaDBにしましたが、OracleやSQLServerなど他のDBでも可能なようです。
機会があれば違いなども知れべてみたいと思います。

タグ: ,

TrackBack