如何用auto-dnssec:maintain来更新一个区域

我在Debian Jessie上运行一个权威的BIND 9.9.5-9 + deb8u8-Debian。 我有一个工作区robin.info正常工作(各种testing报告成功,如pingdom.com的DNS检查工具)

我正试图用dnssec来保护它。 我按照“ BIND DNSSEC指南”第4章给出的指示轻松启动。 我成功地生成了ZSK和KSK,并更新了我的区域,将粗体添加为粗体:

区域“robin.info”{
        型主人;
        文件“/etc/bind/zones/robin.info”;
        包括“/ etc / bind / include-zones / acls”;
         key-directory“/etc/bind/dnssec/robin.info/2016”; 
          内联签署是; 
          auto-dnssec维护;
 }; 

我确定没有.jnl.jbk.signed.signed.jnl文件出现在区域文件中,然后重新启动与rndc reload绑定,并确认该区域已加载,并有DNSKEY条目,虽然我有一些错误在日志中:

 11-Dec-2016 13:54:20.742 zone robin.info/IN/internal (signed): loaded serial 2016121111 11-Dec-2016 13:54:20.742 zone robin.info/IN/external (signed): loaded serial 2016121111 11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): receive_secure_serial: unchanged 11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): reconfiguring zone keys 11-Dec-2016 13:54:20.766 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:54:20.750 11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): receive_secure_serial: unchanged 11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): reconfiguring zone keys 11-Dec-2016 13:54:20.805 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121113 != transaction first serial 2016121111 11-Dec-2016 13:54:20.805 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error 

当我想更新我的区域时,这些串行错误似乎会导致问题。 我在未签名的区域/etc/bind/zones/robin.info进行更改,并将我的序列号增加到2016121121

 11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): serial 2016121121 (unsigned 2016121121) 11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): could not get zone keys for secure dynamic update 11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): receive_secure_serial: not found 11-Dec-2016 13:57:58.659 malformed transaction: /etc/bind/zones/robin.info.jnl last serial 2016121121 != transaction first serial 2016121111 11-Dec-2016 13:57:58.659 zone robin.info/IN/external (unsigned): not loaded due to errors. 11-Dec-2016 13:57:58.659 all zones loaded 11-Dec-2016 13:57:58.659 running 11-Dec-2016 13:57:58.661 zone robin.info/IN/internal (signed): reconfiguring zone keys 11-Dec-2016 13:57:58.670 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121115 != transaction first serial 2016121111 11-Dec-2016 13:57:58.670 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error 11-Dec-2016 13:57:58.670 zone robin.info/IN/external (signed): reconfiguring zone keys 11-Dec-2016 13:57:58.671 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:57:58.670 

我可以确认dig我的旧区域仍然加载(从SOA和更改不可见)。

这里有几个错误信息:

1)build议我对密钥有问题(“无法获得安全dynamic更新的区域密钥”)。 然而bind在第一次加载时没有问题,我的密钥文件可以通过bind(可以作为group bind成员的用户bind运行)来读取:

 xavier@dent:/etc/bind/zones$ ls -l /etc/bind/dnssec/robin.info/2016 total 17k -rw-r--r-- 1 root bind 603 Dec 10 17:23 Krobin.info.+008+43324.key -rw-r----- 1 root bind 1.8k Dec 10 17:23 Krobin.info.+008+43324.private -rw-r--r-- 1 root bind 604 Dec 10 17:22 Krobin.info.+008+44679.key -rw-r----- 1 root bind 1.8k Dec 10 17:22 Krobin.info.+008+44679.private 

2)build议连续出现错误(初始错误是last serial 2016121113 != transaction first serial 2016121111 )。 不过我以为我不必担心连载太多,因为在ISC的KB中我可以读到:

请注意,此响应中的序列号与文件example.com.db中的序列号不同。 Named跟踪独立于未签名版本的已签名版本的序列号。 如果无符号区域更新的序列号高于签名副本中的序列号,则签名副本将增加以匹配它,否则两者保持分开。 [1]

到目前为止,我发现更新区域的唯一方法是停止绑定,删除.jnl.jbk.signed.signed.jnl文件并重新开始绑定。 这似乎是错误的,我需要确保我增加足够的序列来激活新的区域。 我在做什么错了,我该如何解决我的dnssec?

核心似乎是could not get zone keys for secure dynamic update错误消息的could not get zone keys for secure dynamic update ,所以回落到无符号; 而且由于它没有通过自动碰撞SOA进行签名的签名path,所以它抱怨S​​OA是过期的。

当给三个区域添加签名时,我得到了相同的错误信息,并且抓住了我的头,然后叹了口气,刚刚重新启动完全命名。 这为我解决了。 绑定9.11.0P3。

我不记得以前在添加签名时看到这个问题,但是其他所有的区域都是在早期版本的Bind下进行过渡的。 另外,这三个区域是反向DNS文件,在文件名中稍有不同。 这就是我必须解释的一切。

所以:绑定错误,重新启动完全命名,让它find真正的密钥文件,然后签名。

我想我终于find了我的问题的根源。 我有两个视图,被configuration为包含相同的主区域文件两次。

两个区域不能使用相同的文件。 所以这是无效的,导致我的问题:

 view "internal" { match-clients ...; zone "example.com" { type master; file "/etc/bind/zones/example.net"; }; }; view "external" { match-clients ...; zone "example.com" { type master; file "/etc/bind/zones/example.net"; }; }; 

分享区域的正确方法在“了解BIND 9中的视图”的第4章中进行了介绍。 基本上,只有一个区域必须是主区域,另一个必须是奴隶。 在添加了几个acls,键和通知localhost在正确的地方,我摆脱了这些错误。

最后,这是我的最终configuration:

 key "internal" { // TSIG Key generated with dnssec-keygen -a HMAC-MD5 -b 512 -n USER internal algorithm hmac-md5; secret "XXXX"; }; view "internal" { match-clients { key internal; ...IPs...; }; // our network zone "robin.info" { type slave; file "/etc/bind/slave-zones/robin.info"; // Not the same file as external view! masters { 127.0.0.1; }; }; }; view "external" { match-clients { !key internal; "any"; }; // everyone else server 127.0.0.1 { /* Deliver notify messages to internal view with internal key. */ keys { internal; }; }; zone "robin.info" { type master; file "/etc/bind/zones/robin.info"; // ACL file with allow-transfer and also-notify // including secondary DNS servers and 127.0.0.1 include "/etc/bind/acls"; key-directory "/etc/bind/dnssec/robin.info/2017"; inline-signing yes; auto-dnssec maintain; }; };