概要
NAT64/DNS64の検証をしたい。そのために好きに使えるDNSサーバを立てたい。DNSといえばBIND。 でも、設計が古く複雑とのことで、脆弱性がよく報告されている。「オープンソースソフトウェアで」「比較的メンテナンスされており」「GUIもあるもの」としてPower DNS を選んだ。
Power DNS は、Version 4.0系から
- 権威サーバ(Authoritative Server)
- 名前解決サーバ(Recursive Server)
の二つに分離された。
この記事では名前解決サーバを構築する。一つ目の記事は以下で用意。
検証環境
Power DNS のrecursiveサーバ。
種別 | ソフトウェア | バージョン | 備考 |
---|---|---|---|
OS | Ubuntu Server | 20.04.2 | |
フルリゾルバ | Power DNS Recursor | 4.2.1-1build2 | APTでいれる |
PowerDNSの構築
PowerDNS Recursorのインストール
sudo apt install pdns-recursor
Ubuntuの場合、systemd-resolved
がUDP/53を使用しているため、PowerDNSを入れた段階では起動に失敗する。サービスを止めておけば動きそうだが、今度は名前解決できず、aptでパッケージを入れられない。ここは気にしない方向で進む。
初期設定の変更(recursor.conf)
設定項目 | デフォルト値 | 変更後 | 備考 |
---|---|---|---|
local-address | Loopbackアドレス | 適切なアドレス(検証では192.168.1.53,127.0.0.1) | 外部から問い合わせを受ける際のアドレス |
allow-from | コメントアウト | 適切なアドレス(検証では192.168.0.0/16) | 名前解決要求を受け入れるアドレス群 |
forward-zones-recurse | コメントアウト | .=8.8.8.8 | 再帰問い合わせ先。ここでは Google DNSを指定 |
forward-zone | コメントアウト | example.com=127.0.0.1:5353 | こちらの記事で同じサーバに権威サーバを立てた場合 |
$ sudo vi /etc/powerdns/recursor.conf
# Autogenerated configuration file template
#################################
# allow-from If set, only allow these comma separated netmasks to recurse
#
allow-from=192.168.0.0/16
(snip)
#################################
# forward-zones Zones for which we forward queries, comma separated domain=ip pairs
#
forward-zones= example.com=127.0.0.1:5353
(snip)
#################################
# forward-zones-recurse Zones for which we forward queries with recursion bit, comma separated domain=ip pairs
#
forward-zones-recurse=.=8.8.8.8
(snip)
#################################
# local-address IP addresses to listen on, separated by spaces or commas. Also accepts ports.
#
local-address=192.168.1.53,127.0.0.1
権威サーバの設定変更
こちらの記事で同じサーバに権威サーバを立てた場合、権威サーバとフルリゾルバでどちらもUDP/53を使用するため重複する。どちらかを調停する必要がある。今回は権威サーバ側のPort番号を修正した。スタブリゾルバが直接権威DNSへ聞きに来ることは考えにくいし。
$ sudo vi /etc/powerdns/pdns.conf
#################################
# local-port The port on which we listen
#
# local-port=53
local-port=5353
DNSSEC
Power DNSはDNSSEC のデフォルト動作が4.5.0から変更されている。
設定項目 | デフォルト値 |
---|---|
4.5.0まで | process-no-validate |
4.5.0以降 | process |
このため、DNSSEC設定のされていない権威サーバが管理するドメイン名の名前解決できるかは DNS Client 側の設定に依存する。ラボ環境などで回避するためには、recursor.conf
のdnssec
をprocess-no-validate
とする(4.5.0よりも前のバージョンに合わせる)か、recursor.lua
に例外として登録する。設定後は要・再起動。
Ubuntu 22.04では PowerDNS Recursorのバージョンが 4.6.0となり、この問題にヒットした。
$ sudo vi /etc/powerdns/recursor.lua
#################################
addNTA("example.com","This Domain NAME is used in LAB ONLY")
サービス再起動
$ sudo systemctl stop pdns.service
$ sudo systemctl stop pdns-recursor.service
$ sudo systemctl start pdns.service
$ sudo systemctl start pdns-recursor.service
正常性確認
digコマンドで試す。
$ dig www.google.com @192.168.1.53 +short
172.217.175.100 # Internet側のホスト名が返ってくる。
$ dig www.example.com @192.168.1.53 +short
192.0.2.1 # ローカル側で建てた権威サーバがホスト名を返してくる。
この後
Power DNSフルリゾルバはDNS64機能も具備している、らしい。この機能はVersion 4.4からサポート。今回構築した Ubuntu 20.04 ではVersion 4.2.1であってちょっと古くサポート外。幸い、Ubuntu 21.04では4.4系をサポートしていたため、試すのならそっちのほうになりそう。本格的な採用は来年4月の22.04待ち。