PowerDNS を立てる
DNS サーバーです。PowerDNS-Admin というブラウザGUI を使って管理できます。
PowerDNS Authoritative Server をインストール
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する。
// 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 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 ファイルに書かれた値を返します。