PowerDNS Authoriative(権威DNS)の構築
- Ubuntu 18.04.1 LTS
- PowerDNS 4
MariaDBの導入
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liteserver.nl/repo/10.4/ubuntu bionic main'
sudo apt update
sudo apt install mariadb-server
PowerDNSの導入
echo "deb [arch=amd64] http://repo.powerdns.com/ubuntu bionic-auth-master main" | sudo tee /etc/apt/sources.list.d/pdns.list
cat <<EOF | sudo tee /etc/apt/preferences.d/pdns
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
EOF
PowerDNSのインストール
鍵を導入、アップデート、インストール
curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo apt-key add -
sudo apt-get update
sudo apt install pdns-server pdns-backend-mysql
Systemd Resolvedを停止
dns - How to disable systemd-resolved in Ubuntu? - Ask Ubuntu
systemd resolvedが53/udpを使用しているので停止
sudo systemctl stop systemd-resolved
再起動後の起動も止める
sudo systemctl disable systemd-resolved
自身のホスト名で名前解決ができなくなるので、以下を参考に /etc/hosts
を修正する。
127.0.0.1 dns-dhcp.a910.tak-cslab.org dns-dhcp
自身のホスト名で ping
が実行できるか確かめる
ping $(hostname)
PowerDNSを起動
以下で状態を確かめる。
sudo systemctl status pdns
起動していない場合は起動して永続化する。
sudo systemctl start pdns
sudo systemctl enable pdns
PowerDNSのセットアップ
https://doc.powerdns.com/authoritative/guides/basic-database.html
MariaDBでユーザーとテーブル作成
$ sudo mysql -uroot
### MariaDBコンソールで以下を実行
CREATE DATABASE データベース名 CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード';
続けて以下のテーブルを作成
use データベース名;
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 UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
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,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
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) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
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 CHARACTER SET 'latin1';
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 CHARACTER SET 'latin1';
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 CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Ctrl + Dで終了する。
$ cd /etc/powerdns/
PowerDNSの設定を行う
$ sudo cp pdns.conf pdns.conf.org
設定ファイル /etc/powerdns/pdns.conf を編集する
include-dir=/etc/powerdns/pdns.d
local-address=127.0.0.1
local-port=5300
setgid=pdns
setuid=pdns
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=ユーザー名
gmysql-dbname=データベース名
gmysql-password=パスワード
## DDNS
dnsupdate=yes
allow-dnsupdate-from=127.0.0.0/8,::1
forward-dnsupdate=yes
レコードの投入
## ゾーンの作成
sudo pdnsutil create-zone a910.tak-cslab.org ns1.a910.tak-cslab.org
## レコードの追加
sudo pdnsutil add-record a910.tak-cslab.org ns1 A 192.168.100.6
## ゾーンの確認
sudo pdnsutil list-zone a910.tak-cslab.org
## ゾーンの編集
sudo pdnsutil edit-zone a910.tak-cslab.org