Skip to content →

使用Bind9搭建权威DNS服务器

本文介绍如何在Ubuntu环境中使用Bind9搭建权威DNS服务器。

1、安装Bind9

[email protected]:~$ sudo apt-get install bind9

2、配置Bind9

编辑/etc/bind/named.conf文件内容为:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

编辑/etc/bind/named.conf.options文件内容为

options {
        directory "/var/cache/bind";
        
        allow-query { any; };  # 允许任何主机从服务器获取信息
        recursion no;          # 权威DNS服务器一定要禁用递归查询
        
        version none;
        hostname none;
        server-id none;
        datasize default;

        auth-nxdomain no;      # conform to RFC1035
        
        // 指定要监听的端口和地址,例如listen-on port 53 { 127.0.0.1; };
        listen-on { any; };
        listen-on-v6 { any; };
};

编辑/etc/bind/named.conf.local文件内容为:

include "/etc/bind/zones.rfc1918";

zone "example.com." {                       # 要解析的域名
        type master;
        file "/etc/bind/example.com.zone";  # 区域文件,一定要用绝对路径
};                                          # 不要忘了分号

检查/etc/bind/named.conf文件的语法:

[email protected]:~$ named-checkconf

编辑/etc/bind/example.com.zone文件(区域文件)内容为:

$TTL 300
$ORIGIN example.com.

; SOA record
; name  class  type  nameserver        contact             (sn ref ret ex min)
@       IN     SOA   ns1.example.com.  admin.example.com.  (
                                        2017031088 ; serial number
                                        3600       ; refresh
                                        180        ; update retry
                                        1209600    ; expiry
                                        300        ; nxdomain ttl
                                        )

; [name] [ttl] [class] type data

; NS records
@       36000   IN      NS      ns1.example.com.
@       36000   IN      NS      ns2.example.com.

; A records or CNAME records
ns1     3600    IN      A       202.*.*.*
ns2     3600    IN      A       202.*.*.*
@       300     IN      A       202.*.*.*
www     300     IN      A       202.*.*.*
test    300     IN      CNAME   test.example.com.c.cdnhwc1.com.

检查/var/named/example.com.zone区域文件的语法:

# named-checkzone example.com /var/named/example.com.zone

3、Bind9区域文件格式

区域文件定义了一个域名的解析规则,由若干资源记录(RR,resource records)和分析器指令组成。RR的顺序为:SOA RR 应该放在最前面,NS RR 紧跟其后,其他 RR 的顺序无关紧要。分析器指令用于为 RR 的输入提供方便,例如,$ORIGIN 用于设置默认域(或初始域),$TTL 用于为 RR  定义缺省的 TTL 值。

  • SOA RR 格式
; name  class  type  namesever contact  (sn ref ret ex min)

name字段用于说明 RR 引用的对象名,一般为相对域名或全域名,全域名应该以字符”.”结束,一般用字符”@”表示主域名。class字段用于指定网络类型,可选的值有包括 IN、CH 和 HS,其中 IN (Internet)是该字段的默认值,但通常会显示地指出。type字段用于说明 RR 的类型,可选的值包括SOA、NS、A、CNAME等。namesever字段用于存放该区域的名称服务器的主机名。contact字段用于存放管理该区域的管理员的邮件地址,由于字符”@”在区域文件中有特殊含义,因此需要用字符”.”替代。

sn – serial number,序列号,可以是 32 位的任意整数。每当更新区域文件时都应该增加此序列号的值,否则 bind9 不会把该区域的更新数据传送到从服务器
ref – refresh,刷新间隔,设置从服务器多长时间向主服务器查询以更新数据。每次查询时,从服务器会向主服务器请求SOA记录,若发现记录中的序列号改变,会向主服务器请求传送域名的当前数据。
ret – retry,重试间隔,设置从服务器更新数据失败之后多长时间再次尝试更新。
ex – expire,过期时间,设置从服务器无法更新数据时已有数据多长时间失效。
min – minimum ttl,最小缓存时长,设置否定回答(NXDOMAIN)的缓存时长,肯定回答的默认缓存时长可以在区域文件开始处使用 $TTL 语句进行设置。

  • 其他 RR 格式
[name]  [ttl]  [class]  type  data

name、class、type三个字段的格式同 SOA RR 格式。ttl字段用于定义该 RR 缓存时长,通常省略该字段,而是在区域文件开始处使用 $TTL 语句设置缺省值。data字段取决于 RR 的类型,一般为具体的IP地址或域名。

其中,type字段值为 NS 的资源记录用于标识一个域的权威DNS服务器,包括主服务器和从服务器。

4、启动Bind9并测试

[email protected]:~$ sudo service bind9 start
[email protected]:~$ dig @localhost example.com

5、注册权威DNS服务器

权威DNS服务器需要在域名注册商那里注册之后才能真正作为权威 DNS 服务器来使用,不同域名注册商步骤不一,这里以freenom为例。

首先,在freenom上注册glue records,添加主从名称服务器:

然后,在freenom上自定义名称服务器,设置为glue records的值:

按理说,我们设置的权威DNS服务器应该可以正常工作了。但实际并非如此,使用dig example.com解析无法成功,使用dig example.com +trace发现失败原因是名称服务器找不到地址。这可能是因为没有成功注册glue records,尽管freenom平台上显示成功注册了。

因此需要曲线救国,使用另一个域名test.com,将ns1.test.com和ns2.test.com的A记录设置为我们配置的权威DNS服务器IP地址:

然后在freenom上自定义名称服务器,设置为ns1.test.com和ns2.test.com,解析成功。

 

Published in 未分类