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
- トップレベルドメイン(TLD) が何かは List of Top-Level Domains みればすぐわかるでしょう。
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 アドレスに置き換えてください)。
- 以下 CentOS 7 x86_64に PowerDNS Authoritative Server 4.0.4 をインストール から画面を借用しています
Installation step 1 借用元
- poweradmin-2.1.4 には日本語の選択肢はありません。 I prefer to proceed in english. を選択。
Installation step 2 借用元
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 借用元
- 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 借用元
- コピーして MySQL に投入しろということですが、既に「MySQL に powerdns 用のテーブルを作る」で実行済なので、Step 6 に進みます
- 借用元 の貼り付けなので、画像の SQL は実際とは違います
Installation step 6 借用元
- これも
/etc/poweradmin/config.inc.php
にコピペしろということですが、既に「Poweradmin の設定」で作成済なので、Step 7 に進みます - 借用元 の貼り付けなので、実際とは違います。poweradmin-2.1.4 では $db_layer と $session_key は表示されませんでした
- 各変数の詳しい説明は Configuration File にあります
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 で決めた値
index(ログイン直後の画面)
Add master zone をクリック
- mastger zone に jp.cysec を追加します
- Zone name: jp.cysec
- Owner: Administrator (デフォルト)
- Type: Native (デフォルト)
- Template: none (デフォルト)
-
/etc/poweradmin/config.inc.php
は SOA には反映されますが、master zone が自動的に作られるわけではないです
List zones をクリック
- Add master zone で作成した値が反映されています。
- バケツの左、edit アイコンで A レコードを追加していきます
Edit zone
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