この記事ではまず権威DNSの構築をしています。
キャッシュリゾルバの構築は18日目、PowerDNS Adminの設定は19日目をご覧ください。
(リンクは追記します。)
はじめに
今回は内部DNSを立ててローカルIPに対してドメイン名でアクセスできるようにしていきます。
権威DNSというのは、一つもしくは複数のドメインの情報を管理する末端のDNSです。
PowerDNSとは
PowerDNSはGPLライセンスの下で公開されているDNSサーバーです。
そしてこれは、権威DNSサーバーもキャッシュDNSサーバーも構築できます。
今回はこれを用いて、まずは権威DNSを作成していきます。
なぜBINDじゃないの?
BINDはもちろん有名なのですが、とにかく脆弱性が多いということで、却下になりました。
環境
PowerDNSはDBでレコードを管理しています。
MySQLやPostgresSQLなどさまざま対応していますが、今回はPostgresSQLを使用していきます。
cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
PowerDNSをインストール
普通にaptでインストールします。
sudo apt install pdns-server pdns-tools
しかし、最近のOSは53番ポートをsystemd-resolved
が使用しているため、今は起動に失敗した皆のエラーが発生します。
無視して構いません。
systemd-resolved
を止めればいいってものでもなくて、これを止めるとaptコマンドが通らなくなるので、最後に調整します。
DBの構築
まず、PostgresSQLとPDNSのPostgresSQLのライブラリをインストールします。
sudo apt-get install pdns-backend-pgsql postgresql
次に、PostgresSQLのユーザーを作成します。
sudo -u postgres createuser -P -s -e pdns
よくわかりませんが、パスワードがないとPDNS側でエラーが起こりました。
最後にスキーマを流し込みます。
/usr/share/pdns-backend-pgsql/schema/schema.pgsql.sql
にスキーマがあるようです。
sudo -u pdns createdb pdns
sudo -u pdns sh -c "psql -U pdns -d pdns -a -f /usr/share/pdns-backend-pgsql/schema/schema.pgsql.sql"
PDNSの設定
では、PowerDNSの設定をしていきましょう。
/etc/powerdns/pdns.conf
の設定ファイルを変更していきます。
#################################
# launch Which backends to launch and order to query them in
#
# launch=
launch=gpgsql
gpgsql-host=/run/postgresql
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=pdns
gpgsql-user=pdns
gpgsql-password="password"
該当のコメントアウトの下に、追記しました。
いざ、起動!!!
というわけで、起動してみましょう。
まず、先ほども話した通り、最近のOSはローカルホストにリゾルバがあるようなので、そいつを止めます。
sudo systemctl stop systemd-resolved
次に、pdnsサービスを起動します。
sudo systemctl start pdns
ついでに自動起動する方法も
自動起動するには、systemctlに登録する必要があります。
sudo systemctl enable pdns
# ついでに邪魔なやつを止めておく
sudo systemctl disable systemd-resolved
テスト
チュートリアル通りにちょっとテスト...
sudo -u pdns pdnsutil create-zone example.com ns1.example.com
sudo -u pdns pdnsutil add-record example.com '' MX '25 mail.example.com'
sudo -u pdns pdnsutil add-record example.com. www A 192.0.2.1
これは、exsample.comというゾーンを作成、MXを指定する。
その後に、wwwを指定しています。
dig +short <www.example.com> @127.0.0.1
# 192.0.2.1
dig +short example.com MX @127.0.0.1
# 25 mail.example.com
しっかり返ってくることがわかればOKです。
参考文献