LoginSignup
4
7

More than 1 year has passed since last update.

Power DNSでフルリゾルバを構築する

Last updated at Posted at 2021-07-24

概要

NAT64/DNS64の検証をしたい。そのために好きに使えるDNSサーバを立てたい。DNSといえばBIND。 でも、設計が古く複雑とのことで、脆弱性がよく報告されている。「オープンソースソフトウェアで」「比較的メンテナンスされており」「GUIもあるもの」としてPower DNS を選んだ。

Power DNS は、Version 4.0系から

  1. 権威サーバ(Authoritative Server)
  2. 名前解決サーバ(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.confdnssecprocess-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待ち。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7