介绍
名字解析服务:当主机IP变化时,只要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。
本地名称解析配置文件:hosts
LInux中是 /etc/hosts Windows中是 C:\Windows\System32\drivers\etc\hosts
DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。基于C/S架构,服务器端口号53/udp,53/tcp
BIND:Bekerley Internet Name Domain,由ISC提供的DNS软件实现
域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers)管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构。
FQDN:完全限定域名。主机名+域名构成,最左边是主机名,其余是域名
DNS域名结构

顶级域名分类
|--------|------------------------------------------------------------------------------|
| 国家顶级域名 | .cn中国 .uk英国 .jp日本 .us美国 等 |
| 类别顶级域名 | .com、.top(企业)、.edu(教育机构)、.gov(政府机构)、.mil(军事部门)、.net(互联网及信息中心)、.org(非盈利性组织) 等 |
认识网址结构
域名可划分各个子域,子域可继续划分子域。
其中 aaa 是四级域名,bbb 是三级域名,ccc 是二级域名,com 是顶级域名,. 是根域;
DNS查询类型
递归查询 迭代查询
名称服务器
Name Server,域内负责解析本域内的名称的DNS服务器
IPV4的根域名服务器:全球共13个负责解析根域的DNS服务器,美国10个,荷兰1个,瑞典1个,日本1个。
IPV6的根域名服务器:全球共25个,中国1主3从,美国1主2从
解析类型
正向解析:FQDN > IP
反向解析:IP > FQDN
正反向解析是两个不同的名称空间,是两颗不同的解析树
DNS查询过程
以访问 www.163.com 为例。这是我见过对DNS最通俗易懂的解释了
-
首先查找电脑上的 DNS 缓存列表,如果有记录,那么直接返回对应 IP 地址,否则进行下一步;
-
查找电脑上的 HOST 文件的映射关系,如果有记录,那么返回对应 IP 地址,否则进行下一步;
-
查找互联网线路供应商的本地 DNS 服务器(即中国电信、中国移动或中国联通),本地 DNS 服务器先查找自己的缓存记录,如果有记录,那么返回对应 IP 地址,否则本地 DNS 服务器向根域名服务器发送请求;
-
根域名服务器收到请求后,查看是 .com 顶级域名,于是返回 .com 顶级域名服务器的 IP 地址给到本地 DNS 服务器;
-
本地 DNS 服务器收到回复后,向 .com 顶级域名服务器发起请求;
-
.com 顶级域名服务器收到请求后,查看是 .163.com 次级域名,于是返回 .163.com 次级域名服务器的 IP 地址给 DNS 服务器;
-
本地 DNS 服务器收到回复后,向 .163.com 次级域名服务器发起请求;
-
.163.com 次级域名服务器收到请求后,查看是自己管理的域名,于是查看域名和 IP 地址映射表,把 www.163.com 的 IP 地址返回给本地 DNS 服务器;
-
本地 DNS 服务器收到回复后,向电脑回复域名对应 IP 地址,并把记录写入本地 DNS 服务器的缓存里;
-
电脑收到回复后,使用 IP 地址访问网站,并把记录写入电脑 DNS 缓存中。
DNS软件bind
DNS服务器软件:bind、powerdns,unbound
bind相关程序包
bind:服务器端
bind-libs:相关库
bind-utils:客户端
bind-chroot:安全包,将dns相关文件放至 /var/named/chroot/
相关文件
|---------------------------------------|-----------------------------------------------------------|
| /etc/named.conf | BIND的主配置文件,包含了整个DNS服务器的配置信息。它定义了域名空间、反向解析、区域设置、转发规则、负载均衡等 |
| /usr/sbin/named | BIND的主程序文件 |
| /var/named/named.ca | 包含根DNS服务器的信息 |
| /usr/lib/systemd/system/named.service | BIND的Unit文件 |
| /etc/rndc.conf | 可控制BIND开关、重载、刷新缓存,增删zone等操作。端口 953/tcp |
| /etc/named.rfc1912.zones | 配置DNS区域 |
| /var/named/ZONE_NAME.ZONE | 解析库文件 |
主配置文件
- 全局配置:options {};
- 日志子系统配置:logging {};
- 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone "ZONE_NAME" IN {};
注意:
- 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
- 缓存名称服务器的配置:监听外部地址即可
- dnssec: 建议关闭dnssec,设为no
主配置文件的语法检查:named-checkconf
配置生效:rndc reload
实现主DNS服务器
DNS服务器类型
主DNS服务器、从DNS服务器、缓存DNS服务器(转发器)
主DNS服务器
管理维护所负责解析的域内解析库的服务器
从DNS服务器
从主服务器或从服务器通过区域传输解析库副本
- 序列号:解析库版本号,主服务器解析库变化时,其序列递增
- 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
- 过期时长:从服务器联系不到主服务器时,多久后停止服务
- 通知机制:主服务器解析库发生变化时,会主动通知从服务器
区域传输
完全传输:传送整个解析库
增量传输:传递解析库变化的部分
解析形式
正向解析:FQDN >>> IP
反向解析:IP >>> FQDN
负责本地域名的正向和反向解析库
正向区域 反向区域
解析答案
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其它非权威服务器返回的查询答案
资源记录格式
name [TTL] IN rr_type value
注意:
- TTL可从全局继承
- 使用 "@" 符号可用于引用当前区域的名字
- 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
- 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
各种资源记录
区域解析库:由众多RR组成
资源记录:Resource Record,即RR
记录类型:如下
-
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
magedu.org. 86400 IN SOA ns.magedu.org. nsadmin.magedu.org. (
2015042201
2H
10M
1W
1D
)magedu.org. 域名
86400 SOA记录生存时间,当前为24小时(86400秒)
IN 固定写法
SOA 记录类型,起始记录
ns.magedu.org. 负责此域名的DNS服务器的域名
nsadmin.magedu.org. 负责此域名的DNS服务器的管理员的电子邮箱地址,由于@具有特殊含义,所以是点.
2015042201 SOA记录的序列号,每次SOA记录变更时,此值就会增加
2H 刷新时间,主服务器发送DNS更新到所有从服务器的时间间隔;不加单位默认是秒
10M 重试时间,主服务器在重试间隔时间内没有收到从服务器的确认,它将再次发送更新
1W 过期时间,从服务器多久未收到主服务器的更新消息后,它才开始认为自己的信息可能已经过时
1D 否定答案的TTL值,当一个查询请求得不到回答时,这个值定义了缓存这个"没有答案"的回答的时间 -
A:internet Address,作用,FQDN --> IP
www.magedu.org. IN A IP地址
*.magedu.org. IN A IP地址 -
AAAA:FQDN --> IPv6
-
PTR:PoinTeR,IP --> FQDN
现有 www.magedu.org. 对应 1.2.3.4 ,PTR格式如下
4.3.2.1.in-addr.arpa. IN PTR www.magedu.org.网络地址和后缀可省略,主机地址仍需倒着写,简写如下
4 IN PTR www.magedu.org. -
NS:Name Server,专用于标明当前区域的DNS服务器
magedu.org. IN NS ns1.magedu.org.
magedu.org. IN NS ns2.magedu.org.对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录
一个区域可以有多个NS记录 -
CNAME : Canonical Name,别名记录
www.magedu.org. IN CNAME websrv.magedu.org.
比如京东 www.jd.com.gslb.qianxun.com. >>> www.jd.com.s.galileo.jcloud-cdn.com. >>> wwwv6.jcloudimg.com. >>> 115.231.223.3 最后才解析到IP
[root@wenzi ~]# dig www.jd.com
...
;; QUESTION SECTION:
;www.jd.com. IN A;; ANSWER SECTION:
www.jd.com. 47 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 47 IN CNAME www.jd.com.s.galileo.jcloud-cdn.com.
www.jd.com.s.galileo.jcloud-cdn.com. 47 IN CNAME wwwv6.jcloudimg.com.
wwwv6.jcloudimg.com. 47 IN A 115.231.223.3
... -
MX:Mail eXchanger,邮件服务
magedu.org. IN MX 10 mx1.magedu.org.
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
允许动态更新
动态更新:可以通过远程更新区域数据库的资源记录
实现动态更新,需要在指定的zone语句块中配置
zone "域名" IN {
type master;
file "zone文件名";
allow-update { any; };
};
实验一:实现主DNS服务器
企业内部用的域名 magedu.org ,能解析企业内部所有以 magedu.org 为后缀的主机
|-------------------------------|-------------------------|
| 192.168.28.158 | DNS主服务器 |
| 192.168.28.156、192.168.28.141 | web服务器 |
| 192.168.28.143 | 用来访问www.magedu.org,验证结果 |
在DNS主服务器上创建一个解析 magedu.org 域的区域解析库
记录所有以 magedu.org 后缀的域与IP的对应关系;一个区域解析对应一个域名。
bash
修改DNS服务器配置文件,设置监听端口范围和允许哪些主机可以使用此dns
[root@wenzi ~]# vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; localhost; };
...
allow-query { localhost; 192.168.28.0/24; };
...
进入解析库目录
[root@wenzi ~]# cd /var/named/
[root@wenzi named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
利用现有文件生成所需文件
[root@wenzi named]# cp -a named.localhost magedu.org.zone
$TTL 1D ;如果在第一行声明了 $TTL 1D,那么下面的所有记录都将使用这个TTL值,直到遇到新的 $TTL 声明或者区域结束为止。
;SOA记录
@ IN SOA ns1 admin.magedu.org. (
20231014 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
;列出此区域的DNS服务器
@ IN NS ns1.magedu.org.
;A记录,把主机名ns1映射到 192.168.28.158
ns1 IN A 192.168.28.158
;定义别名www的规范名称是websrv,同时websrv对应两个ip地址,可起到负载均衡作用
www CNAME websrv
websrv A 192.168.28.156
websrv A 192.168.28.141
* A 192.168.28.156 ;泛域名,不是www.magedu.org且是magedu.org结尾都映射至此地址
使配置文件包含新增加的解析库,声明此区域
可看到 /etc/named.conf 配置文件中有 include "/etc/named.rfc1912.zones"; 建议将zone卸载此文件内,和配置文件区分开
bash
[root@wenzi named]# vim /etc/named.rfc1912.zones
zone "magedu.org" IN { 格式:zone 域名 IN
type master; 声明是主区域,其它服务器可来此查询区域数据
file "magedu.org.zone"; 包含区域数据的文件
};
...
校验语法
校验zone语法 named-checkzone 域名 区域文件路径
root@wenzi \~\]# named-checkzone magedu.org /var/named/magedu.org.zone
校验配置文件语法
root@wenzi \~\]# named-checkconf
配置web服务器
bash
192.168.28.141上配置
[root@wenzi ~]# yum -y install httpd && systemctl start httpd && echo 'www.magedu.org --- 192.168.28.141' > /var/www/html/index.html
192.168.28.156上配置
[root@wenzi ~]# yum -y install httpd && systemctl start httpd && echo 'www.magedu.org --- 192.168.28.156' > /var/www/html/index.html
修改192.168.28.143网卡配置,使DNS指向DNS主服务器,然后验证


反向解析区域
反向区域:即将IP反向解析为FQDN
区域名称:网络地址反写 加 .in-addr.arpa.
如:192.168.28. >>> 28.168.192.in-addr.arpa. 表示反向解析192.168.28.开头的地址
在 /etc/named.rfc1912.zones 定义区域 192.168.28.zone
root@wenzi \~\]# vim /etc/named.rfc1912.zones zone "28.168.192.in-addr-arpa" IN { type master; file "192.168.28.zone"; };
定义 192.168.28.zone 内容,将192.168.28.199解析为www.magedu.com
root@wenzi named\]# vim 192.168.28.zone $TTL 1D @ IN SOA csPTR admin.magedu.org. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS csPTR.magedu.org. 199 IN PTR www.magedu.com.
测试

实现从服务器
- 应该为一台独立的名称服务器
- 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
- 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
- 主服务器得允许从服务器作区域传送
- 主从服务器时间应该同步,可通过ntp进行
- bind程序的版本应该保持一致;否则,应该从高,主低
实验二:实现从DNS服务器
主DNS服务器
修改配置文件
root@wenzi named\]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; localhost; }; ... allow-query { localhost; 192.168.28.0/24; }; allow-transfer { 192.168.28.156; }; 允许传输区域数据的主机,即从DNS;同时也有加密功能
定义区域
root@wenzi named\]# vim /etc/named.rfc1912.zones zone "wenzi.com" IN { type master; file "wenzi.com.zone"; };
定义区域解析库
root@wenzi named\]# vim wenzi.com.zone @ IN SOA wz admin.wenzi.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS wz.wenzi.com. DNS主服务器 IN NS slave.wenzi.com. DNS从服务器 wz IN A 192.168.28.158 slave IN A 192.168.28.156
从DNS服务器
修改配置文件
root@wenzi named\]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; localhost; }; ... allow-query { localhost; 192.168.28.0/24; }; allow-transfer { none; }; 允许传输区域数据的主机,此处为none,没有其它从DNS服务器从这里获取zone数据;同时也有加密功能 ...
定义区域文件
root@wenzi named\]# vim /etc/named.rfc1912.zones zone "wenzi.com" { type slave; 此处为slave,从DNS masters { 192.168.28.158; }; 指定主DNS服务器地址 file "slaves/wenzi.com.slave"; 传输过来的zone文件存放地址,默认在/var/named/slaves/目录下 };
测试主机添加两个dns,一个为主DNS服务器IP,一个为从DNS服务器IP;当启动从服务器DNS后,可见主DNS的 wenzi.com.zone 文件已同步过来了
root@wenzi named\]# ll /var/named/slaves/ total 4 -rw-r--r-- 1 named named 257 Oct 16 03:05 wenzi.com.slave \[root@wenzi \~\]# dig wz.wenzi.com @192.168.28.158 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> wz.wenzi.com @192.168.28.158 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 26790 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;wz.wenzi.com. IN A ;; ANSWER SECTION: wz.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS wz.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.158#53(192.168.28.158) ;; WHEN: Mon Oct 16 03:20:17 CST 2023 ;; MSG SIZE rcvd: 111 \[root@wenzi \~\]# dig wz.wenzi.com @192.168.28.156 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> wz.wenzi.com @192.168.28.156 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 58088 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;wz.wenzi.com. IN A ;; ANSWER SECTION: wz.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS wz.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:21:39 CST 2023 ;; MSG SIZE rcvd: 111
修改主DNS的 wenzi.com.zone 文件,测试变化是否同步
root@wenzi \~\]# vim /var/named/wenzi.com.zone $TTL 1D @ IN SOA master admin.wenzi.com. ( 1 ; serial 变化时序列号一定要变化,不然从DNS检测不到变化 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master.wenzi.com. IN NS slave.wenzi.com. master IN A 192.168.28.158 slave IN A 192.168.28.156 \[root@wenzi \~\]# dig master.wenzi.com @192.168.28.158 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com @192.168.28.158 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 26790 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.158#53(192.168.28.158) ;; WHEN: Mon Oct 16 03:20:17 CST 2023 ;; MSG SIZE rcvd: 111 \[root@wenzi \~\]# dig master.wenzi.com @192.168.28.156 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com @192.168.28.156 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 58088 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:21:39 CST 2023 ;; MSG SIZE rcvd: 111
停止主DNS的named服务,rndc stop ,测试从DNS是否起作用
root@wenzi \~\]# dig master.wenzi.com ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 13481 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:32:10 CST 2023 ;; MSG SIZE rcvd: 111
访问到的DNS是从DNS,已生效。
DNS转发(缓存)
利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务器,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。
注意:
- 被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
- 在全局配置块中,关闭dnssec功能
dnssec-enable no;
dnssec-validation no;
转发方式
对非本机所负责解析区域的请求,全转发给指定的服务器
在全局配置块中实现:
Options {
forward first|only;
forwarders { ip;};
};
8.2.2 特定区域转发
仅转发对特定的区域的请求,比全局转发优先级高
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询