注:本文原作者 Jimmy Xu,对本文所叙述的内容,如有疑问,请直接与原作者联系。

DNSSEC 这东西出来的时间也不短了,根服务器上早都有了相关支持,.org 域和一些 ccTLD 也都已经完全部署。不过很遗憾的是,现在域名注册商提供的 DNS 系统少有支持这一安全扩展的,所以,还是得自己动手。

本文主要描述操作步骤,对知识性的东西几乎没有涉及,请自行 Google 或阅读相关文档。

〇、先决条件

您得有一台可通过 SSH 或等同渠道访问服务器,而且您得是或者认识服务器的 root。而且您得有一个域名。以下内容均在 Ubuntu 10.04.1 LTS 上测试,其他系统一般来讲只是包管理和配置文件路径会有差异。

一、配置名字服务器

首先,从软件源中安装 BIND:

# apt-get install bind9

完成后将工作目录切换至 /etc/bind/。这些默认的文件很多我们并不需要。首先编辑 named.conf 文件,使其只有如下内容:

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";

然后在 named.conf.options 文件的最后一个大括号前,加入:

    recursion no;

以关掉递归查询。然后,删掉我们不需要的文件:

# rm db.* named.conf.default-zones zones.rfc1918

这样基本的东西就完成了。

注:以下内容都用 tommyang.org 这个域名来举例子。

一个域名光有一个名字服务器是不够的,我们还需要一些备份。如果您是 Linode 用户,那么 Linode 的几个名字服务器就可以当作 slave。或者 he.net 的免费服务(可能有问题,不推荐)。在这些站点先注册 tommyang.org 这个域,选择类型为 slave,相应的 Master 填自己服务器的 IP 地址,并记住服务商要求你允许进行 AXFR 的那些地址。

Linode DNS 配置样例

然后转回服务器。首先编辑 named.conf.local 文件,在其末尾加入:

zone "tommyang.org" {
	type master;
	file "/etc/bind/db.tommyang.org";
	allow-transfer {69.93.127.10; 65.19.178.10;
		75.127.96.10; 207.192.70.10;
		109.74.194.10; };
	// 这些就是刚才的 AXFR 地址,如果您在用 he.net 的服务,
	// 这一行请换成 allow-transfer {216.218.130.2; };
};

现在创建 db.tommyang.org 文件,填入以下内容(请根据自己的配置进行修改):

;
; BIND data file for tommyang.org
;
$TTL	300
@		IN	SOA	ns.tommyang.org. hostmaster.tommyang.org. (
	; 请替换为自己的电邮地址,将 @ 替换为 .
					2010081101
	; 序列号,每次编辑此文件都应将此数字加 1
					14400
					14400
					1209600
					300
				)
;
@	3600	IN	NS	ns.tommyang.org.
ns		IN	A	173.230.146.246
	; 请替换为您服务器的 IP 地址
@	3600	IN	NS	ns1.linode.com.
@	3600	IN	NS	ns2.linode.com.
@	3600	IN	NS	ns3.linode.com.
@	3600	IN	NS	ns4.linode.com.
@	3600	IN	NS	ns5.linode.com.
	; 请替换为刚才提到的从服务器
;
@		IN	A	173.230.146.246
@		IN	AAAA	2001:470:1f04:d93::2
	; 如服务器无 IPv6 支持,请删掉此行
;
www		IN	CNAME	tommyang.org.
mail		IN	CNAME	ghs46.google.com.
	; 这里及以下假设您在使用 Google Apps 的邮件服务
;
@	3600	IN	MX	10	aspmx.l.google.com.
@	3600	IN	MX	20	alt1.aspmx.l.google.com.
@	3600	IN	MX	20	alt2.aspmx.l.google.com.
@	3600	IN	MX	30	aspmx2.googlemail.com.
@	3600	IN	MX	30	aspmx3.googlemail.com.
@	3600	IN	MX	30	aspmx4.googlemail.com.
@	3600	IN	MX	30	aspmx5.googlemail.com.
;
@	3600	IN	TXT	"v=spf1 a include:aspmx.googlemail.com -all"

编辑完成后请运行:

# named-checkzone tommyang.org db.tommyang.org

以检测是否出现语法错误。然后重启 BIND:

# /etc/init.d/named restart

如果没有问题的话,现在服务器应该可以正常地提供查询服务了。可运行:

# dig @localhost tommyang.org

查看能否解析出正确的地址,如有问题请检查刚才的配置是否有误。

这时服务器的配置已经完成。请到域名注册商处(以 Godaddy 为例),打开域名设置,在“Host Summary”处点“add”,输入“Host name”ns 及服务器的 IP 地址,并确认。稍等一会儿,再在上方的“Nameservers”处将域名的名字服务器替换为 ns.tommyang.org、ns1.linode.com 等(请与上文中配置的 NS 记录保持一致)。确定后等待生效即可。可通过执行:

$ whois tommyang.org

查看返回记录中的 Name servers: 项目来确认。

Godaddy 配置

二、启用 DNSSEC

在本文写作时,.org 顶级域已经完全支持 DNSSEC。其他的 TLD 待支持后配置方法应该也没什么差异。

首先,运行:

# dnssec-keygen -r/dev/random -aRSASHA1 -b1024 -nZONE tommyang.org

以生成 ZSK(如果该命令运行缓慢,可将 /dev/random 换为 /dev/urandom,但会损失部分安全性)。记住得到的文件名(形如 Ktommyang.org.+005+23640.key),然后,运行:

# dnssec-keygen -r/dev/random -fKSK -aRSASHA1 -b2048 -nZONE tommyang.org

以生成 KSK(如果该命令运行缓慢,方法同上)。记住得到的文件名(形如 Ktommyang.org.+005+55006.key)。

现在编辑 db.tommyang.org,在最末尾加入以下两行:

    $INCLUDE	"Ktommyang.org.+005+23640.key"
    $INCLUDE	"Ktommyang.org.+005+55006.key"
    	; 请修改为上文提到的正确的文件名

并将序列号加 1。然后运行(您可将这条命令附在文件最顶的注释中):

# dnssec-signzone -r/dev/random -e+31104000 \
    -otommyang.org -kKtommyang.org.+005+55006 \
    db.tommyang.org Ktommyang.org.+005+23640.key

对整个域进行签名(请将文件名替换为正确的,如运行缓慢,方法同上),这条命令会生成一个 db.tommyang.org.signed 文件。现在编辑 named.conf.local 文件,将 file 一行替换为:

    	file "/etc/bind/db.tommyang.org.signed";

运行:

# named-checkzone tommyang.org db.tommyang.org.signed

以检测是否出现语法错误及签名是否成功。然后重载 BIND:

# /etc/init.d/named reload

现在服务器已经配置好了。可运行:

# dig +dnssec @localhost tommyang.org

查看能否解析。

现在工作目录中会有一个 dsset-tommyang.org. 文件,我们要将这个文件中的内容提供给注册商。仍以 Godaddy 为例,打开域名设置,选“Manage DNSSEC”、“Add new DS record”、“Switch to advanced mode”,将 dsset-tommyang.org. 的内容粘贴入,并调整为如下格式:

tommyang.org 31104000 DS; 55006 5 1 2257B8982183546E34D17212BC221A72ADAD8201;
tommyang.org 31104000 DS; 55006 5 2 95FBD01F008E7485CD7FCF2BB514D47EFB4DF1F70DF6D09F0C744CED5B60A39E;

检查无误后确认,并请等待其生效。可执行:

$ whois tommyang.org

查看返回记录中是否有 DNSSEC:Signed 一行,或可访问 http://dnsviz.net/ 进行验证。

Godaddy DNSSEC 配置


到此,配置工作就完成了。

三、注意事项

  • DNS zone file 的格式和在线管理的格式差不多,可以照猫画虎,也可以 Google 下相关的帮助;
  • 每次更改文件请务必将序列号加 1,否则从服务器直到超时才能看到新的数据。也请务必运行 dnssec-signzone 命令重新签名,并执行 reload 命令;
  • 每 360 天请重新进行第二节所述的操作,或者您也可将所有的 31104000 改为更大的数字;
  • 备份,备份,备份……

四、其他

如您发现文中有错误的地方,请告诉。注:我对于您因为按照本文操作所造成的一般性、特殊性、意外性或间接性损失,不负任何责任(包括但不限于,资料损失,资料执行不精确,或应由您或第三人承担的损失等)。

本作品采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。