给域名开启DNSSEC权威解析

DNSSEC看上去挺复杂,实际配置起来还是很简单的。其实DNSSEC也还是很简单的。

配置过程可以参考DNSSEC in 6 Minutes http://static.usenix.org/event/lisa08/dnssec_bof.pdf

这里抄写一遍。

例如,你有一个域名example.com,在bind9里配置了master文件db.example.com.notsigned,

基本过程就是,安装bind9utils,运行dnssec-keygen -a RSASHA1 -b 1024 -n ZONE zonename生成ZSK,运行dnssec-keygen -a RSASHA1 -b 4096 -n -f KSK ZONE zonename。这两个命令会输出两对pubkey, privatekey。注意这两个命令可能运行非常缓慢,这是因为系统在等待/dev/random获得足够多的熵。想快就加参数-r /dev/urandom用伪随机或者安装haveged。

这两对密钥公钥基本上可以理解为,ZSK是权威DNS用来签名解析结果的,KSK是用来签名ZSK的。

接着cat db.example.com.notsigned Kzonename*.key >> db.example.com然后dnssec-signzone -o example.com -N INCREMENT -k <KSK key> db.example.com <ZSK key>就会生成db.example.com.signed。注意这个signed文件会在30天后过期,因此sign的过程要放进cron里面定期执行。

修改named.conf中关于example.com的配置中的file选项,将它设置为db.example.com.signed并且运行rndc reconfig; rndc flush即完成了BIND9的相关配置。

接下来,用dnssec-dsfromkey -f db.example.com.signed example.com可以生成相应的DS记录。用-1选项指定哈希使用sha1,-2指定sha256。默认似乎都生成。将生成的DS记录通过域名注册商添加到上一级域名的NS中。如果你的域名是example.com则最终DS记录会被添加到[a-m].gtld-servers.net.上。如果你的域名是subdomain.example.com则DS记录应该被添加到ns*.example.com中(可能需要联系example.com域名的管理员)。

等DS记录生效后,就可以去http://dnssec-debugger.verisignlabs.com/验证自己的域名的DNSSEC是否工作了。可以自行安装unbound-host运行unbound-host -y <trust anchor of com> -v host.example.com 验证,也可以自行dig +dnssec host.example.com @ns1.example.com。其中trust anchor of com可以通过host -t DS com d.root-servers.net.得到。根域.的trust anchor不在dns域名解析系统中解析,而是需要通过外部方式获取,见http://data.iana.org/root-anchors/

关于后续维护:KSK和ZSK要定期更新。

Advertisements

3 responses to this post.

  1. 囧。这个“简单”也只是相对bind9而言的。自己轮的dns服搞起来还是麻烦。

    回复

    • Posted by yangzhe1990 on 08/31/2012 at 11:14 上午

      自己轮的dns服改改代码支持几个rr type,给权威域多加点回复,再支持一下大包就OK了吧。大部分dns服务器的zonefile格式应该都跟bind一样。。如果是自己写DNS的就囧了

      回复

  2. I found myself nodding my noggin all the way thuhogr.

    回复

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s

%d 博主赞过: