1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PowerDNS on CentOS6.9

Posted at

PowerDNS を RPM だけで構成する

  • レポジトリに remi を使ってなぜか Poweradmin だけ tar ボールから持ってきている記事が多いですが、ここでは epel の rpm だけで構成します
  • Poweradmin のインストール php スクリプトが rpm に入っていないのでここだけ tar ボールで持ってきます。
  • 関連パッケージ pdns-3.3.3-2.el6.i686, pdns-backend-mysql-3.3.3-2.el6.i686, poweradmin-2.1.4-1.el6.noarch
  • CentOS6.9

ネットワーク構成

  • ドメイン jp.cysec とします
相対ドメイン名 FQDN IP I/F 備考
ns1 ns1.jp.cysec 10.233.5.1 eth1 PowerDNS, Poweradmin, MySQL
なし 10.233.3.230 wlan0 10.233.5.1 の WiFi
localhost 127.0.0.1 lo 10.233.5.1 のローカル IP
suttle shuttle.jp.cysec 10.233.3.35 別サーバー

RPM パッケージのインストール

# yum -y install epel-release
# yum -y install php php-mcrypt php-pdo php-mysql pdns pdns-backend-mysql mysql-server httpd poweradmin

MySQL に powerdns 用のテーブルを作る

# service mysqld start
# chkconfig mysqld on
# mysql_secure_installation
# mysql -u root
mysql> create database powerdns;
mysql> create user 'powerdns'@'localhost' identified by 'powerdns';
mysql> grant all privileges on powerdns.* to 'powerdns'@'localhost';
mysql> use powerdns;
  • ここで以下の SQL で PowerDNS 用のテーブルを作成します。

PowerDNS 用のテーブルを作成

  • 最も、テーブルを作成したところで Poweradmin でのインストール php スクリプト実行時に作り直すようです
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)
);

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);

終わったら

mysql> exit;

PowerDNS のデーモン(pdns)の設定

バックエンドを MySQL にする

/etc/pdns/pdns.conf
#################################
# launch        Which backends to launch and order to query them in
#
# launch=
launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=powerdns
gmysql-dbname=powerdns

PowerDNS で解決できないときは google に問い合わせる

/etc/pdns/pdns.conf
#################################
# recursor      If recursion is desired, IP address of a recursing nameserver
#
# recursor=no
recursor=8.8.8.8

ログを出すようにします

/etc/pdns/pdns.conf
log-dns-details=on
loglevel=3
logging-facility=0
/etc/rcyslog.conf
# Save powerdns messages also to pdns.log
local0.*                                                /var/log/pdns.log
  • 設定を有効にします
# service rsyslog restart

Poweradmin の設定

/etc/poweradmin/config.inc.php
<?php

$db_host                = "localhost";
$db_user                = "powerdns";
$db_pass                = "powerdns";
$db_name                = "powerdns";
$db_type                = "mysql";

$iface_lang             = "en_EN";

$dns_hostmaster         = "jp.cysec";
$dns_ns1                = "ns1.jp.cysec";
$dns_ns2                = "ns1.jp.cysec";

?>
  • 各変数の詳しい説明は Configuration File にあります
  • $dns_ns2 の設定もしてますが、セカンダリネーム―サーバーは今回作らないので、$dns_ns1 と同じにしておきました。
  • $dns_hostmaster, $dns_ns1 を設定しすると下のようになります(この時点ではまだ動きません)。
  • ルールからはずれたトップレベルドメインを指定していますが、後で手当てします
[yamachan@localhost inc]$ dig @localhost jp.cysec soa

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> @localhost jp.cysec soa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31587
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jp.cysec.                      IN      SOA

;; ANSWER SECTION:
jp.cysec.               86400   IN      SOA     ns1.jp.cysec. jp.cysec. 2018061702 28800 7200 604800 86400

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jun 18 09:41:11 2018
;; MSG SIZE  rcvd: 6

ルールからはずれたトップレベルドメインを許可

  • これで .jp.cysec の名前引きが許可される。
/usr/share/poweradmin/inc/config-me.inc.php

//$dns_strict_tld_check = "1";
$dns_strict_tld_check   = false

Poweradmin インストール画面を動かす

  • 恐らく poweradmin-2.1.4-1.el6.noarch がインストールされているはずですが、このパッケージにはインストール php スクリプトがありませんので他から持ってきます。

ダウンロードとインストール

https://github.com/poweradmin/poweradmin/releases の v2.1.4

$ wget https://github.com/poweradmin/poweradmin/archive/v2.1.4.tar.gz
$ tar xvfz v2.1.4.tar.gz
$ cd poweradmin-2.1.4
$ sudo cp -rp install /usr/share/poweradmin/
  • まだ動きません...

apache の設定

  • 同一サーバーから Poweradmin を Web で操作するときは不要です。
/etc/httpd/conf.d/poweradmin.conf
Alias /poweradmin /usr/share/poweradmin
<Directory /usr/share/poweradmin/>
   order deny,allow
   deny from all
   #allow from 127.0.0.1
   allow from all
</Directory>
# service httpd restart
# chkconfig httpd on

iptable の設定

  • DNS と http を許可します。必要なとこだけ書き出すとこんな感じ
/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# PowerDNS for external clients
-A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
  • 全部書き出すと
/etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*nat
:PREROUTING ACCEPT [21:1829]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# PowerDNS for external clients
-A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# iptables reload

Poweradmin インストール画面を出す

# service pdns start
# chkconfig pdns on

http://127.0.0.1/poweradmin/install (他から操作するのであれば 127.0.0.1 を自サーバーの IP アドレスに置き換えてください)。

Installation step 1 借用元

Installation step 1

  • poweradmin-2.1.4 には日本語の選択肢はありません。 I prefer to proceed in english. を選択。

Installation step 2 借用元

Installation step 1

Installation step 3 借用元

Installation step 3

  • Installation step 3 でデータベースが作り直されるようです
  • Username: powerdns
  • 該当 SQL: create user 'powerdns'@'localhost' identified by 'powerdns';
  • Password: powerdns
  • 該当 SQL: create user 'powerdns'@'localhost' identified by 'powerdns';
  • Database Type: MySQL
  • Hostname: localhost
  • DB Port: 3306
  • Database: powerdns
  • 該当 SQL: create database powerdns;
  • Poweradmin administrator password: powerdns
  • Poweradmin のスーパーユーザーのパスワードです。ID は admin です。

Installation step 3 借用元

Installation step 4

  • Username: powerdns
  • 権限が制限されたユーザーが作られるようだが実際できているのは Installation step 3 で作成された admin だけ
mysql> select * from users\G
*************************** 1. row ***************************
         id: 1
   username: admin
   password: 687e379ed58bd4fa8d75df5d83cf6ae7
   fullname: Administrator
      email: admin@example.net
description: Administrator with full rights.
 perm_templ: 1
     active: 1
1 row in set (0.00 sec)
  • Password: powerdns
  • 上記 Username に対するパスワードだがこれも作成されない
  • Hostmaster: jp.cysec
  • /etc/poweradmin/config.inc.php 中の $dns_hostmaster
  • 後で表示されるひな型に利用、config.inc.php が書き換えられるわけではない
  • Primary nameserver: ns1.jp.cysec
  • /etc/poweradmin/config.inc.php 中の $dns_ns1
  • 後で表示されるひな型に利用、config.inc.php が書き換えられるわけではない
  • Secondary nameserver: ns1.jp.cysec
  • /etc/poweradmin/config.inc.php 中の $dns_ns2
  • 後で表示されるひな型に利用、config.inc.php が書き換えられるわけではない
  • 各変数の詳しい説明は Configuration File にあります

Installation step 5 借用元

Installation step 5

  • コピーして MySQL に投入しろということですが、既に「MySQL に powerdns 用のテーブルを作る」で実行済なので、Step 6 に進みます
  • 借用元 の貼り付けなので、画像の SQL は実際とは違います

Installation step 6 借用元

Installation step 6

  • これも /etc/poweradmin/config.inc.php にコピペしろということですが、既に「Poweradmin の設定」で作成済なので、Step 7 に進みます
  • 借用元 の貼り付けなので、実際とは違います。poweradmin-2.1.4 では $db_layer と $session_key は表示されませんでした
  • 各変数の詳しい説明は Configuration File にあります

Installation step 7 借用元

Installation step 7

  • 「Poweadmin インストール画面を動かす」でコピーした install ディレクトリを消せと指示が出ます
  • Installation step 3 で設定したパスワードが確認できます

install ディレクトリを消します

  • 消さないと、Poweradmin ログイン画面に入れません
$ sudo rm -rf /usr/share/poweradmin/install

Poweradmin から設定

http://127.0.0.1/poweradmin/ (他から操作するのであれば 127.0.0.1 を自サーバーの IP アドレスに置き換えてください)。

  • Login: admin Password: powerdns
  • Password は Installation step 3 で決めた値

poweradmin_login.png

index(ログイン直後の画面)

poweradmin_index.png

Add master zone をクリック

poweradmin_add_master_zone.png

  • mastger zone に jp.cysec を追加します
  • Zone name: jp.cysec
  • Owner: Administrator (デフォルト)
  • Type: Native (デフォルト)
  • Template: none (デフォルト)
  • /etc/poweradmin/config.inc.php は SOA には反映されますが、master zone が自動的に作られるわけではないです

List zones をクリック

poweradmin_list_zone.png

  • Add master zone で作成した値が反映されています。
  • バケツの左、edit アイコンで A レコードを追加していきます

Edit zone

poweradmin_edit_zone.png

Name Type Content Priority TTL
ns1 A 10.233.5.1 86400
shuttle A 10.233.5.35 86400
  • Name は .jp.cysec を省略してもいいです(ns1 だけ入れると、.jp.cysec が補完されます)
  • ns1.jp.cysec については、/etc/poweradmin/config.inc.php にて指定しているので、ここで PowerDNS のサーバーに向くようにします

動作確認

resolv.conf の書き換え禁止

  • ネットワークマネージャーが勝手に resolv.conf を書き換えないようにします
/etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifcfg-rh
dns=none
  • 書き換えたら NetworkManager を再起動
$ sudo service NetworkManager restart
  • ネームサーバーとして自身を使うようにします
/etc/resolv.conf
domain jp.cysec
search jp.cysec
nameserver 127.0.0.1

名前で Ping してみる

  • FQDN で
$ ping ns1.jp.cysec
PING ns1.jp.cysec (10.233.5.1) 56(84) bytes of data.
64 bytes from 10.233.5.1: icmp_seq=1 ttl=64 time=0.152 ms
64 bytes from 10.233.5.1: icmp_seq=2 ttl=64 time=0.243 ms
64 bytes from 10.233.5.1: icmp_seq=3 ttl=64 time=0.311 ms
64 bytes from 10.233.5.1: icmp_seq=4 ttl=64 time=0.308 ms
64 bytes from 10.233.5.1: icmp_seq=5 ttl=64 time=0.313 ms

--- ns1.jp.cysec ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 13270ms
rtt min/avg/max/mdev = 0.152/0.265/0.313/0.064 ms
  • ドメイン名(jp.cysec)省略
$ ping shuttle
PING shuttle.jp.cysec (10.233.3.35) 56(84) bytes of data.
64 bytes from 10.233.3.35: icmp_seq=1 ttl=64 time=1.91 ms
64 bytes from 10.233.3.35: icmp_seq=2 ttl=64 time=1.98 ms
64 bytes from 10.233.3.35: icmp_seq=3 ttl=64 time=3.53 ms
64 bytes from 10.233.3.35: icmp_seq=4 ttl=64 time=1.78 ms
64 bytes from 10.233.3.35: icmp_seq=5 ttl=64 time=3.14 ms

--- shuttle.jp.cysec ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4011ms
rtt min/avg/max/mdev = 1.789/2.473/3.539/0.722 ms
$ ping www.yahoo.co.jp
PING edge.g.yimg.jp (182.22.31.124) 56(84) bytes of data.
64 bytes from edge1000.img.vip.bbt.yimg.jp (182.22.31.124): icmp_seq=1 ttl=57 time=27.1 ms
64 bytes from edge1000.img.vip.bbt.yimg.jp (182.22.31.124): icmp_seq=2 ttl=57 time=58.5 ms
64 bytes from edge1000.img.vip.bbt.yimg.jp (182.22.31.124): icmp_seq=3 ttl=57 time=43.5 ms
64 bytes from edge1000.img.vip.bbt.yimg.jp (182.22.31.124): icmp_seq=4 ttl=57 time=51.7 ms
64 bytes from edge1000.img.vip.bbt.yimg.jp (182.22.31.124): icmp_seq=5 ttl=57 time=50.4 ms

--- edge.g.yimg.jp ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4503ms
rtt min/avg/max/mdev = 27.194/46.308/58.578/10.680 ms
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?