2016年6月24日

DNS Summer Day 2016

PowerDNS自己紹介

株式会社デージーネット
大野 公善

2

会社紹介
株式会社デージーネット
設立
社員数
本社
東京営業所

1999年5月
49名
愛知県 名古屋市 名東区 上社
東京都 港区 浜松町

企業理念

より良い技術で、インターネット社会の便利と安心に貢献します。

3

事業内容
オープンソースソフトウェアを中心としたシステムインテグレーション
専門的技術サービスの提供（全国のISP、ネットサービス、企業、大学等）
設計、構築、運用、管理、保守まですべてをトータルに提供
OSSのカスタマイズによるフルオーダー型のシステム構築
ソフトウェア開発
書籍出版

4PowerDNSとは？
オープンソースのDNSサーバ「権威DNSサーバ(Authoritative Server)」と「名前解決サーバ(Recursor)」で構成
歴史
1999年に発足
最初はクローズドソースだった
2002年にオープンソースとしてリリース
2005年あたりにユーザが増え始めた

現在の最新版はAuthoritatuve Server
Recursor

3.4.9
3.7.3

5

PowerDNSのいいところ
バックエンドのデータベースとして、メジャーなデータベースが利用可能
MySQL, PostgreSQL, SQLite3, Oracle, Sybase,
Microsoft SQL Server, LDAP, BIND形式ゾーンファイル
Poweradmin等の管理ウェブインタフェースと組み合わせて利用可能

高パフォーマンス
BINDより早い
後ほどベンチマークの結果を提示いたします

DNSSECサポート
DNSSECをフルサポート
DNSSECに関連する処理が自動的に行われる

統計情報参照内部ウェブサーバにより、ウェブインタフェースから統計情報を参照可能
6

バージョンアップの履歴
Authoritative Server 3.X
3.4.9
3.4.8
3.4.7
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0

2016年5月17日
2016年2月3日
2015年11月3日
2015年8月27日
2015年6月9日
2015年4月23日
2015年3月2日
2015年2月3日
2014年10月30日
2014年9月30日

Authoritative Server 4.X
4.0.0 beta1
4.0.0 alpha34.0.0 alpha2
4.0.0 alpha1

2016年5月27日
2016年5月11日
2016年2月25日
2016年2月4日

7セキュリティ問題の履歴 ①
2006-11-13 PowerDNS Security Advisory 2006-01
CVE-2006-4251
影響範囲: Recursor 3.1.3 以前
細工したTCP問い合わせによるバッファオーバーフローの問題
2006-11-13 PowerDNS Security Advisory 2006-02
CVE-2006-4252
影響範囲: Recursor 3.1.3 以前
0秒CNAME TTLsが指定された時、スタック領域を使い果たしてクラッシュ
2008-03-31 PowerDNS Security Advisory 2008-01
CVEアサインなし
影響範囲: Recursor 3.1.4 以前
システム乱数生成が予測されてることで、偽装攻撃を許可
2008-08-06 PowerDNS Security Advisory 2008-02
CVE-2008-3337
影響範囲: Authoritative Server 2.9.21 以前
いくつかの問い合わせに答えないことにより、ドメインの偽装をしやすくなる問題
2008-11-18 PowerDNS Security Advisory 2008-03
CVEアサインなし
影響範囲: Authoritative Server 2.9.21.1 以前
CH HINFO問い合わせを送信すると、再起動されてしまう問題8セキュリティ問題の履歴 ②
2010-01-06 PowerDNS Security Advisory 2010-01
CVE-2009-4009
影響範囲: Recursor 3.1.7.1 以前
細工したパケットを送信することで、バッファオーバーフローを引き起こすことができる問題
2010-01-06 PowerDNS Security Advisory 2010-02
CVE-2009-4010
影響範囲: Recursor 3.1.7.1 以前
細工したパケットを送信することで、偽のデータを受け入れさせることができる問題
2012-01-10 PowerDNS Security Advisory 2012-01
CVE-2012-0206
影響範囲: Authoritative Server versions 3.0.1 より前細工したUDPパケットを使用することで、サービスを一時的に停止させることができ、パケットループを引き起こすことができる問題
2014-09-10 PowerDNS Security Advisory 2014-01
CVE-2014-3614
影響範囲: Recursor 3.6.0
細工したパケットによるクラッシュの問題
9セキュリティ問題の履歴 ③
2014-12-08 PowerDNS Security Advisory 2014-02
CVE-2014-8601
影響範囲: Recursor 3.6.1 以前
特別な設定をしたドメインにクエリを送った時のパフォーマンが低下する問題
2015-04-23 PowerDNS Security Advisory 2015-01
CVE-2015-1868 (original), CVE-2015-5470 (update)
影響範囲: Recursor 3.5 以前, Authoritative Server 3.2 以前
細工したクエリを送信することで、クラッシュやCPU使用率増加を引き起こせる問題
2015-09-02 PowerDNS Security Advisory 2015-02
CVE-2015-5230
影響範囲: Authoritative Server 3.4.0 〜 3.4.5
パケット解析のバグにより、クラッシュ等を引き起こせる問題
2015-11-09 PowerDNS Security Advisory 2015-03
CVE-2015-5311
影響範囲: Authoritative Server 3.4.4 〜 3.4.6
細工されたパケットを受け取った時、PowerDNSのプロセスが停止されられる問題
10

セキュリティ問題の履歴 ④
Version 3.X のセキュリティアドバイザリは2008年以降で13件多い時でも年に3件程度(Authoritative Serverは3件だけ)
BIND9のセキュリティアドバイザリは？
2008年以降では47件
多い時は年に10件以上

11

DNSSECの運用: DNSSECの有効化

pdnssecコマンドでDNSSECの管理を行うことができます。
# pdnssec secure-zone example.com
Securing zone with default key size
Adding KSK with algorithm rsasha256
Adding ZSK with algorithm rsasha256
Zone example.com secured
Adding NSEC ordering information12DNSSECの運用: DNSSECを確認# dig +dnssec @127.0.0.1 example.com(snip);; AUTHORITY SECTION:
example.com.
3600
IN SOA localhost. ahu.ds9a.nl. 1 10800 3600 604800 3600
example.com.
3600
IN RRSIG SOA 8 2 86400 20160623000000 20160602000000
31698 example.com. HXRG1dBz2IcdfHyt0fr/22ndZsTwsuDq8rVjKaOaHnQJYMoS9OhZVLRq
wu1jvd6vIoLpdZBi3ZLBI/yHuRcJj3Vwj5lVlkjAlg0GjUmzQTGa5DLW
lQ64hw6OcoLZPmbHdju/mfy80n9bwlk8v/I3k9L8uPNuXGOh3XbKgvwe Jsw=
example.com.
3600
IN NSEC
localhost.example.com. NS SOA MX RRSIG NSECDNSKEY
example.com.
3600
IN RRSIG NSEC 8 2 3600 20160623000000 20160602000000
31698 example.com. qJC1MtScNORCaEgbOJ+QnFGzVPcvY1mhoGbj98yw1qVqlzdWatcEeZ4i
tdPdRmam9bE6CHZmfOjqAF4csDUMnsqDmVdM2CD1vXmx62diMqsJognx
deLZrkcpWD0qfQd9KPGs8LnRNHX5wE6NH51nWMf6HZo+LFsGRGB68WsD VzI=;; Query time: 1 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: 木 6月 16 04:27:12 JST 2016;; MSG SIZE rcvd: 482
13DNSSECの運用: DNSKEY,DSレコードを確認# pdnssec show-zone example.com
Zone is not presigned
Zone has NSEC semantics
keys:
ID = 3 (KSK), tag = 43841, algo = 8, bits = 2048 Active: 1 ( RSASHA256 )KSK DNSKEY = example.com IN DNSKEY 257 3 8
AwEAAc0OsTsiJn/n3pcyNr3P6bqPQR4fHXGu9t1a5Sy3nr5bJGECJQmI8YI2mYMy5/ZwWrzoGW
qzAxu7l1D5KhtU7zA0H1V3AEDF87TkcpNM17cNf7X/QuUzkQm9Ms3JoT/k8a9SmkAy/MRO8WZw
SvpQSdBIw6cWmQyepHdJgGXqc7t+/qQuCmxhpqw/oIhkUxyKaVG7tpJjEzJeFFPVNKLvC2Qs6b
qXA+toLMWDUKgKHZx08TUalNfhD4tN64vUdqZgiHWCRyJzJE0O/q4A3xvspFCM5c0D6NtloXhn
pqtyaEJOrwLDaBdVHu+tfVk5NWhi8bdlaKS3rUSmkV2l4mCr89U= ; ( RSASHA256 )DS = example.com IN DS 43841 8 1
c11bd1687f3ce371418c2873705071716dc33693 ; ( SHA1 digest )DS = example.com IN DS 43841 8 2
b9dc49005d3511bd4b44703343dd450f4cb22df9a86ce9abb0fa38a270b03b41 ;( SHA256 digest )DS = example.com IN DS 43841 8 47a6ffbb8978968d5ac504fde2b4e8d31351b276f3e91ac7f1622bf1adce4f77939c7ffe5ae
f04383e4532eb9f54a6922 ; ( SHA-384 digest )ID = 4 (ZSK), tag = 31698, algo = 8, bits = 1024 Active: 1 ( RSASHA256 )14

BINDで利用していた鍵の再利用
1 ゾーンに署名するゾーン署名鍵ZSK (Zone Signing Key)のインポート# pdnssec import-zone-key ZONE FILENAME zsk
2 ゾーン署名鍵ZSKに署名する鍵署名鍵KSK (Key SigningKey)# pdnssec import-zone-key ZONE FILENAME ksk
3 新しいキーIDの確認# pdnssec show-zone ZONE(snip)
ID = 5 (ZSK), tag = 33753, algo = 8, bits = 1024
Active: 1 ( RSASHA256 )
4 新しいキーIDの確認# pdnssec activate-zone-key ZONE 515

BINDからのゾーンファイルの移行
BINDゾーンファイルの移行ツール zone2sql を利用可能[example.com.zone]$TTL 3600@
IN SOA example.com. postmaster.example.com.
2016062401; Serial
1D; Refresh
1H; Retry
1W; Expire
3H ); Minimum
IN NS
ns1.example.com.
IN MX
10 mx1.example.com.
IN MX
20 mx2.example.com.
ns1
IN A
192.168.100.1
mx1
IN A
192.168.100.2
mx2
IN A
192.168.100.3
wwwIN A
192.168.100.4
mail1
IN CNAME
mx1.example.com.
mail2
IN CNAME
mx2.example.com.

(BINDゾーンファイルをMySQLバックエンドに移行$ zone2sql --gmysql --zone-name=example.com --zone=example.com.zone | \mysql -u pdns -p pdns
1 domains were fully parsed, containing 10 records

SQL以外にも LDAP に移行するための zone2ldap もあります16

PowerDNS ウェブインタフェース

PowerDNSの内部ウェブインタフェース
統計情報を参照できます17

HTTP APIPowerDNSはREST APIを使用することができます
pdns.confの設定################################## experimental-api-key REST API Static authentication key (required for API use)#experimental-api-key=changeme################################## experimental-json-interface
If the webserver should serve JSON data#experimental-json-interface=yes

APIに接続バージョン 3.4.9
では Experimental$ curl -H 'X-API-Key: changeme' http://127.0.0.1:8081/servers/localhost/zones | jq .
[{"id": "example.com.","url": "/servers/localhost/zones/example.com.","name": "example.com","kind": "Master","dnssec": false,"account": "","masters": [],"serial": 2016062401,"notified_serial": 0,"last_check": 0},{"id": "example.co.jp.","url": "/servers/localhost/zones/example.co.jp.","name": "example.co.jp","kind": "Master","dnssec": false,"account": "","masters": [],"serial": 2016062401,"notified_serial": 0,"last_check": 0}
]
18

ロギング
DNSクエリログの出力可能################################## log-dns-queries
If PDNS should log all incoming DNS queries#log-dns-queries=yes################################## loglevel
Amount of logging. Higher is more. Do not set below 3#loglevel=5

Jun 24 03:09:48 osslab01 pdns[29828]: Remote 10.201.0.2 wants'100.designet1.co.jp|A', do = 0, bufsize = 1680: packetcache MISS
Jun 24 03:09:48 osslab01 pdns[29828]: Remote 10.201.0.2 wants'100.designet1.co.jp|A', do = 0, bufsize = 1680: packetcache HIT
Jun 24 03:09:49 osslab01 pdns[29828]: Remote 10.201.0.2 wants'100.designet1.co.jp|A', do = 0, bufsize = 1680: packetcache HIT
19

PowerDNSの注意点①-1
PowerDNSのDNS再帰問い合わせ
pdns.confを以下のように設定################################## allow-recursion
List of subnets that are allowed to recurse#allow-recursion=172.16.1.0/24################################## recursive-cache-ttl
Seconds to store packets for recursive queries in the PacketCache## recursive-cache-ttl=10################################## recursor
If recursion is desired, IP address of a recursing nameserver#recursor=192.168.200.7

172.16.1.10

DNS再帰
問い合わせ
www.designet.co.jp

PowerDNS
サーバ

キャッシュDNS
サーバ
192.168.200.7

172.16.2.10
DNS再帰
問い合わせ
www.designet.co.jp

20PowerDNSの注意点①-2
172.16.2.10

DNS再帰
問い合わせ
www.designet.co.jp

PowerDNS
サーバ

キャッシュDNS
サーバ
192.168.200.7

172.16.1.10
DNS再帰
問い合わせ
www.designet.co.jp

recursive-cacheが働く################################## allow-recursion
List of subnets that are allowed to recurse#allow-recursion=172.16.1.0/24################################## recursive-cache-ttl
Seconds to store packets for recursive queries in the PacketCache#recursive-cache-ttl=0################################## recursor
If recursion is desired, IP address of a recursing nameserver#recursor=192.168.200.7
21PowerDNSの注意点②
BINDの $GENERATE
IPアドレスとホスト名を関連付けして自動登録する仕組み
ゾーンファイル読み込み時に展開して読み込まれますPowerDNSではこの仕組みはありません (データベースバックエンドを使用する場合)$GENERATEの移行BINDのゾーンファイル移行ツール zone2sql は $GENERATE に対応している
移行時に $GENERATE を展開してくれる$TTL 1D@IN SOA

example.com. root.ns1.example.com. (2016061900
1D; refresh
1H; retry
1W; expire
3H ); minimumzone2sqlを実行すると...

:$GENERATE 100-199 host$ A 192.168.201.$
insert into domains (name,type) values ('example.com','NATIVE');
insert into records (domain_id, name, type,content,ttl,prio,disabled) select id ,'example.com', 'SOA', 'example.com.
root.ns1.example.com. 2016061900 86400 3600 604800 10800', 86400, 0, 0 from domains where name='example.com';
insert into records (domain_id, name, type,content,ttl,prio,disabled) select id ,'host100.example.com', 'A', '192.168.201.100',86400, 0, 0 from domains where name='example.com';
insert into records (domain_id, name, type,content,ttl,prio,disabled) select id ,'host101.example.com', 'A', '192.168.201.101',
86400, 0, 0 from domains where name='example.com';
insert into records (domain_id, name, type,content,ttl,prio,disabled) select id ,'host102.example.com', 'A', '192.168.201.102',
86400, 0, 0 from domains where name='example.com';22:

PowerDNSの注意点③
BINDのゾーンファイル移行
zone2sqlで BINDのゾーンファイルを移行すると、ゾーンタイプがnative に なっています
マスタゾーンとして使用する場合は native を master に変更する必要があります

23

性能比較
メジャーな権威DNSサーバの性能を比較
BIND, NSD, KnotDNS, PowerDNS

ベンチマークの方法
queryperf(bindに付属しているツール)を使用
ゾーンを10個作成し、各ゾーンに1000レコードを作成、合計1万件のレコードを設定
1万件のレコードについてクエリを10分間連続して実行
同時接続数40
PowerDNSのバックエンドはMySQLを使用

ベンチマークを実施したサーバ
DELL PowerEdge R220/081N4V
CPUIntel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz

メモリ 16GB24

性能比較: 1秒あたりのクエリ数
1 秒間あたりのクエリ数 (Queries per second)
350,000
340,000
330,000

qps

320,000
310,000
300,000
290,000
280,000
BIND

NSD

KnotDNSPowerDNS

25

性能比較: CPU使用率【BIND】【PowerDNS】

26

性能比較: CPU使用率【NSD】【KnotDNS】

27

性能比較: ロードアベレージ【BIND】【PowerDNS】【NSD】【KnotDNS】

28

PowerDNS付属ツール pdns_control
pdns_control
PowerDNSを管理するためのツールです
いろいろなサブコマンドが準備されています
ccounts
get cache statistics
current-config
Retrieve the current configuration
list-zones [master|slave|native] show list of zones
notify <domain>queue a notification
notify-host <domain> <host>notify host for specific domain
purge [<record>]purge entries from packet cacheqtypesget QType statistics
quit
quit daemonrediscoverdiscover any new zones
reloadreload all zones
remotes
get top remotes
respsizes
get histogram of response sizes
retrieve <domain>
retrieve slave domain
rping
ping instanceset <var> <value>
set config variables
show <statistic>
show a specific statistic or * to get a list
uptimeget instance uptime
versionget instance version【実行例】# pdns_control list-zones
example.com
example.co.jp
All zonecount:229

Poweradminとは？
PowerDNSの管理ウェブUI
下記の操作を実行可能
DNSゾーン追加、変更、削除
DNSレコードの追加、変更、削除
DNSゾーンとレコードの検索
ログインユーザ管理(ユーザ毎の権限付与等)

日本語対応

30Poweradmin: ゾーン一覧

31

Poweradmin: ゾーン編集

32

Poweradmin: ユーザ管理
ユーザの実行権限
権限テンプレートを使用して付与

33

システム構成案 〜 シングル構成
インターネット

DNSクエリPowerDNS
SQL

MySQL
SQL

Poweradmin
DNS管理者

HTTP
34

システム構成案 〜 冗長化構成
インターネット

DNSクエリ

DNSクエリPowerDNSPowerDNS

SQL

MySQL

MySQL

Poweradmin

Poweradmin

SQL

DNS管理者

HTTP

Active/StandbyのHAクラスタ
35

システム構成案 〜 大規模高速DNS
インターネット

DNSクエリ

KnotDNS

KnotDNS

NSD

スレーブDNS (クエリ用サーバ)

DNSゾーン転送

PowerDNS
MySQL

マスタDNS (管理用サーバ)

Poweradmin
DNS管理者

36

まとめPowerDNS
管理しやすい権威DNSサーバです
Poweradminと連携して、ウェブインタフェースからゾーン情報を管理することができます
処理性能は、BINDよりは優れています
BINDからの移行ツールが準備されています
DNSSECフル対応ですPowerDNSは管理ウェブインタフェースが利用できる便利なDNSシステムサーバ
管理しやすいDNSシステムが必要な方にお勧めします37