この記事ではまずフルリゾルバの構築をしています。
権威DNSの構築は17日目、PowerDNS Adminの設定は19日目をご覧ください。
権威DNS: https://qiita.com/yuito_it_/items/3e74cf14ca0b2bc1e434
PowerDNS Admin: https://qiita.com/yuito_it_/items/d868a64c20035359a6df
はじめに
今回は内部DNSを立ててローカルIPに対してドメイン名でアクセスできるようにしていきます。
フルリゾルバは全てのドメインのデータを返すことのできるDNSサーバーです。
これを構築すると、内部の権威DNSも使えますし、名前解決が早くなるかもしれません。
PowerDNSとは
PowerDNSはGPLライセンスの下で公開されているDNSサーバーです。
そしてこれは、権威DNSサーバーもフルリゾルバも構築できます。
今回はこれを用いて、今回フルリゾルバを作成していきます。
環境
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-recursor
しかし、最近のOSは53番ポートをsystemd-resolved
が使用しているため、今は起動に失敗した皆のエラーが発生します。
無視して構いません。
systemd-resolved
を止めればいいってものでもなくて、これを止めるとaptコマンドが通らなくなるので、最後に調整します。
設定ファイルを編集する
設定ファイルは/etc/powerdns/recursor.conf
にあります。
それぞれ以下の行を探して編集してください。
allow-from=172.16.0.0/16 # どこからのリクエストを受け入れるか(例ではプライベートIPのみ)
forward-zones= example.com=127.0.0.1:5300 # 特定のドメインに関するリクエストを指定のDNSサーバーに転送する。詳しくは前の記事を参照
forward-zones-recurse=.=1.1.1.1 # 再起リクエスト先。キャッシュになかったり、forward-zonesに指定されていないドメインについての問い合わせ先
local-address=172.16.100.180,127.0.0.1 # 自分のIP。v6がある場合にはそれも。
権威DNSの設定を変更
同じサーバーで前の記事のように権威DNSを構築している場合、ポートを変更する必要があります。
今回は5300に変更しました。
DNSSEC
内部の権威DNSを使用する場合、DNSSECの関係でエラーが発生することがあります。
これを解決する方法は二つあります。
- 全てのDNSSECを無効化する
- 特定のドメインのみDNSSECを無効化する
- 権威DNS鯖をDNSSECに対応させる
あんまり数が多いのであれば、1を選んでもいいかと思います。
今回はそこまで数はないことと、DNSSECに権威DNS側で対応させる方法がいまいちわからなかったので、2番をやっていこうと思います。
ネガティブトラストアンカー(RFC7646)を設定していきます。1
/etc/powerdns/recursor.lua
をいじればいいらしいので、以下の通り追記。
+ addNTA('example.com.', "The LABO Use Only(ここに理由)")
さて、これで完了です。
起動してテスト
さて、起動してみましょう。
53番ポートで競合しているsystemd-resolved
も停止します。
sudo systemctl disable --now systemd-resolved
sudo systemctl restart pdns # 権威サーバーもある場合
sudo systemctl enable --now pdns-recursor
それでは、テストしてみましょう。
$ dig google.com @127.0.0.1
# 前略
;; ANSWER SECTION:
google.com. 71 IN A <IP>
# 後略
# 権威サーバーもある場合はこっちも
$ dig exsample.com @127.0.0.1
# 前略
;; ANSWER SECTION:
exsample.com. 71 IN A <権威サーバーで設定したIP>
# 後略
こうなればOKです。
次回はPowerDNS Adminという管理のWebアプリをデプロイしていきます。