Linux/Source/PowerDNS
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
ns-lab
nowsky system-lab
DigiLoog
Linux
Windows
開始行:
*PowerDNS [#xe753079]
バックエンドにMySQL・PostgreSQLなどのデータベースを利用出...
端末からのDNSクエリを中継するキャッシュDNSサーバ(PowerDNS...
DNS専用リバースプロキシのdnsdistも組み合わせる事で、
BIND相当の権威DNS・キャッシュDNSの同居DNSサーバを構築する...
PowerDNSはAPIも用意されており、スクリプトで直にAPIを叩い...
BINDのテキストゾーンファイルを読み込んだりTinyDNSとの連携...
WebGUIでゾーン編集ができる事から、PowerDNSをHiddenPrimary...
~
*参考サイト [#rf3adb39]
-[[PowerDNS:+https://www.powerdns.com/]]
-[[PowerDNS 3.1 On Debian 7 (Wheezy):+https://stacksetup....
~
*構築環境 [#kd7a873d]
OSはopenSUSEを利用しているがプログラムはソースからビルド...
他ディストリビューションでも同様の手順で構築する事が出来...
- 共通環境
OS :openSUSE Leap 42.3
PDNS:PowerDNS v4.1.4
#region(PowerDNS Authoritative Server)
今回は下記構成のPowerDNSをchrootモードで構築する。
バックエンドにはMySQLを利用するので事前にビルドしておく。
- [[Linux/Source/MySQL]]
> PDNS Parameter
user :pdns
group:pdns
---
> DB Parameter
database:pdns_zone
user :pdns_user
password:pdns_pass
#endregion
~
*インストール [#b38ee685]
-&size(16){&font(b){1. インストール};};
最近のOSはsystemdを使っている事が多いので、systemdモジュ...
また、今回はバックエンドにMySQLを使うのでDBモジュールもビ...
luaは使う時が来そうなので一応ビルド。必要なければconfigur...
# zypper install lua53 lua53-devel systemd systemd-devel
# wget https://downloads.powerdns.com/releases/pdns-4.1....
# tar jxvf pdns-4.1.4.tar.bz2
# cd pdns-4.1.4
# ./configure --prefix=/usr/local/powerdns --enable-tool...
# make
# make install
# ln -s /usr/local/powerdns/etc /etc/powerdns
# cp /etc/powerdns/pdns.conf-dist /etc/powerdns/pdns.conf
-&size(16){&font(b){2. コンフィグ作成};};
PowerDNSのコンフィグはテキストで作成する必要がある。
APIはPowerDNS単体では使わないので無効化しておき、APIを利...
DB接続は別ファイル化して必要に応じてパーミッションを絞っ...
起動スクリプトについては、ソースコード同梱の物が上手く動...
#region(/etc/powerdns/pdns.conf)
8bit-dns=no # 8bitDNSクエリを拒否
allow-axfr-ips=127.0.0.1,::1 # DNSゾーン転送(AXFR)...
# also-notify= # DNSゾーンに記載した...
# 通常はコメント化す...
any-to-tcp=yes # TCPリモート参照に応...
api=no # REST APIを無効化
api-key=API-PASSWORD # REST APIの事前共有...
cache-ttl=60 # PowerDNSのDNSクエリ...
# この値はDNSゾーンの...
chroot=/var/powerdns/chroot # PowerDNSをchroot動...
config-dir=/etc/powerdns # コンフィグを読み取...
# コンフィグ自体に設...
disable-axfr=no # DNSゾーン転送を許可
disable-syslog=no # ログをsyslog出力す...
disable-tcp=no # TCPクエリにも応答さ...
dnsupdate=no # DNS Update(DynamicD...
guardian=no # GuardianProcess内で...
# 有効にした方がセキ...
include-dir=/etc/powerdns/extra # 外部ファイルを保存...
launch=gmysql # PowerDNSのバックエ...
local-address=0.0.0.0 # PowerDNSでLISTENす...
local-ipv6=:: # PowerDNSでLISTENす...
local-port=53 # Listenする時に利用...
log-dns-details=no # 詳細ログの出力を停...
log-dns-queries=yes # DNSクエリログを出力...
log-timestamp=yes # ログにタイムスタン...
logging-facility=0 # 出力ログのsyslog-fa...
loglevel=6 # ログ出力レベル。1~...
master=yes # PowerDNSをマスター...
slave=yes # PowerDNSをスレーブ...
query-local-address=0.0.0.0 # PowerDNS自体が名前...
query-local-address6=:: # PowerDNS自体が名前...
query-logging=no # PowerDNS自体が名前...
setgid=pdnsd # daemon実行グループ
setuid=pdnsd # daemon実行ユーザ
daemon=yes # daemonとして動作
socket-dir=/var/run/powerdns # PowerDNSのソケット...
# chroot環境下ではchr...
version-string=unknown # DNSのバージョン応答...
webserver=no # Webサーバ機能。REST...
webserver-address=127.0.0.1 # WebサーバのLISTEN I...
webserver-allow-from=127.0.0.1,::1 # Webサーバにアクセス...
webserver-password=PASSWORD # Webサーバにアクセス...
webserver-port=8081 # Webサーバ/REST API...
#endregion
#region(/etc/powerdns/extra/gmysql.conf)
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=pdns_zone
gmysql-user=pdns_user
gmysql-password=pdns_pass
gmysql-dnssec=no
#endregion
#region(/usr/lib/systemd/system/pdns.service)
[Unit]
Description=PowerDNS Authoritative Server
Documentation=https://doc.powerdns.com/
Wants=network-online.target
After=network-online.target mysqld.service mariadb.servi...
[Service]
Type=forking
ExecStart=/usr/local/powerdns/sbin/pdns_server --config-...
ExecStop=/usr/local/powerdns/bin/pdns_control quit
ExecReload=/usr/local/powerdns/bin/pdns_control reload
## OPTION
Restart=on-failure
RestartSec=1
StartLimitInterval=0
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
#endregion
-&size(16){&font(b){3. 起動準備};};
chrootディレクトリの作成、パーミッション設定、DBスキーマ...
PowerDNSはログ出力をsyslog経由でしか出来ない為、ログを書...
ただし、chroot環境下でPowerDNSのログをsyslog出力させるに...
PowerDNSのログを&color(#ff0000){syslog側でフックさせる為...
・ユーザ作成と起動スクリプト設定
---
# groupadd pdnsd
# useradd -g pdnsd -s /sbin/nologin -d /var/powerdns pdnsd
# chmod 644 /usr/lib/systemd/system/pdns.service
# chown root.root /usr/lib/systemd/system/pdns.service
# systemctl enable pdns
・chrootディレクトリ作成
---
# mkdir -p /var/powerdns/chroot
# mkdir -p /var/powerdns/chroot/dev
# mkdir -p /var/powerdns/chroot/var/log
# mkdir -p /var/powerdns/chroot/var/run/pdnsd
# chmod 755 /var/powerdns/chroot/var/run/pdnsd
# chown root.pdnsd /var/powerdns/chroot/var/run/pdnsd
# cd /var/powerdns/chroot
# touch ./var/log/api
# chmod -R 755 ./var/log
# chown -R pdnsd.pdnsd ./var/log
# cd /var/powerdns/chroot/dev
# mknod -m 644 ./null c 1 3
# mknod -m 644 ./zero c 1 5
# mknod -m 644 ./full c 1 7
# mknod -m 644 ./random c 1 8
# mknod -m 644 ./urandom c 1 9
・DBスキーマ登録
---
MariaDB [(none)]> create database pdns_zone;
MariaDB [(none)]> grant all on pdns_zone.* to pdns_user ...
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
---
# cd ${PDNS_SRC}/modules/gmysqlbackend/
# mysql -u pdns_user -p pdns_zone < schema.mysql.sql
・rsyslog設定変更
---
# vi /etc/rsyslog.conf
---
## PowerDNS chroot log device
$AddUnixListenSocket /var/powerdns/chroot/dev/log
local0.* /var/log/powerdns
& stop
~
*DNSゾーン登録 [#oe42fac7]
バックエンドにMySQLを使っている場合、SQLコマンドでDNSゾー...
BINDテキスト形式でゾーンを作った後に変換しながらDBに登録...
今回はテスト用にDNSゾーンを登録する為、SQLコマンドで登録...
# vi example.com-sql
---
INSERT INTO domains (name,type) values ('example.com','N...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
# mysql -u pdns_user -p pdns_zone < example.com-sql
# dig @127.0.0.1 ns1.example.com
~
*起動テスト [#e739e825]
起動テストを行う場合、『pdns_server』コマンドをそのまま実...
コンフィグを書き換えれば、ログを標準出力にしながらdaemon...
・起動
---
systemctl start pdns
・停止
---
systemctl stop pdns
・リロード
---
systemctl reload pdns
PowerDNSに登録したゾーン情報の書式確認を行う場合、チェッ...
セカンダリサーバへのゾーン転送が出来ない時は、書式間違い...
# /usr/local/powerdns/bin/pdnsutil check-all-zones
---
Nov 09 23:32:41 Reading random entropy from '/dev/urandom'
Checked 3 records of 'example.com', 0 errors, 0 warnings.
Checked 1 zones, 0 had errors.
~
*PDNS Manager [#m5c0f702]
PowerDNSをGUIで操作するフロントWebアプリケーション。
PHPで出来ているので、LAMPを構築してあれば大抵の環境で動作...
&color(#ff0000){アプリの構造上、&font(b){サブディレクトリ...
他にもWebアプリを動かしている環境下では、VirtualHostで別F...
なお、PowerDNSのバックエンドDBをPDNS Manager用に作り直す...
頑張れば、DB設定を直書きしたり個別にInsertすれば既存DBで...
- [[PDNS Manager:+https://pdnsmanager.org/]]
#region(インストール)
# wget https://dl.pdnsmanager.org/pdnsmanager-2.0.1.tar.gz
# tar zxvf pdnsmanager-2.0.1.tar.gz
# mv pdnsmanager-2.0.1 /var/www/pdnsmanager
# chown -R root.www /var/www/pdnsmanager
# chmod -R g-w,o-rwx /var/www/pdnsmanager
# chown www.www /var/www/pdnsmanager/backend/config
#endregion
#region(VirtualHost設定)
Listen 10080
<VirtualHost *:10080>
ServerAdmin postmaster@localhost
ServerName pdnsmanager.example.com
DocumentRoot /var/www/pdnsmanager/frontend
RewriteEngine On
RewriteRule ^index\.html$ - [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule !^/api/\.* /index.html [L]
<Directory /var/www/pdnsmanager/frontend>
Require all granted
</Directory>
Alias /api /var/www/pdnsmanager/backend/public
<Directory /var/www/pdnsmanager/backend/public>
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</Directory>
</VirtualHost>
#endregion
#region(データベース再生成)
DBにDNSゾーン情報が登録されていると、PDNS Managerからスキ...
そんな時はデータベースを別名で作成して、PowerDNSとPDNS Ma...
既存のデータベースを一度削除した上で再登録を行う。
MariaDB [(none)]> drop database pdns_zone;
MariaDB [(none)]> create database pdns_zone;
MariaDB [(none)]> quit
#endregion
#region(データベース登録)
今回設定したFQDNを用いて、
Webブラウザで『h++p://pdnsmanager.example.com:10080/setup...
細かい設定内容は[[公式ドキュメント:+https://pdnsmanager.o...
#ref(Linux/Source/PowerDNS/wiki_powerdns_01.png,70%,left,...
#endregion
終了行:
*PowerDNS [#xe753079]
バックエンドにMySQL・PostgreSQLなどのデータベースを利用出...
端末からのDNSクエリを中継するキャッシュDNSサーバ(PowerDNS...
DNS専用リバースプロキシのdnsdistも組み合わせる事で、
BIND相当の権威DNS・キャッシュDNSの同居DNSサーバを構築する...
PowerDNSはAPIも用意されており、スクリプトで直にAPIを叩い...
BINDのテキストゾーンファイルを読み込んだりTinyDNSとの連携...
WebGUIでゾーン編集ができる事から、PowerDNSをHiddenPrimary...
~
*参考サイト [#rf3adb39]
-[[PowerDNS:+https://www.powerdns.com/]]
-[[PowerDNS 3.1 On Debian 7 (Wheezy):+https://stacksetup....
~
*構築環境 [#kd7a873d]
OSはopenSUSEを利用しているがプログラムはソースからビルド...
他ディストリビューションでも同様の手順で構築する事が出来...
- 共通環境
OS :openSUSE Leap 42.3
PDNS:PowerDNS v4.1.4
#region(PowerDNS Authoritative Server)
今回は下記構成のPowerDNSをchrootモードで構築する。
バックエンドにはMySQLを利用するので事前にビルドしておく。
- [[Linux/Source/MySQL]]
> PDNS Parameter
user :pdns
group:pdns
---
> DB Parameter
database:pdns_zone
user :pdns_user
password:pdns_pass
#endregion
~
*インストール [#b38ee685]
-&size(16){&font(b){1. インストール};};
最近のOSはsystemdを使っている事が多いので、systemdモジュ...
また、今回はバックエンドにMySQLを使うのでDBモジュールもビ...
luaは使う時が来そうなので一応ビルド。必要なければconfigur...
# zypper install lua53 lua53-devel systemd systemd-devel
# wget https://downloads.powerdns.com/releases/pdns-4.1....
# tar jxvf pdns-4.1.4.tar.bz2
# cd pdns-4.1.4
# ./configure --prefix=/usr/local/powerdns --enable-tool...
# make
# make install
# ln -s /usr/local/powerdns/etc /etc/powerdns
# cp /etc/powerdns/pdns.conf-dist /etc/powerdns/pdns.conf
-&size(16){&font(b){2. コンフィグ作成};};
PowerDNSのコンフィグはテキストで作成する必要がある。
APIはPowerDNS単体では使わないので無効化しておき、APIを利...
DB接続は別ファイル化して必要に応じてパーミッションを絞っ...
起動スクリプトについては、ソースコード同梱の物が上手く動...
#region(/etc/powerdns/pdns.conf)
8bit-dns=no # 8bitDNSクエリを拒否
allow-axfr-ips=127.0.0.1,::1 # DNSゾーン転送(AXFR)...
# also-notify= # DNSゾーンに記載した...
# 通常はコメント化す...
any-to-tcp=yes # TCPリモート参照に応...
api=no # REST APIを無効化
api-key=API-PASSWORD # REST APIの事前共有...
cache-ttl=60 # PowerDNSのDNSクエリ...
# この値はDNSゾーンの...
chroot=/var/powerdns/chroot # PowerDNSをchroot動...
config-dir=/etc/powerdns # コンフィグを読み取...
# コンフィグ自体に設...
disable-axfr=no # DNSゾーン転送を許可
disable-syslog=no # ログをsyslog出力す...
disable-tcp=no # TCPクエリにも応答さ...
dnsupdate=no # DNS Update(DynamicD...
guardian=no # GuardianProcess内で...
# 有効にした方がセキ...
include-dir=/etc/powerdns/extra # 外部ファイルを保存...
launch=gmysql # PowerDNSのバックエ...
local-address=0.0.0.0 # PowerDNSでLISTENす...
local-ipv6=:: # PowerDNSでLISTENす...
local-port=53 # Listenする時に利用...
log-dns-details=no # 詳細ログの出力を停...
log-dns-queries=yes # DNSクエリログを出力...
log-timestamp=yes # ログにタイムスタン...
logging-facility=0 # 出力ログのsyslog-fa...
loglevel=6 # ログ出力レベル。1~...
master=yes # PowerDNSをマスター...
slave=yes # PowerDNSをスレーブ...
query-local-address=0.0.0.0 # PowerDNS自体が名前...
query-local-address6=:: # PowerDNS自体が名前...
query-logging=no # PowerDNS自体が名前...
setgid=pdnsd # daemon実行グループ
setuid=pdnsd # daemon実行ユーザ
daemon=yes # daemonとして動作
socket-dir=/var/run/powerdns # PowerDNSのソケット...
# chroot環境下ではchr...
version-string=unknown # DNSのバージョン応答...
webserver=no # Webサーバ機能。REST...
webserver-address=127.0.0.1 # WebサーバのLISTEN I...
webserver-allow-from=127.0.0.1,::1 # Webサーバにアクセス...
webserver-password=PASSWORD # Webサーバにアクセス...
webserver-port=8081 # Webサーバ/REST API...
#endregion
#region(/etc/powerdns/extra/gmysql.conf)
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=pdns_zone
gmysql-user=pdns_user
gmysql-password=pdns_pass
gmysql-dnssec=no
#endregion
#region(/usr/lib/systemd/system/pdns.service)
[Unit]
Description=PowerDNS Authoritative Server
Documentation=https://doc.powerdns.com/
Wants=network-online.target
After=network-online.target mysqld.service mariadb.servi...
[Service]
Type=forking
ExecStart=/usr/local/powerdns/sbin/pdns_server --config-...
ExecStop=/usr/local/powerdns/bin/pdns_control quit
ExecReload=/usr/local/powerdns/bin/pdns_control reload
## OPTION
Restart=on-failure
RestartSec=1
StartLimitInterval=0
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
#endregion
-&size(16){&font(b){3. 起動準備};};
chrootディレクトリの作成、パーミッション設定、DBスキーマ...
PowerDNSはログ出力をsyslog経由でしか出来ない為、ログを書...
ただし、chroot環境下でPowerDNSのログをsyslog出力させるに...
PowerDNSのログを&color(#ff0000){syslog側でフックさせる為...
・ユーザ作成と起動スクリプト設定
---
# groupadd pdnsd
# useradd -g pdnsd -s /sbin/nologin -d /var/powerdns pdnsd
# chmod 644 /usr/lib/systemd/system/pdns.service
# chown root.root /usr/lib/systemd/system/pdns.service
# systemctl enable pdns
・chrootディレクトリ作成
---
# mkdir -p /var/powerdns/chroot
# mkdir -p /var/powerdns/chroot/dev
# mkdir -p /var/powerdns/chroot/var/log
# mkdir -p /var/powerdns/chroot/var/run/pdnsd
# chmod 755 /var/powerdns/chroot/var/run/pdnsd
# chown root.pdnsd /var/powerdns/chroot/var/run/pdnsd
# cd /var/powerdns/chroot
# touch ./var/log/api
# chmod -R 755 ./var/log
# chown -R pdnsd.pdnsd ./var/log
# cd /var/powerdns/chroot/dev
# mknod -m 644 ./null c 1 3
# mknod -m 644 ./zero c 1 5
# mknod -m 644 ./full c 1 7
# mknod -m 644 ./random c 1 8
# mknod -m 644 ./urandom c 1 9
・DBスキーマ登録
---
MariaDB [(none)]> create database pdns_zone;
MariaDB [(none)]> grant all on pdns_zone.* to pdns_user ...
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
---
# cd ${PDNS_SRC}/modules/gmysqlbackend/
# mysql -u pdns_user -p pdns_zone < schema.mysql.sql
・rsyslog設定変更
---
# vi /etc/rsyslog.conf
---
## PowerDNS chroot log device
$AddUnixListenSocket /var/powerdns/chroot/dev/log
local0.* /var/log/powerdns
& stop
~
*DNSゾーン登録 [#oe42fac7]
バックエンドにMySQLを使っている場合、SQLコマンドでDNSゾー...
BINDテキスト形式でゾーンを作った後に変換しながらDBに登録...
今回はテスト用にDNSゾーンを登録する為、SQLコマンドで登録...
# vi example.com-sql
---
INSERT INTO domains (name,type) values ('example.com','N...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
INSERT INTO records (domain_id,name,content,type,ttl,pri...
# mysql -u pdns_user -p pdns_zone < example.com-sql
# dig @127.0.0.1 ns1.example.com
~
*起動テスト [#e739e825]
起動テストを行う場合、『pdns_server』コマンドをそのまま実...
コンフィグを書き換えれば、ログを標準出力にしながらdaemon...
・起動
---
systemctl start pdns
・停止
---
systemctl stop pdns
・リロード
---
systemctl reload pdns
PowerDNSに登録したゾーン情報の書式確認を行う場合、チェッ...
セカンダリサーバへのゾーン転送が出来ない時は、書式間違い...
# /usr/local/powerdns/bin/pdnsutil check-all-zones
---
Nov 09 23:32:41 Reading random entropy from '/dev/urandom'
Checked 3 records of 'example.com', 0 errors, 0 warnings.
Checked 1 zones, 0 had errors.
~
*PDNS Manager [#m5c0f702]
PowerDNSをGUIで操作するフロントWebアプリケーション。
PHPで出来ているので、LAMPを構築してあれば大抵の環境で動作...
&color(#ff0000){アプリの構造上、&font(b){サブディレクトリ...
他にもWebアプリを動かしている環境下では、VirtualHostで別F...
なお、PowerDNSのバックエンドDBをPDNS Manager用に作り直す...
頑張れば、DB設定を直書きしたり個別にInsertすれば既存DBで...
- [[PDNS Manager:+https://pdnsmanager.org/]]
#region(インストール)
# wget https://dl.pdnsmanager.org/pdnsmanager-2.0.1.tar.gz
# tar zxvf pdnsmanager-2.0.1.tar.gz
# mv pdnsmanager-2.0.1 /var/www/pdnsmanager
# chown -R root.www /var/www/pdnsmanager
# chmod -R g-w,o-rwx /var/www/pdnsmanager
# chown www.www /var/www/pdnsmanager/backend/config
#endregion
#region(VirtualHost設定)
Listen 10080
<VirtualHost *:10080>
ServerAdmin postmaster@localhost
ServerName pdnsmanager.example.com
DocumentRoot /var/www/pdnsmanager/frontend
RewriteEngine On
RewriteRule ^index\.html$ - [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule !^/api/\.* /index.html [L]
<Directory /var/www/pdnsmanager/frontend>
Require all granted
</Directory>
Alias /api /var/www/pdnsmanager/backend/public
<Directory /var/www/pdnsmanager/backend/public>
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</Directory>
</VirtualHost>
#endregion
#region(データベース再生成)
DBにDNSゾーン情報が登録されていると、PDNS Managerからスキ...
そんな時はデータベースを別名で作成して、PowerDNSとPDNS Ma...
既存のデータベースを一度削除した上で再登録を行う。
MariaDB [(none)]> drop database pdns_zone;
MariaDB [(none)]> create database pdns_zone;
MariaDB [(none)]> quit
#endregion
#region(データベース登録)
今回設定したFQDNを用いて、
Webブラウザで『h++p://pdnsmanager.example.com:10080/setup...
細かい設定内容は[[公式ドキュメント:+https://pdnsmanager.o...
#ref(Linux/Source/PowerDNS/wiki_powerdns_01.png,70%,left,...
#endregion
ページ名: