URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerDNSでDNSSEC対応

 前回作成したPowerDNSをDNSSECに対応させるために設定変更する。
 管理用に入れたPoweradminはまだDNSSEC関連の設定を操作できないようなので、操作はコマンドラインで行う。

 設定のため、事前にテスト用のゾーンは作成しておく。

 PowerDNSの設定ファイル"/etc/pdns/pdns.conf"にDNSSEC対応の設定を入れる。
 (ここでは10行目の"gmysql-dnssec=yes"を追加)

setuid=pdns setgid=pdns local-address=127.0.0.1 recursor=8.8.8.8 launch=gmysql gmysql-host=localhost gmysql-user=powerdns gmysql-password=password gmysql-dbname=powerdns gmysql-dnssec=yes

 設定を変更したのでサービスを再起動

# systemctl restart pdns

 PowerDNSの設定はこれだけ。
 後は対象のゾーンに設定を入れていきます。

 まずは今の状態で名前解決できることを"dig"で確認。
 (テスト用のゾーンは"workslab.net")

# dig @127.0.0.1 workslab.net

~ 省略 ~

;; QUESTION SECTION:
;workslab.net. IN A

;; AUTHORITY SECTION:
workslab.net. 3600 IN SOA ns1.workslab.net. root.workslab.net. 2014111101 1800 900 604800 3600

~ 省略 ~

 確認できたらゾーンを指定して"pdnssec"コマンドを実行。

# pdnssec secure-zone workslab.net
Securing zone with rsasha256 algorithm with default key size
Zone workslab.net secured
Adding NSEC ordering information

 正常に実行できたら、"dig"コマンドに"+dnssec"オプションを付けて動作確認。

[root@pdns01 src]# dig +dnssec @127.0.0.1 www.workslab.net

~ 省略 ~

;; QUESTION SECTION:
;www.workslab.net. IN A

;; ANSWER SECTION:
www.workslab.net. 3600 IN RRSIG A 8 3 3600 20141127000000 20141106000000 9576 workslab.net. QYpPJk7KehC595mFd7FPg/qVqQjtUc5d1CHizTp/U0yszHl3oS4OdL37 9DZQ/pCsIhZAY6wBZQP0/EytV8PCUJKQhBAoJidIbFGy4y91b2WrbJnz 1hSyzMoZSiXDp0s51YF9xKHIeHQIg4/zRJayE72UkF7W+VpSjjqWzzQc ZD8=
www.workslab.net. 3600 IN A 192.168.40.10

~ 省略 ~

 RRSIGレコードが返ってくれば成功。
 続いて、鍵署名鍵KSKを取り出してテストしてみる。

# pdnssec export-zone-dnskey workslab.net 1 | grep DNSKEY > trusted.key
# dig +dnssec +sigchase +trusted-key=trusted.key @127.0.0.1 workslab.net
trusted.key:1: no TTL specified; zone rejected
No trusted keys present

 何か怒られたので、エクスポートしたファイルを確認するとTTLが抜けてるみたい。
 とりあえず、今回は手作業で"3600"を追記した。

workslab.net 3600 IN DNSKEY 257 3 8 AwEAAaGjrQ+KGONgU+ ... (省略)

 もう一度"dig"でテスト。

# dig +dnssec +sigchase +trusted-key=trusted.key @127.0.0.1 workslab.net

~ 省略 ~

;; WE HAVE MATERIAL, WE NOW DO VALIDATION
;; VERIFYING NSEC RRset for workslab.net. with DNSKEY:9576: success
;; OK We found DNSKEY (or more) to validate the RRset
;; Ok, find a Trusted Key in the DNSKEY RRset: 33020
;; VERIFYING DNSKEY RRset for workslab.net. with DNSKEY:33020: success

;; Ok this DNSKEY is a Trusted Key, DNSSEC validation is ok: SUCCESS

 "SUCCESS"が返ってきたので大丈夫と思われる。

 上位ゾーンへ登録するDSは以下のように取得する
 (行頭が"DS"のところ)

# pdnssec show-zone workslab.net
Zone is not presigned
Zone has NSEC semantics
keys:
ID = 1 (KSK), tag = 33020, algo = 8, bits = 2048 Active: 1 ( RSASHA256 )
KSK DNSKEY = workslab.net IN DNSKEY 257 3 8 AwEA ...(省略)
DS = workslab.net IN DS 33020 8 1 674d ...(省略)
DS = workslab.net IN DS 33020 8 2 f057 ...(省略)
DS = workslab.net IN DS 33020 8 4 a966 ...(省略)

ID = 2 (ZSK), tag = 9576, algo = 8, bits = 1024 Active: 1 ( RSASHA256 )

 この後、レコードを修正した場合は以下のコマンドを実行するようにする。

# pdnssec check-zone workslab.net
# pdnssec rectify-zone workslab.net

 DNSSECを無効にする場合は以下を実行。

# pdnssec disable-dnssec workslab.net

 基本的なところとしてはこれくらいでしょうか。
 DNSSECについてはあまり理解していないところがあるので、しっかり勉強していかないといけませんね。勉強していかないといけないことばかりです。