是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果,如果DNS服务器本地没有存储与之对应的信息,
则该服务器需要询问其他服务器,并将返回的查询结果提交给用户
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,
若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。
此查询的源和目标保持不变,为了查询结果只需要发起一次查询
递归算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->
但它知道谁知道->他代为帮客户端去查找-->最后再返回最终结果
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的
地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回
权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,
直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询
迭代算法︰客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道并
推荐客户端应该找谁-->客户端自己去找它
DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意
位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。
client-->hosts--->client DNS service local cache-->DNS server(recursion)->DNS server cache --> DNS iteration ---> root ---> 顶级域名 ---> 二级域名DNS....
FQDN --> IP正向解析
IP ---> FQDN 反向解析
传输解析库
区域解析库 由众多资源记录RR(Resource Record)组成
name [TTL] IN rr_type value
区域名字,不写可以从上一个记录继承 time to live 生存值 资源记录类型 值
TTL 可以全局继承
@符合可以引用当前区域的域名
同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
$TTL 86400 ; 默认的TTL值(1天)
;@ IN SOA ns1.example.com. admin.example.com.
;此区域名 IN SOA 负责此解析库的主机,简写ns1也是可以的 管理员邮箱.代替@
@ IN SOA ns1.example.com. admin.example.com. (
2024053101 ; 序列号
3600 ; 刷新时间(1小时)
900 ; 重试时间(15分钟)
604800 ; 过期时间(1周)
86400 ; 最小TTL(1天)
)
IN NS ns1.example.com. ;省略name从上面继承
IN NS ns2.example.com. ;指定NS,即此name由哪个主机负责解析
; A 记录
@ IN A 192.0.2.1
www IN A 192.0.2.2
; AAAA 记录
@ IN AAAA 2001:db8::1
www IN AAAA 2001:db8::2
; PTR 记录(假设反向域名为1.2.0.192.in-addr.arpa和1.db8.0.2001.ip6.arpa)
1.2.0.192.in-addr.arpa. IN PTR example.com.
2.2.0.192.in-addr.arpa. IN PTR www.example.com.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR www.example.com.
; NS 记录
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
; CNAME 记录
alias IN CNAME www.example.com.
; MX 记录
@ IN MX 10 mail.example.com.
mail IN A 192.0.2.3
; TXT 记录
@ IN TXT "v=spf1 include:example.com ~all"
bind:服务器
bind-utils: 客户端
bind-libs:相关库,依赖关系自动安装
bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/
BIND主程序:/usr/sbin/named
服务脚本和Unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
管理工具:/usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且
只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp
解析库文件:/var/named/ZONE_NAME.ZONE
注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
#需要注释的行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#需要修改的行,改为no
dnssec-enable no;
dnssec-validation no;
#需要添加的行
做master,允许区域传输
allow-transfer { 从服务器IP;};
做slave,不允许区域传输
allow-transfer { none;};
#最小化回答
minimal-responses yes;
zone 后面的名字 可以不和 file 后面的名字相同
1. DNS正向解析
#配置文件
zone "wang.org" IN {
type master;
file "wang.org.zone";
};
#保留文件属性设置
cp -p /var/named/named.localhost /var/named/wang.org.zone
$TTL 1D
@ IN SOA master admin.wang.org. (
2019042210 ; serial #如果想从服务器能更新,每次修改完主的配置,此数字要增加
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
www A 10.0.0.7
named-checkconf #检查配置文件语法
named-checkzone wang.org /var/named/wang.org.zone #检查区域和区域对应的解析库文件是否正确
systemctl start named
2.实现主从DNS服务器
主:
allow-transfer { 从服务器IP;};
zone "wang.org" {
type master;
file "wang.org.zone";
};
$TTL 1D
@ IN SOA master admin.wang.org. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 10.0.0.8
slave A 10.0.0.18
从:
allow-transfer { none;}; #写在主配置的options中
zone "wang.org" {
type slave;
masters { 主服务器IP;};
file "slaves/wang.org.slave";
};
区域配置文件不需要写,会自动生成
3.实现子域
父DNS 中指明 子的
域名子 NS 主机名
主机名 A IP
在子DNS中
正常配置就行,使用父指定的子域
4.DNS 转发(缓存)服务器
转发的DNS服务器会缓存DNS查询
1.全局转发
对非本机所负责解析区域的请求,全转发给指定的服务器
在全局配置块中实现
only:转发的服务器没查到,就不查了,
first:转的服务器没查到,向root查询,然后进行迭代查询进行查找
Options {
forward first|only;
forwarders { ip;};
};
2 特定区域转发
仅转发对特定的区域的请求,比全局转发优先级高
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
红帽系:默认没有, 安装nscd
yum -y install nscd
systemctl enable --now nscd
nscd -g #查看缓存信息
nscd -i hosts #清除DNS客户端缓存
Ubuntu 启用DNS客户端缓存
ubuntu 默认会启用DNS客户端缓存
systemctl status systemd-resolved.service
systemd-resolve --statistics
systemd-resolve --flush-caches
systemd-resolve --statistics
1. 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求
2. 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统
3. 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
4. 用户向该IP节点(CDN服务器)发出请求
5. 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容
6. 请求结果发给用户
DNS 服务常见故障如下
SERVFAIL:The nameserver encountered a problem while processing the query.
可使用dig +trace排错,可能是网络和防火墙导致
NXDOMAIN:The queried name does not exist in the zone.可能是CNAME对应的A记录不存在导致
REFUSED:The nameserver refused the client's DNS request due to policy restrictions.可能是DNS策略导致
whois baidu.com #查询域名归属
named-checkconf #检查配置文件是否正确
named-checkzone "wang.org" /var/named/wang.org.zone #解析库文件语法检查
dig www.baidu.com @114.114.114.114 #指定dns服务器查询对应的域名
dig -x 114.114.114.114 #反向DNS
host www.baidu.com 114.114.114.114
nslookup www.baidu.com 114.114.114.114
rndc 本地的bind的管理命令
连接bind的953/tcp
rndc COMMAND
COMMAND:
status: 查看状态
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录