PowerDNS を立てる

DNS サーバーです。PowerDNS-Admin というブラウザGUI を使って管理できます。

PowerDNS Authoritative Server をインストール

LXD コンテナを作る

PowerDNS official installation guid

vi /etc/apt/sources.list.d/pdns.list

# Ubuntu 22.04
deb [arch=amd64] http://repo.powerdns.com/ubuntu jammy-auth-47 main

vi /etc/apt/preferences.d/pdns
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600

curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - &&
apt-get update &&
apt-get install pdns-server

# Use mariadb
apt install powerdns-backend-mysql

MySQL の初期設定

テーブルを作成。 MySQL default schema

mysql -u root
create database powerdns;
use powerdns;

# create table.

ユーザー追加 User add

grant all on powerdns.* to user_pdns@'127.0.0.1' identified by 'pass_pdns';
grant all on powerdns.* to user_pdns@'localhost' identified by 'pass_pdns';
grant all on powerdns.* to user_pdns@'192.168.0.0/255.255.0.0' identified by 'pass_pdns';

pdns.conf

vi /etc/powerdns/pdns.conf

// for powerdns-Admin
api=yes
api-key=A000C111B222

#include-dir=/etc/powerdns/pdns.d

launch=gmysql
gmysql-host=127.0.0.1   # ip address only
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=user_pdns
gmysql-password=pass_pdns
#gmysql-dnssec=yes

listen-port=1053

resolver=8.8.8.8, 8.8.8.4, 2001:4860:4860::8888, 2001:4860:4860::8844

webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=127.0.0.1,192.168.23.0/24,::1

ブラウザで確認(http://192.168.23.7:8081/)。

PowerDNS-Admin を使う

本当はpowerdns を構築したLXCコンテナ内に設置したかったんだけど、仕様変更でDocker のみの提供になってたので、LXCホストでdocker runする。

PowerDNS-Admin

// Launch container
docker run -d \
-e SECRET_KEY='a-very-secret-key' \
-v pda-data:/data \
-p 9191:80 \
powerdnsadmin/pda-legacy:latest

ブラウザで確認(http://192.168.23.3:9191/)。アカウント作成してログイン。初回設定(PDNS API URL)。

PowerDNS-Admin

PowerDNS Recursor を使う

PowerDNS Recursor を53番ポートで動かします。Lan 内からは通常のDNSキャッシュリゾルバとして動作し、設定したドメインについてはローカルで稼働するPowerDNS Authoritative Server に問い合わせします。Wan側からには沈黙します。

vi /etc/powerdns/recursor.conf

# allow-from を有効にするにはコメントアウトを外す事。
allow-from=127.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fc00::/7, fe80::/10

# for webserver
api-key=A000C111B222

forward-zones=mydomain1.com=127.0.0.1:1053;
forward-zones+=mydomain2.com=127.0.0.1:1053;

forward-zones-recurse=.=8.8.8.8;
forward-zones-recurse+=.=8.8.4.4;
forward-zones-recurse+=.=2001:4860:4860::8888;
forward-zones-recurse+=.=2001:4860:4860::8844;

local-address=192.168.8.7,192.168.23.7

// max-cache-ttl=300


webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=127.0.0.1,192.168.0.0/16,::1

dig が通れば成功。LAN内からも使えるかテスト。

dig ast.domain1.com @127.0.0.1 -p 53
dig yahoo.co.jp @192.168.23.7

ブラウザで確認(http://192.168.23.7:8082/)。

内向けDNSサーバーとして使う

hosts ファイルで定義できますが、iPad では無理。PowerDNS でローカルIP アドレスを返すAレコードを全世界に公開するのもルール違反です。そこでPowerDNS recursor で対応します。

vi /etc/powerdns/recursor.conf

// Use hosts file 
etc-hosts-file=/etc/hosts
export-etc-hosts=on

これでhosts ファイルに書かれた値を返します。