DNS服务Bind搭建和使用
转载: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