DNS服务Bind搭建和使用

xiaohai 2020-04-13 19:32:11 2168人围观 标签: DNS 
简介现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。

转载:https://www.cnblogs.com/h–d/p/7169169.html

一、DNS基础知识

1、DNS描述

DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

2、相关概念
  • 域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。

  • FQDN全称为Fully Qualified Domain Name,即完全合格域名。FQDN由两个部分组成:主机名和域名。因为DNS是逐级管理的,所以在不同的层级中主机名与域名也是不同的;以www.google.com为例,在第二层中,.com就是域名,google就是主机名,而到了第三层中,.google.com就成了域名,www就成了主机名。

    注意:主机名与域名并不是依据".“来划分的,主机名中也可以包含”."号的,主要还是要根据域名的注册情况来划分。

  • 正向解析:从FQDN转换为IP地址称为正向解析。

  • 反向解析:从IP地址转换为FQDN称为反向解析。

  • 区域:正向解析或反向解析中,每个域的记录就是一个区域。

3、DNS的解析库

DNS的主要作用是进行主机名的解析。解析:根据用户提供一种名称,去查询解析库,以得到另一种名称。 正向解析与反向解析使用不同的解析库。
资源记录:rr(resource record),有类型的概念;用于此记录解析的属性。

  • A:Address地址 IPv4
  • AAAA:Address地址 IPv6
  • NS:Name Server域名服务器
  • SOA:Start of Authority授权状态
  • MX:Mail Exchanger邮件交换
  • CNAME:Canonical Name规范名
  • PTR:Pointer指针
4、DNS的查询过程

DNS采用两种查询机制:递归(Recursive Query)和迭代(Iterative Query),在实际当中,两种方式都会用。

5、DNS的查询顺序
  • 本地hosts文件
  • 本地DNS缓存
  • 本地DNS服务器
  • 发起迭代查询
6、DNS使用的端口号

DNS协议使用udp/tcp的53端口提供服务,客户端向DNS服务发起请求时,使用udp的53端口;DNS服务器间进行区域传送的时候使用TCP的53端口。

7、DNS服务器类型
  • 主DNS服务器:为客户端提供域名解析的主要区域,主DNS服务器宕机,会启用从DNS服务器提供服务。
  • 从DNS服务器:主服务器DNS长期无应答,从服务器也会停止提供服务。主从区域之间的同步采用周期性检查+通知的机制,从服务器周期性的检查主服务器上的记录情况,一旦发现修改就会同步,另外主服务器上如果有数据被修改了,会立即通知从服务器更新记录。
  • 缓存服务器:服务器本身不提供解析区域,只提供非权威应答。
  • 转发服务器:当DNS服务器的解析区域(包括缓存)中无法为当前的请求提供权威应答时,将请求转发至其它的DNS服务器,此时本地DNS服务器就是转发服务器。

二、DNS软件BIND的安装和使用

1、Bind简介

现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。

BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows)

BIND服务的名称称之为named

DNS默认使用UDP、TCP协议,使用端口为53(domain),953(mdc,远程控制使用)

2、Bind安装
yum install bind bind-chroot bind-utils -y

bind-chroot是bind的一个功能,使bind可以在一个chroot的模式下运行.也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已.这样做的目的是为了提高安全性.因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中.

3、Bind配置
  • BIND配置文件保存在两个位置:
    /etc/named.conf  - BIND服务主配置文件
    /var/named/    - zone文件(域的dns信息)

如果安装了bind-chroot(其中chroot是 change root 的缩写),BIND会被封装到一个伪根目录内,配置文件的位置变为:
/var/named/chroot/etc/named.conf   - BIND服务主配置文件
/var/named/chroot/var/named/    - zone文件
chroot是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容,而不是真实的根目录

  • BIND安装好之后不会有预制的配置文件,但是在BIND的文档文件夹内(/usr/share/doc/bind-9.11.4),BIND为我们提供了配置文件模板,我们可以直接拷贝过来:
    cp -r /usr/share/doc/bind-9.11.4/sample/etc/* /var/named/chroot/etc/
    cp -r /usr/share/doc/bind-9.11.4/sample/var/* /var/named/chroot/var/

  • 配置BIND服务的主配置文件(/var/named/chroot/etc/named.conf),命令:vim /var/named/chroot/etc/named.conf;内容很多使用简单配置,删除文件中logging以下的全部内容

options
{
	directory 		"/var/named";		// "Working" directory
	dump-file 		"data/cache_dump.db";
        statistics-file 	"data/named_stats.txt";
        memstatistics-file 	"data/named_mem_stats.txt";
	recursing-file		"data/named.recursing";
	secroots-file		"data/named.secroots";
	listen-on port 53	{ 127.0.0.1; };
	listen-on-v6 port 53	{ ::1; };
	allow-query		{ localhost; };
	allow-query-cache	{ localhost; };
	recursion yes;
	dnssec-enable yes;
	dnssec-validation yes;
	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};
  • 在主配置文件(/var/named/chroot/etc/named.conf )中末尾加入,zone参数:
zone "test.com"{
	type master;
	file "test.com.zone";
};
  • 新建test.com.zone文件,test.com的域名解析文件,zone文件放在/var/named/chroot/var/named/下,zone文件可以已/var/named/chroot/var/named/named.localhost为模板。

命令:cp /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/test.com.zone,然后再最后一行添加www

[root@localhost ~]# cat /var/named/chroot/var/named/test.com.zone
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1
www	IN A	192.168.1.178
  • 禁用bind默认方式启动,改用bind-chroot方式启动。命令如下:
[root@localhost ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
[root@localhost ~]# systemctl stop named
[root@localhost ~]# systemctl disable named
[root@localhost ~]# systemctl start named-chroot
[root@localhost ~]# systemctl enable named-chroot
  • 使用dig测试:
[root@localhost ~]# dig www.test.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52856
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.			IN	A

;; ANSWER SECTION:
www.test.com.		86400	IN	A	192.168.1.178

;; AUTHORITY SECTION:
test.com.		86400	IN	NS	test.com.

;; ADDITIONAL SECTION:
test.com.		86400	IN	A	127.0.0.1
test.com.		86400	IN	AAAA	::1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 一 4月 13 19:25:15 CST 2020
;; MSG SIZE  rcvd: 115

注:非本机测试需要修改主配置文件named.conf,允许任何ip访问,然后重启服务器,重启命令

systemctl restart named-chroot