2012年9月2日日曜日

BIND9 で DLV が期待した動きをしない

大人の事情で最近 DNSSEC にはまってます。 unbound も BIND も、新し目のバージョンは標準対応しているし、標準で有効になっているのですが、どうも BIND で DLV を使おうとすると、うまく動きませんでした。

環境は以下のとおりです。

  • Ubuntu 12.04 LTS, kernel 3.2.0-29 amd64
  • Unbound 1.4.18
  • BIND 9.9.1-P2
  • OpenSSL 1.0.1

DNSSEC には、自分の上位ゾーンが署名に対応していない場合に備えて、 DLV(DNS Look-aside Verification )という仕組みがあります。おおまかに言うと、本来はルートゾーンから順繰りにたどっていってドメインの認証をするのですが、その代わりに ドメイン名.dlv.isc.org を問い合わせて、 DS レコードの代わりに DLV レコードを引っ張ってきてドメインの認証をします。これが BIND9 でうまく動きません。

テストには DNS-OARC から提供されているテストレコード を使用しました。

まず unbound 1.4.18 での想定通りの動きです。

~/bind/9.9.1 $ bin/dig -p 1418 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 1418 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58334
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; ANSWER SECTION:
a.nsec.dlvtest.dns-oarc.net. 917 IN     TXT     "A is for AXFR"
a.nsec.dlvtest.dns-oarc.net. 917 IN     RRSIG   TXT 5 5 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. c4CXn8ejvaiexLq5FuQv6bFrfRlUGF//2jew7rGqICUZAj0lEdLkxu6Y H47SrIjYIb0xwzO2QMnVcLKAvVfuozQ8bq/mgn0x7RHQ32Bh0ZS55scw Wxji8iCHxcr5rzxtkMcAZzjx28A/ir+jKizfF8RCEv3MtPqd7+Y71YCk 0Jw=

;; Query time: 0 msec
;; SERVER: 127.0.0.1#1418(127.0.0.1)
;; WHEN: Sun Sep  2 00:39:06 2012
;; MSG SIZE  rcvd: 267

きちんと引けてますね。 flags に "ad" が入っていれば DNSSEC により認証ができたという意味です。

さて次は BIND9 です。

~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21002
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; Query time: 1690 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:38:28 2012
;; MSG SIZE  rcvd: 56

待たされた挙句 SERVFAIL になってしまいました。ところが、 BIND を再起動した上で次の手順を踏むと、引けるようになります。

  1. 一つ上のゾーンについて ANY で DNSKEY を取ってくる
  2. 目的のゾーンについてクエリを投げる
~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec nsec.dlvtest.dns-oarc.net any

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec nsec.dlvtest.dns-oarc.net any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45581
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;nsec.dlvtest.dns-oarc.net.     IN      ANY

;; ANSWER SECTION:
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   DNSKEY 5 4 3600 20310611060557 20110616060557 23716 nsec.dlvtest.dns-oarc.net. EIBG75iE6v53oOOI1PfWvrvMi0qHYigxrtJMTdMdFUHzZrh71+hZSM88 ILw6UUvotyb9YUH1opjB4iA9Ks8ZBqaSn+AwzbP6pNfMRFiNVlYoLBLq y6cERjpb/6jUr/dxGq/57VThi8BYjiHF1aYv3vgSLhCvfvI2tvnfgxlN YeL286GDojf9bSaQrrHOcWdqivTibiBarxNrAfxHGE3MIpX1eZUGsXL4 aHrMv7n7juy86mfm+lZg7y4JfT32IADygbdTWQQYF8P7TYzPZof38D6s cYnvYCx+m770Uj9Z3z7eTHkk5AgvTDcorNVp/xPFPqGaJ9iwReMoeE9N wngNtA==
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   DNSKEY 5 4 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. UiNDgsQdHdb2Tni4d6ebGajNwmxTFk+6gvil9M4/stimqOnL2RQqX6Kb IASX+8z4AzYVQFsb7OCyGugmsBc5ukjTR4at2j3sp6Xjk4r7J5DMAADY ZHTgBua2AOySy/DdVTfTdRK4YbQcHLggw3Nr8r64daD14SFUAL2nGOSk cNM=
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  257 3 5 AwEAAejxNtUB1RBO7DZP1NtC2V46LWt5r2XM5ykywFYmeG6LCmn6oafG 27djNKFyCHWAmNmZXaQXg60YAGT8XQdMrmvidPCQqrB7w2ZO0w/rEqVp 74KT46yuTKGBOUFJ4nWLw77mvxG4v8HEhvZUyYspLvBSt/qi72S66SP2 njyymaQbZAT0ZP4NsjO6L8UugDwGJuRdd1qXyOLf9blogviFjdFe7Y8a TV071VCSj7/iTg0sqPlZvy5kZB1Sz+yE/xrvqDA7WIMDpr5nahWPbAzm NigLZFy1+PKF4U4ZTp3t9+kPqWpSBE0NpfaGY79b96JRMRHtGM/+TqWj 79jRZyUE1oU=
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  256 3 5 AwEAAfGatB0iI+BHO7JStuOFATy2iRyVDnmdCsdDTgtINKtcIqKWbw7w xjQ3dXhUSrjVVfEHJIScxiyjBJ0u1mG4FhY0zGusenn5R6RuhTAjZ/Ow wvp+1X1orWdwUVncYS3a+sGfyr4XBbFQSSB0HLSZxzskPbNQ1NR8fX2L iy8V89Zv
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  256 3 5 AwEAAamEbJrkD6whOxQH7y+JhH5AH5kwjXfG43p9SJ/j0d+58tcK2cuQ 4rpXGD0KybG8rte7F0ja0Dlv9PFhL2UqKrdtk43ZLwZjAnotcTODqDog D8EHEOTwt2LMy9FGTf40IgoUQfG3PxcJsAkNOswqw41vu5Te4mzzDhrh AQWRldL5

;; Query time: 1578 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:37:11 2012
;; MSG SIZE  rcvd: 1124

~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25080
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; ANSWER SECTION:
a.nsec.dlvtest.dns-oarc.net. 3600 IN    TXT     "A is for AXFR"
a.nsec.dlvtest.dns-oarc.net. 3600 IN    RRSIG   TXT 5 5 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. c4CXn8ejvaiexLq5FuQv6bFrfRlUGF//2jew7rGqICUZAj0lEdLkxu6Y H47SrIjYIb0xwzO2QMnVcLKAvVfuozQ8bq/mgn0x7RHQ32Bh0ZS55scw Wxji8iCHxcr5rzxtkMcAZzjx28A/ir+jKizfF8RCEv3MtPqd7+Y71YCk 0Jw=

;; AUTHORITY SECTION:
nsec.dlvtest.dns-oarc.net. 3600 IN      NS      ns.dns-oarc.net.
nsec.dlvtest.dns-oarc.net. 3600 IN      NS      sns-pb.isc.org.
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   NS 5 4 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. E0FInFhHCmZ/C6jh8+QZ0HP5V4GYXBLvEbSiCYTVJgsvRXIbBdzAG4MN jUgMFnrSjyCKOGSelrD4whnbOExD6MdtY0Vwq6xMt1XIpjRc6JoG8ja6 DL5qwlqb5NtRQCV2Z2FDT6QuXtyr6ODh7amj+YSWCOW5cS25DYmBcsnC 2UU=

;; ADDITIONAL SECTION:
ns.dns-oarc.net.        172791  IN      A       149.20.58.65

;; Query time: 118 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:37:18 2012
;; MSG SIZE  rcvd: 513

"ad" も立っていて、正常に認証できていると示されています。ログはこんな感じです。

client 127.0.0.1#39784 (a.nsec.dlvtest.dns-oarc.net): query: a.nsec.dlvtest.dns-oarc.net IN TXT +ED (127.0.0.1)
validating @0x7f8a5802a9c0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a5802a9c0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
error (no valid RRSIG) resolving 'a.nsec.dlvtest.dns-oarc.net/DS/IN': 192.5.4.1#53
  validating @0x7f8a60056310: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60056310: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
error (no valid RRSIG) resolving 'a.nsec.dlvtest.dns-oarc.net/DS/IN': 149.20.58.65#53
error (no valid DS) resolving 'a.nsec.dlvtest.dns-oarc.net/TXT/IN': 149.20.58.65#53
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: bad cache hit (a.nsec.dlvtest.dns-oarc.net/DS)
error (broken trust chain) resolving 'a.nsec.dlvtest.dns-oarc.net/TXT/IN': 192.5.4.1#53

もう一つのレコード、 a.nsec3.dlvtest.dns-oarc.net は両方とも正常に引くことができます。

BIND の設定ファイルには

    dnssec-enable yes;
    dnssec-validation auto;
    dnssec-lookaside auto;

と書いてあります。

正直お手上げです... BIND の挙動がおかしいように思えるんですが、どうなんでしょう。検索してもよくわかりませんでした。

0 件のコメント:

コメントを投稿