- DNS简介
- DNS解析关键概念
- BIND
一、DNS简介:
(一)DNS服务
- DNS:Domain Name Service,域名解析服务,服务于应用层的协议
- 端口:TCP的53端口和UDP的53端口
- 主流软件实现:BIND(Berkeley Internet Name Domain)
- 域名解析方式:
- 本地解析:hosts文件,每一行格式
IP地址 域名
- 网络分层解析:DNS服务
- 域名解析时先查询本机hosts文件,匹配则直接使用文件中的域名;若无匹配项,再使用DNS服务
- 本地解析:hosts文件,每一行格式
(二)DNS域名
- 分层设计,自上而下分为:根域、一级域名、二级域名、三级域名......,最多127级
- 一级域名:
- 组织域名:com, edu, mil, gov, net, org
- 国家地区域名:cn, uk, hk
- 反向域名:arpa
(三)DNS解析
-
按查询类型分为:递归解析和迭代解析
- 递归解析:客户端向所在网络DNS服务器发起请求,DNS服务器发回解析结果的过程
- 迭代解析:当某个DNS服务器无法解析客户端的请求时,从根域名服务器开始,向每层DNS服务器发出请求,并接收每层DNS服务器的查询结果,直至找到权威DNS服务器(存储主机准确IP地址的服务器)的过程
-
一次完整的查询请求经过的流程:
Client -->hosts文件-->DNS Service Local Cache(本地DNS缓存,Windows有,Linux没有)--> DNS Server (recursion, 递归) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS… -
按解析方向解析:
- FQDN(Fully Qualified Domain Name):完全合格域名,主机+全域名路径,逻辑上能够准确表达主机的位置
- 正向解析:FQDN解析为IP
- 反向解析:IP解析为FQDN
- 正向解析和反向解析是两个不同的名称空间,两个不同的解析树
(四)DNS服务器类型
-
主服务器:管理和维护所在域的解析服务
-
从服务器:主服务器解析库的镜像,复制和更新的过程称为区域传输,涉及的概念有:
- 序列号(serial):解析库版本号,主服务器解析库变化时,其序列递增,从服务器从序列号判断主服务器的解析库是否发生变化,最长10位数字
- 刷新时间间隔(refresh):从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔(retry):从服务器请求同步失败时,再次尝试时间间隔
- 过期时长(expire):从服务器联系不到主服务器时,多久后停止服务
-
缓存服务器:转发器
-
主从服务器解析库更新机制:Push和Pull
- Push:推送,主服务器解析库发生变化时,主动通知从服务器更新
- Pull:拉取,从服务器按照设置每隔一定时间主动同步主服务器的解析库
二、DNS解析关键概念:
(一)资源记录(RR, Resource Record)
-
每个DNS服务器的解析库由各类RR组成
-
资源记录的类型:
- SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
- A:Internet Address,FQDN --> IP
- AAAA:FQDN --> IPv6
- PTR:PoinTeR,IP --> FQDN
- NS:Name Server,专用于标明当前区域的DNS服务器
- CNAME:别名记录
- MX:Mail eXchanger,邮件交换器
-
资源记录定义的格式:
- 语法:name [TTL] IN rr_type value
- 注意:
(1) TTL(缓存的生命期)可从全局继承,如:$TTL 1d
(2) @可用于引用当前域的名字
(3) 同一个名字可以通过多条记录定义多个不同的IP,此时DNS服务器会以轮询方式响应,这种方式实现了简单的平衡负载
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机
(5) 相邻资源记录的name相同时,后续的name可以省略
(二)SOA记录
-
name:当前域名,可用"@"代替
-
value:包含多部分内容
(1) 当前区域的主DNS服务器的FQDN(无命名要求,只要和相应的A记录匹配即可)
(2) 当前区域管理员的邮箱地址;但地址中不能使用"@"符号,一般用"."替换,例如linuxedu.hellopeiyang.com.
(3) 主从服务器区域传输相关定义,否定结果缓存统一的TTL
(三)NS记录
- name:当前域名,可用"@"代替,常省略
- value:当前域DNS服务器的主机名
- 一个域可以有多条NS记录,每条记录都应该匹配一条A记录
(四)MX记录
- name:当前域名,可用"@"代替,常省略
- value:当前域的邮件服务器的主机名,格式:
## mail_server_addr
##表示数字(1-99),数字越小优先级越高 - 一个域可以有多条MX记录,每条记录都应该匹配一条A记录
(五)A记录和AAAA记录
- name:主机的FQDN
- value:主机的IP地址
- 特殊写法:
$GENERATE 1-254 HOST$ A 1.2.3.$
:按照序号排列规律的FQDN与IP的对应关系
*.magedu.com. IN A 5.5.5.5
:泛域名解析,当用户输错地址时,统一解析至某个地址
magedu.com. IN A 6.6.6.6
:当用户没有输入www主机名时解析至地址 - AAAA记录与A记录相似,只是IP地址为IPv6地址
(六)CNAME记录
- name:别名QFDN
- value:真实名QFDN
(七)PTR记录
- name:特定格式IP+特定后缀
IP地址反过来写:如1.2.3.4
写作4.3.2.1
特定后缀:in-addr.arpa.
完整写法:4.3.2.1.in-addr.arpa.
- value:FQDN
三、BIND:
(一)BIND的安装
- 安装:
yum install BIND
- 列出BIND有关程序包名:
yum list all BIND*
bind:服务器
bind-libs:相关库
bind-utils:客户端
bind-chroot:迁移BIND目录至深层目录,减少BIND被黑客攻破对系统的影响 - 程序名:named
- 服务脚本:
/etc/rc.d/init.d/named
CentOS 6
/usr/lib/systemd/system/named.service
CentOS 7 - 主要配置文件:
/etc/named.conf
,/etc/named.rfc1912.zones
,/etc/rndc.key
- 解析库文件
/var/named/ZONE_NAME.ZONE
(二)BIND的配置
(1)配置主配置文件:/etc/named.conf
- 全局配置:options {};
- 日志子系统配置:logging {};
- 区域定义:zone "ZONE_NAME" IN {};
- 定义本机能够提供解析的zone
- dnssec:dns的安全选项,建议关闭dnssec,设为no
(2)配置解析库文件:按照资源记录的格式定义
(3)格式检查:
- 主配置文件语法检查:
named-checkconf
- 解析库文件语法检查:
named-checkzone zone_name PATH_TO_ZONE_NAME
(4)重载配置:
rndc reload
或 service named reload
(5)实验:配置基本的DNS服务,DNS正向解析
将192.168.136.230配置为"hellopeiyang.com"域的DNS服务器,本区域主机"websrv"的IP地址为192.168.136.229,"www"是"websrv"的别名,邮件服务器"mailsrv1"的IP地址为192.168.136.100,邮件服务器"mailsrv2"的IP地址为192.168.136.101,mailsrv1的优先级更高
- 第1步,配置主配置文件/etc/named.conf,修改options字段,修改部分如下:
vim /etc/named.conf
options {
listen-on port 53 { localhost; };
//修改监听主机IP为localhost,这样网络上的其他主机可以连接本机的DNS服务
//也可以通过注释本条语句达到相同效果
allow-query { any; };
//修改允许查询的客户端网段,any表示任意客户端可以向本机发起DNS请求,并得到查询结果
};
- 第2步,修改独立区域配置文件,添加区域配置信息:
vim /etc/named.rfc1912.zones
zone "hellopeiyang.com" IN {
type master; //类型为主服务器
file "hellopeiyang.com.zone"; //必须与/var/named下的文件名相同
};
- 第3步,配置解析库文件
解析库文件可以手动编辑,也可以复制类似文件修改,这里将/var/named目录下的named.localhost文件复制并重命名为hellopeiyang.com.zone文件,并作出相应修改
cp -p /var/named/named.localhost /var/named/hellopeiyang.com.zone //复制时保留所属组权限
vim /var/named/hellopeiyang.com.zone
$TTL 1D //DNS缓存生命期的全局设置
@ IN SOA dns1 admin.hellopeiyang.com. (
//dns1:主DNS服务器域名
//本配置文件中凡是域名处若末尾不加"."系统识别时自动认为其后增加当前域名,
如这里"dns1"视作"dns1.hellopeiyang.com."
100 ; serial //序列号,不多于10位
1D ; refresh //从DNS服务器更新时间
1H ; retry //从DNS服务器重试时间
1W ; expire //从DNS服务器失效时间
3H ) ; minimum //错误的DNS缓存生命期
NS dns1 //DNS服务器主机名
dns1 A 192.168.136.230 //DNS服务器的IP地址
websrv A 192.168.136.229 //本域下的主机websrv的IP地址
www CNAME websrv //主机websrv的别名
@ MX 10 mailsrv1 //邮件服务器mailsrv1.hellopeiyang.com
@ MX 20 mailsrv2 //邮件服务器mailsrv2.hellopeiyang.com
mailsrv1 A 192.168.136.100 //邮件服务器mailsrv1.hellopeiyang.com的IP
mailsrv2 A 192.168.136.101 //邮件服务器mailsrv2.hellopeiyang.com的IP
- 第4步,格式检查:
检查主配置文件:named-checkconf
检查解析库文件:named-checkzone hellopeiyang.com hellopeiyang.com.zone

-
第5步,重新载入配置:
rndc reload
或者systemctl reload named
-
第6步,测试:
dig www.hellopeiyang.com @192.168.136.230
测试成功,返回结果中NS、A、CNAME记录与设置相同,同时aa标签表明指定的DNS服务器192.168.136.230是www.hellopeiyang.com网路主机的权威服务器

(6)只允许DNS返回本机存在的DNS记录(适用于企业内网)
修改/etc/named.conf文件options字段recursion选项,修改如下:
recursion no;
此时,请求一个DNS服务器不知道的域名,服务器直接拒绝

(三)测试命令
(1)dig命令
- 语法:
dig [-t type] name [@SERVER]
dig只用于测试dns系统,不会查询hosts文件进行解析 - 查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析 - 测试反向解析:
dig -x IP
dig -t ns . @114.114.114.114 //查询根DNS服务器域名
dig -t mx hellopeiyang.com @192.168.136.230 //查询hellopeiyang.com域的邮件服务器

(2)host命令
- 语法:
host [-t type] name [SERVER]
host -t ns . 114.114.114.114 //查询根DNS服务器域名
dig -t mx hellopeiyang.com 192.168.136.230 //查询hellopeiyang.com域的邮件服务器

(3)nslookup命令
- 交互式命令:
- server IP:指定DNS服务器地址
- 域名:查找域名的A记录
- set type=TYPE_NAME:设置之后查询信息的记录类型

(四)反向区域解析
-
反向区域解析与正向区域解析类似,同样需要修改/etc/named.rfc1912.zones和建立/var/named目录下的解析库文件
-
第1步,修改独立区域配置文件,添加区域配置信息:
vim /etc/named.rfc1912.zones
zone "136.168.192.in-addr.arpa"{ //反向解析域,IP需要倒写
type master;
file "192.168.136.zone";
};
- 第2步,配置解析库文件:
vim /var/named/192.168.136.zone
$TTL 1d
@ IN SOA dns1.hellopeiyang.com. admin.hellopeiyang.com. (100 3h 1h 12h 1d )
NS dns1.hellopeiyang.com.
230 PTR dns1.hellopeiyang.com.
229 PTR websrv.hellopeiyang.com.
100 PTR mailsrv1.hellopeiyang.com.
101 PTR mailsrv2.hellopeiyang.com.
注意:NS和PTR记录的域名应该写全并以"."结束,以防止系统自动视作在其后添加反向解析域
-
第3步,格式检查:
named-checkconf
named-checkzone 192.168.136.zone /var/named/192.168.136.zone
-
第4步,重新载入配置:
rndc reload
-
第5步,测试:
dig -x 192.168.136.229 @192.168.136.230
或者下条命令
dig -t ptr 229.136.168.192.in-addr.arpa @192.168.136.230

(五)bind-chroot程序包
-
功能:将DNS服务的相关文件移至更深的目录中,减少DNS被攻破时对系统的影响
-
安装并启动服务:
yum install bind-chroot
systemctl start named-chroot
-
发现/var/named/chroot目录下有很多与named服务相关文件,并且文件的inode相同而硬连接数都只是1

- 这种情况只能是文件目录挂载所形成的,执行
mount
命令发现大量相关文件的挂载记录,证明bind-chroot程序实现迁移文件至更深目录的实质是将文件挂载至更深的目录下

(六)允许动态更新
- 功能:允许客户端通过命令更新解析库资源记录信息
- 准备工作:
- 指定的zone语句块中修改allown-update选项
例如:allow-update {192.168.136.229;};
:只允许192.168.136.229主机能够动态更新本机DNS解析库指定zone的资源记录 - chmod770 /var/named:增加写权限
- 指定的zone语句块中修改allown-update选项
- 动态更新命令:nsupdate
nsupdate
>server 192.168.136.230
>zone hellopeiyang.com
>update add ftp.hellopeiyang.com 86400 IN A 192.168.136.150
>send
>update delete ftp.hellopeiyang.com A
>send
(七)从服务器
-
从DNS服务器从主DNS服务器拷贝解析库文件,共同提供DNS服务,提升DNS服务的可靠性
-
第1步,从服务器:配置主配置文件,修改options字段的如下内容:
options {
listen-on port 53 { localhost; };
allow-query { any; };
};
- 第2步,从服务器:修改独立区域配置文件,添加区域配置信息
zone "hellopeiyang.com" IN {
type slave;
masters {192.168.136.230;};
file "slaves/hellopeiyang.com.slave.zone";
};
- 第3步,主服务器:添加解析库文件NS记录,修改后如下
vim /var/named/hellopeiyang.com.zone
$TTL 1D
@ IN SOA dns1 admin.hellopeiyang.com. (
101 ; serial //只要解析库更新,一定要更新序列号
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2 //增加的NS记录
dns1 A 192.168.136.230
dns2 A 192.168.136.130 //增加的A记录
websrv A 192.168.136.229
www CNAME websrv
@ MX 10 mailsrv1
@ MX 20 mailsrv2
mailsrv1 A 192.168.136.100
mailsrv2 A 192.168.136.101
-
第4步,主服务器、从服务器:设置防止黑客窥视DNS信息
-
为了防止黑客通过建立从服务器,获得主服务器的解析库信息,需要在主服务器和从服务器的主配置文件/etc/named.conf中options条目中增加"allow-transfer"选项
-
主服务器增加内容:
allow-transfer {192.168.136.130;};
:只允许从服务器IP复制解析库文件 -
从服务器增加内容:
allow-transfer {none;};
:不允许任何IP复制解析库文件
-
-
第5步,主服务器、从服务器:格式检查
分别在主服务器和从服务器上执行named-checkconf
命令
在主服务器上执行named-checkzone hellopeiyang.com /var/named/hellopeiyang.com.zone
-
第6步,主服务器、从服务器:重新载入配置
rndc reload
-
第7步,测试
dig www.hellopeiyang.com @192.168.136.130

- 注意:客户端查询过程通过UDP的53端口进行,主、从服务器之间的解析库同步操作需要通过TCP和UDP的53端口联合进行。
(八)子域
(1)子域与父域在一台主机上(适用于子域的流量比较小时)
- 第1步,修改独立区域配置文件,添加子域配置信息,增加的信息如下:
zone "zhengzhou.hellopeiyang.com" IN {
type master;
file "zhengzhou.hellopeiyang.com.zone";
};
- 第2步,添加子域解析库文件,内容如下:
cp -p /var/named/hellopeiyang.com.zone /var/named/zhengzhou.hellopeiyang.com.zone
复制一份父域的解析库文件,在其上做修改
vim /var/named/zhengzhou.hellopeiyang.com.zone
$TTL 1D
@ IN SOA dns1 admin.hellopeiyang.com. (
101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.136.230
websrv A 192.168.136.160
www CNAME websrv
@ MX 10 mailsrv1
mailsrv1 A 192.168.136.170
-
第3步,检查语法
named-checkconf
named-checkzone zhengzhou.hellopeiyang.com /var/named/zhengzhou.hellopeiyang.com.zone
-
第4步,重新载入配置
rndc reload
-
第5步,测试
dig www.zhengzhou.hellopeiyang.com @192.168.136.230

(2)子域与父域不在一台主机上(适用于子域的流量比较大时)
又称作:父域DNS服务器将DNS管理权委派给子域DNS服务器
- 第1步,父域DNS:在解析库文件中增加子域的NS记录
vim /var/named/hellopeiyang.com.zone
$TTL 1D
@ IN SOA dns1 admin.hellopeiyang.com. (
101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
henan NS dns2
dns1 A 192.168.136.230
dns2 A 192.168.136.130
websrv A 192.168.136.229
www CNAME websrv
@ MX 10 mailsrv1
@ MX 20 mailsrv2
mailsrv1 A 192.168.136.100
mailsrv2 A 192.168.136.101
named-checkzone hellopeiyang.com /var/named/hellopeiyang.com.zone //检查语法
rndc reload //重新载入配置
- 第2步,子域DNS:创建子域shanghai.hellopeiyang.com
//步骤1:修改主配置文件
vim /etc/named.conf //修改的内容如下
options {
listen-on port 53 { localhost; };
allow-query { any; };
};
//步骤2:修改独立区域配置文件
vim /etc/named.rfc1912.zones //增加的内容如下
zone "henan.hellopeiyang.com" IN {
type master;
file "henan.hellopeiyang.com.zone";
};
//步骤3:创建解析库文件
vim /var/named/henan.hellopeiyang.com.zone
$TTL 1D
@ IN SOA dns1 admin.hellopeiyang.com. (
101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.136.130
websrv A 192.168.136.133
www CNAME websrv
chgrp named /var/named/henan.hellopeiyang.com.zone //更改所属组
//步骤4:检查语法
named-checkconf
named-checkzone henan.hellopeiyang.com /var/named/henan.hellopeiyang.com.zone
//步骤5:重新载入配置
rndc roload
- 第3步,测试
dig www.henan.hellopeiyang.com @192.168.136.230

(九)转发服务器
(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
实现:修改/etc/named.conf文件
options {
forward first|only;
//first:转发到达的DNS服务器若解析失败,则自身直接发起DNS解析请求
//only:转发到达的DNS服务器若解析失败,则自身不再发起请求,本次DNS解析结果为失败
forwarders { ip;};
};
(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
实现:修改/etc/named.rfc1912.zones文件
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
(3)实验一:实现全局转发
- 第1步,转发服务器的设置:
vim /etc/named.conf
options{
forward first;
forwarders {192.168.136.139;}; //凡是不在本区域DNS服务器中的请求一律转发给192.168.136.139
dnssec-enable no;
dnssec-validation no;
};
named-checkconf
rndc reload
- 第2步,被转发服务器:设置DNS服务
//步骤1:修改主配置文件
vim /etc/named.conf
options {
listen-on port 53 { localhost;};
allow-query { any; };
};
//步骤2:修改独立区域配置文件
vim /etc/named.rfc1912.zones
zone "byebye.com" IN {
type master;
file "byebye.com.zone";
};
//步骤3:创建解析库文件
vim /var/named/byebye.com.zone
$TTL 1D
@ IN SOA dns1 admin.hellopeiyang.com. (
101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.136.139
websrv A 192.168.136.66
www CNAME websrv
chgrp named /var/named/beijing.hellopeiyang.com.zone //更改所属组
//步骤4:检查语法
named-checkconf
named-checkzone byebye.com /var/named/byebye.com.zone
//步骤5:重新载入配置
rndc reload
- 第3步,测试
dig www.byebye.com @192.168.136.230

(4)实验二:实现特定区域转发
- 第1步,转发服务器的设置:
vim /etc/named.rfc1912.zones
zone "byebye.com" IN {
type forward;
forward first;
forwarders {192.168.136.139;};
//仅当请求解析beijing.hellopeiyang.com区域时,转发给192.168.136.224
};
named-checkconf
rndc reload
-
第2步,被转发服务器:设置DNS服务,与实验一:实现全局转发过程完全相同
-
第3步,测试
dig www.byebye.com @192.168.136.230

(十)bind中的acl
-
acl:把一个或多个地址归并为一个集合,并通过一个统一的名称调用
-
语法:
acl acl_name{
ip;
net/prelen;
……
};
-
acl只能先定义后使用,因此一般定义在/etc/named.conf文件中options前面
-
bind的内置acl
- none:没有一个主机
- any:任意主机
- localhost:本机
- localnet:本机的IP同掩码运算后得到的网络地址
-
访问控制的指令
- allow-query {}:允许查询的主机;白名单
- allow-transfer {}:允许区域传送的主机;白名单
- allow-recursion {}:允许递归的主机,建议全局使用
- allow-update {}:允许更新区域数据库中的内容
-
实验:使用acl功能只允许192.168.136.0网段的主机查询DNS服务
编辑/etc/named.conf文件,添加acl设置,并且在allow-query字段中添加acl
vim /etc/named.conf
acl lan {
192.168.136.0/24;
};
options {
listen-on port 53 { localhost; };
allow-query { lan;localhost; }; //添加名为lan的acl
};
named-checkconf
rndc reload
此时,只有192.168.136.0/24的网段可以查询DNS其他网段的请求会被服务器拒绝

网友评论