CentOS 安装DNS服务 bind

伯克利互联网域名服务 BIND(Berkeley Internet Name Daemon) 是一款全球互联网使用最广泛的能够提供安全可靠、快捷高效的域名解析服务程序。

 

一、安装 Bind 服务程序

安装命令如下:

yum install bind bind-utils -y

其中 bind 包安装 DNS 服务,bind-utils 包安装 DNS 服务工具,包括:dig、nslookup、telnet等。

域名解析服务Bind的程序名称叫做 named,默认安装目录在 /var/named/。

服务程序的配置文件如下:

  • 主程序 /var/sbin/named
  • 主配置文件 /etc/named.conf
  • 区域配置文件 /etc/named.rfc1912.zones

 

二、修改 bind 主配置文件

编辑 /etc/named.conf 文件。

listen-on 和 listen-on-v6 127.0.0.1 修改为any,代表允许监听任何 IP 地址。

allow-query 修改为any,代表允许任何主机查询。

vi /etc/named.conf 

options {
	listen-on port 53 { any; }; #监听任何 ip4 对53端口的请求
	listen-on-v6 port 53 { any; }; #监听任何 ip6 对53端口的请求
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };  #接收任何来源查询dns记录

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

三、修改 bind 区域配置文件

bind 服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。

这个文件用于定义域名与 IP 地址解析规则保存的文件位置,以及区域服务类型等内容。

服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的 master 和 slave 指的就是主服务器和从服务器。

假如我们要配置一个域名 mydnstest.com 的域名解析,我们可以在 /etc/named.rfc1912.zones 中增加一段内容。

vi /etc/named.rfc1912.zones

zone "mydnstest.com" IN {
        type master;
      file "mydnstest.com.zone";
      allow-update {none;};
};

这段内容指定了解析文件为 mydnstest.com.zone,文件默认位于 /var/named/ 目录下。

 

四、配置解析文件

vi mydnstest.com.zone
$TTL 1D @ IN SOA     mydnstest.com. admin.mydnstest.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns ns IN A 49.7.205.113 @ IN A 49.7.205.113 # 地址记录 mydnstest.com 解析为 49.7.205.113
www IN A 49.7.205.113 # 地址记录 www.mydnstest.com 解析为 49.7.205.113

其中,每个 Zone 仅有一个 SOA 记录。SOA 记录包含 Zone 的显示名称,管理员邮箱和各种超时值。

上例中的 Zone  的显示名称为 mydnstest.com,邮箱为 admin@mydnstest.com ,其中的 @ 使用 . 来代替。

备注:

  • $ 符号:定义宏。最常见的是 $TTL、$ORIGIN。
  •  FQDN 自动补齐:在区域数据文件中,没有使用点号 "." 结尾的,在实际使用的时候都会自动补上域名,使其变为 FQDN。例如:上面文件中的 ns,会自动补全为 mydnstest.com.。
  • 若上一条记录与下一条记录主机名相同,则下一条可以省略,默认为上一条的主机名。如上文件中 www下为空,默认为下一条主机名也为www。
  • @ 默认代表域名。例如:上面文件中的 @ ,代表 mydnstest.com。

 

五、启动 bind 服务

# 设定 bind 服务
systemctl enabl named.service

# 启动 bind 服务
systemctl start named.service

# 重启 bind 服务
systemctl restart named.service

另外,bind 服务提供了一些工具,用于测试配置文件是否正确。

# 监测配置文件是否有错误

/usr/sbin/named-checkconf -z

 

六、测试

常用的测试DNS解析的命令有 nslookup、host、dig、ping。这儿以 dig 进行测试。若没有 dig 工具,可装上 bind-utils 包。

最简单的使用 ping 命令:

ping mydnstest.com

64 bytes from 49.7.205.113 (49.7.205.113): icmp_seq=1 ttl=63 time=0.435 ms

还可以使用 dig 命令:

dig mydnstest.com

;; ANSWER SECTION:
mydnstest.com. 86400 IN A 49.7.205.113