PowerDNSでDNSサーバーを作る

· 4 min read
PowerDNSでDNSサーバーを作る


メールサーバを作りたいと思ったので、まずはDNSサーバの構築から。
DNSサーバ立てる時はよくBINDが使われたりするんですが、
頻繁に脆弱性が見つかるので、脆弱性が少なく安定したPowerDNSを使用してみました。


Power DNS で出来ること

PowerDNSはDNSで出来ることが一通り全てできる。

  • 権威サーバー
  • ミラーサーバー
  • キャッシュサーバー

これらをちゃんと実装している。

さらに、コンテンツサーバーについては、ゾーンとレコードをSQLバックエンドに放り込むことが出来る。

  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite

SQLでバックエンドに放り込めるだけでもすごいのに

  • bind
  • mydns
  • tinydns

これらのファイル形式に対応してて、レコードを様々な形で持つことが出来る。

あと、LDAPに格納したレコードも使える。

さらにHTTP機能がある。

WEBサーバー機能があって、PowerDNSのモニタリングができて、HTTP APIまでもがついてくる。

  • JSON の API
  • HTTP モニタリング

インストールして使ってみる。

今回は以下の構成で進めていきます。
なお、iptablesやfirewallが全てオフとしてあります。

OS  CentOS 6.9
 DNS  PowerDNS 3.3.3

PowerDNS Recursor

 管理GUI  Poweradmin 2.1.7
 Apache2.2
 バックエンドDB  MySQL5.7
 IPアドレス  10.0.0.4

事前準備

DNS を扱うのでDNSを扱うのに必要な dig コマンドを用意しておく。

# yum install bind-utils

dig いれたら準備段階として dig の結果とネットワーク疎通を見ておく

# dig google.com +short
172.217.25.206
172.217.25.206
172.217.25.206

PowerDNSのインストール

# yum install -y boost boost-devel // C++で使えるライブラリ郡
# yum install epel-release // PowerDSNSはepelからインストールが必要
# yum install pdns pdns-backend-mysql // mysql をバックエンドに使うので mysql-backend もインストール

DBのセットアップ

次は PowerDNS 用のデータベースを作成します。
予め、データベース作成用の .sql ファイルをダウンロードしておきます。

# curl -O https://raw.githubusercontent.com/sig9org/powerdns-create-db/master/create-database.sql

続いてデータベースを作成して、ユーザーやテーブルを作成します。今回は以下のパラメータとしました。

項目
データベース名 powerdns
ユーザ名 powerdns
パスワード password

データベースとユーザの作成が完了したら SOURCE で .sql ファイルを流し込み、PowerDNS 用のテーブルを作成します。

# mysql -u root -p
CREATE DATABASE pdns;
GRANT ALL ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY '********';
FLUSH PRIVILEGES;
SOURCE create-database.sql
exit

設定ファイルの修正

PowerDNS の設定ファイルを以下の内容で修正します。
(再帰問い合わせ先はGoogle Public DNSを指定しています。)

# vi /etc/pdns/pdns.conf

setuid=pdns
setgid=pdns
launch=gmysql
local-address=127.0.0.1
local-port=53
allow-axfr-ips=127.0.0.1,10.0.0.0/24,192.168.1.0/24
allow-recursion=127.0.0.1,10.0.0.0/24,192.168.1.0/24
loglevel=4 
log-dns-details=on

PowerDNSの起動

ここまできたら一度起動しませう。

# /etc/rc.d/init.d/pdns start     

PowerDNS Recursorのインストール

こちらはDNSのキャッシュサーバとしての役割になります。
今のままだと

LAN内のPC

powerDNS権威サーバ

上位のDNSサーバ

となっているので
これではいちいち再帰検索をかけているので遅いってことで

LAN内のPC

powerDNSキャッシュサーバ

powerDNS権威サーバ

上位のDNSサーバ

としましょう。って話。pdns-recursorはキャッシュサーバの役割を果たします。
インストールはyumでインストールしておきます。

# yum install pdns-recursor //標準パッケージ

設定内容

インストールが完了したら以下の設定に変更します。
今回はLAN内のみから接続できる様にしました。

# vi /etc/pdns-recursor/recursor.conf

allow-from=192.168.1.0/24, 10.0.0.0/24 # アクセス許可
local-address=10.0.0.4 #自サーバのIPアドレス。
local-port=53 #ここはデフォでいいかも
forward-zones-recurse=.=127.0.0.1 #ゾーン転送先

LAN内のPCからは10.0.0.4に対してDNSの問い合わせを行います。
それでも解決できない場合自サーバの権威DNSサーバで名前解決を図る…という流れ。

設定反映

PowerDNS Recursorサービスを起動します。

# /etc/rc.d/init.d/pdns-recursor start
# chkconfig pdns-recursor on

ここで一回digしてみましょう。

# dig @127.0.0.1
;; SERVER: 127.0.0.1#53(127.0.0.1)  # こいつが出力されてること

# nslookup google.com 127.0.0.1                                                                                                                            
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   google.com
Address: 216.58.197.174
Name:   google.com
Address: 216.58.197.174
Name:   google.com
Address: 216.58.197.174

ここまでで基本的なDNSとしては機能するようになったはずです。

Poweradminのインストール

このままでも使うことはできますが、
管理しやすいようにPHPベースのGUIであるPoweradminを導入します。
まずはファイルをダウンロード、展開、WEBサーバの公開パスへの配置をします。

※予めapacheをインストールしておいてください。導入方法はここでは割愛します。

# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
# tar -zxvf ./poweradmin-2.1.7.tgz
# mv ./poweradmin-2.1.7/inc/config-me.inc.php ./poweradmin-2.1.7/inc/config.inc.php
# mkdir -p /var/www/html/poweradmin
# mv ./poweradmin-2.1.7/* /var/www/html/poweradmin

設定ファイル”config.inc.php”にデータベースへの接続情報を記述します。
ここでは”/var/www/html/poweradmin/inc/config.inc.php”の変更部分のみ抜粋

$db_host = 'localhost';
$db_port = '3306';
$db_user = 'pdns';
$db_pass = '********'; 
$db_name = 'pdns';
$db_type = 'mysql';
$session_key = 'xxx'; //インストール後は任意の文字列に変更しましょう。
$iface_lang	= 'ja_JP'; //日本語に設定する場合はこちらに変更。

Apacheのサービスを起動します。

# /etc/rc.d/init.d/httpd start
# chkconfig httpd on 

WEBブラウザから

“http://10.0.0.4/poweradmin/install”

にアクセスして指示に従ってウィザードを進めます。

※ちなみに自分はここで
「Error: You have to install PHP mcrypt extension!」
と怒られてしまったので、この辺を参考に導入ずみ。

すべてがインストールし終えたら、installディレクトリを削除します。

おわり


すべて成功すればこのような管理画面上で操作が可能となります。
現段階ではゾーン情報の設定やら何も設定してないので、これから設定することになります。

うーむ、メールサーバを動かすまではまだまだ長い道のりみたいですね。。

参考サイト様

https://www.uramiraikan.net/Works/entry-2012.html
http://qiita.com/YamaguchiRei/items/a385d7855d1595c79802
http://sig9.hatenablog.com/entry/2016/12/20/120000
http://try-blog.com/blog-entry-35.html