DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找打算机和做事。当用户在运用程序中输入 DNS 名称时,DNS 做事可以将此名称解析为与之干系的其他信息,如 IP 地址。由于,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。实在,域名的终极指向是IP。常日情形下我们只用到了DNS做事器的正向解析功能,而DNS还有方向解析功能,便是把IP地址解析成主机名。
DNS:中文名叫做域名做事或者域名做事器, 属于运用层协议, 为C/S架构, 利用TCP/UDP的53号端口.[root@localhost ~]# cat /etc/services | grep "^domainb"
domain 53/tcp # name-domain server

domain 53/udp
DNS干系知识DNS:Domain Name Service,域名解析做事监听端口:udp/53,tcp/53运用程序:bind根域:.一级域:组织域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv国家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir反向域:.in-addr.arpa域的划分
根域下来便是顶级域或者叫一级域,
有两种划分办法,一种互联网刚兴起时的按照行业性子划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。
每个域都会有域名做事器,也叫威信域名做事器。
Baidu.com便是一个顶级域名,而www.baidu.com却不是顶级域名,他是在baidu.com 这个域里的一叫做www的主机。
一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND做事器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限定的)。
比如a.www.baidu.com,在这个网址中,www.baidu.com变成了一个二级域而不是一台主机,主机名是a。
DNS树状构造图解析办法正向解析:FQDN --> IP反向解析:IP --> FQDNFQDN:(Fully Qualified Domain Name)全称域名把稳:正向解析是两个不同的名称空间,是两个不同的解析树;以是各须要一个解析库来分别卖力本地域名的正向和反向;
DNS查询办法递归:DNS要求被做事器接管后,如果属于此做事器统领范围则要求上级做事器依次通报要求,并且依次通报结果给发出要求的主机。
客户端指向的做事器一定给递归做事
迭代: DNS要求被做事器接管后,如果不是自己统领范围,让客户端访问根域做事器,然后跟域关照客户端去访问下级做事器,直到末了客户端访问统领要求域名的做事器为止。
客户端在查询DNS做事器之前会先查询本地的hosts(名称解析配置文件)文件, hosts文件中没有查询到须要的信息才会去查询DNS做事器.host文件路径:
linux:/etc/hostwindows:/%WINDOWS%/system32/dirvers/etc/host#本地host格式
1.1.1.1 www.xxx.com
2.2.2.2 www.yyy.com
一次完全的DNS查询要求经由的流程:当你要求www.xxx.com这个域名时, 会先去查找本地hosts文件, 如果本地hosts文件中有结果, 则直接返回如果hosts文件中没有结果, 则会要求DNS serveice, DNS service会先查找Local DNS Cache, 有结果则直接返回如果没有结果, 就去会从根域做事器开始迭代查询末了迭代查询有结果就直接返回给客户端区域解析库资源记录:rr(resource record)用于此记录解析的属性SOA: Start Of Authority, 起始授权记录,一个区域解析库仅能有一个SOA记录,而且必须为解析库的第一条NS:Name Server,域名做事器,专用于标明当前区域的DNS做事器MX: Mail eXchange, 邮件交流器,MX记录有优先级属性(0-99)A:internet Address,FQDN --> IP,专用于正向解析,用于实现将FQDN解析为IP地址PTR: PoinTeR,IP --> FQDN,专用于反向解析,将IP地址解析为FQDNAAAA:FQDN --> IPv6,专用于正向解析,将FQDN解析为IPv6地址CNAME: Canonical Name,别名记录DNS做事器类型主DNS做事器:掩护所卖力解析的域内解析库做事器:解析库由管理掩护;从DNS做事器:从主DNS做事器或其他的从DNS做事器哪里"复制"(区域通报)一份解析库;序列号:解析库的版本号,条件:主理事器解析库内 容发生变革,其序列递增;刷新韶光间隔:从做事器从主理事器要求同步解析库的韶光间隔重试韶光间隔:从做事器从主理事器要求同步解析库失落败时,再次考试测验的韶光间隔;过期时长:从做事器始终联系不到主理事器时,多久后放弃从做事器角度,停滞供应做事器缓存做事器区域传送全量传送:传送全体解析库增量传送:通报解析库变革的那部分内容解析库文件同步的过程,即赞助DNS做事器与主DNS做事器间的区域文件同步传输过程。
完备区域传送:传送区域的所有数据,AXFER 增量区域传送:传送区域中改变的数据,IXFER
DNS资源记录格式资源记录定义的格式:name [TTL] IN RRType Value
# TTL可以全局继续
# '@'可用于引用当前区域的名字
# 同一个名字可以通过多条记录定义多个不同的值,此时DNS做事器会以轮询办法相应
# 同一个值也可能有多个不同的定义名字, 通过多个不同的名字指向同一个值进行定义;
仅此表示通过多个不同的名字可以找到同一个主机而已
SOA(Start Of Authority)记录:任何解析库文件的第一个记录的类型必须是SOA
# name: 区域名称,常日可以简写为'@';例如:www.baidu.com
# value: 有多部分组成
# 当前主区域的DNS做事器的FQDN, 也可以利用当前区域的名字
# 当前区域管理员的邮箱地址, 但地址中不能利用@符号, 一样平常用“.”代替, 例如:admin.baidu.com
# 主从做事折衷属性的定义以及否定的答案的统一的TTL
#示例:
@ IN SOA ns.baidu.com. uadmin.baidu.com. (
2019111101;#serial 解析库版本号,最好不要超过十位数字
2H;#refresh 刷新韶光
10M;#retry 重试韶光
1W;#expire 过期韶光
1D;#negative answer ttl 否定答案的统一缓存时长
)
主从做事折衷属性的定义以及否定答案的缓存韶光TTL的阐明:serial:表示序列号,当主DNS做事器更新解析库文件时,须要把'serial'这个值增大,修正之后重载DNS做事就可以实现主从同步了。refresh:表示从DNS做事器多久与主DNS做事器检讨并同步一次,便是更新的意思。retry:如果上面在从DNS做事器更新时连接主DNS做事器失落败时,定义多久之后重新考试测验连接一次。一样平常这个值应该小于上面'refresh'的值。expire:如果在从DNS做事看重新考试测验连接失落败时,定义多久之后失落效,并且从DNS做事器关闭DNS做事。这时须要系统管理员去查看故障并规复做事。negative answer ttl:表示否定答案在DNS客户端上的缓存韶光。H:表示小时,M表示分钟,W:表示星期,D:表示天;
NS(Name Server)记录:# name:当前区域的名字
# value:当前区域的某DNS做事器的名字(FQDN),例如ns1.baidu.com
# 如果有多台NS做事器,每一个都必须有对应的NS记录;
# 对付正向解析文件来讲,每一个NS的FQDN都该当有有个A记录
@ IN NS ns1.baidu.com.
相邻两个资源记录的name相同时,后续可省略 对NS记录而言,任何一个NS记录后面的做事器名字,都该当在后续有一个A记录
MX(Mail eXchange)记录:# name:区域名称
# value:当前区域的某邮件做事器(smtp做事器的)FQDN;
# 一个区域,MX记录可以有很多个;但是每个记录的value之前该当有一个数字(0-99)表示此做事器的优先级
# 但是每个记录的value之前该当有一个数字(0-99)表示此做事器的优先级
# 数字越小优先级越高;
@ IN MX 10 mail1.baidu.com.
@ IN MX 20 mail2.baidu.com.
为什么要为每个MX记录设置优先级呢?这是由于如果在一个区域内有多台邮件交流器,那么当别人发送邮件过来时该当由谁吸收才好?以是,优先级的好处就在这里,优先级越高的邮件交流器卖力吸收即可,这里而其他邮件交流器则起到冗余浸染。在MX记录中,邮件交流器的优先级范围是0-99,且数字越小优先级越高。
把稳:对MX记录而言,任何一个MX记录后面的做事器名字,都该当在后续有一个A记录;
A(Internet Address)记录:# name:某个主机的FQDN,例如www.baidu.con
# value:主机名对应主机的IP地址
www.baidu.com. IN A 1.1.1.1
www.baidu.com. IN A 1.1.1.2
mail1.baidu.com. IN A 1.1.1.3
mail2.baidu.com. IN A 1.1.1.3
#把稳:
.baidu.com. IN A 1.1.1.4
baidu.com. IN A 1.1.1.4
#避免用户写错名称时给缺点答案,可通过泛域名进行解析至某特定域名;
AAAA记录:# name:FQDN
# value:IPv6
PTR(PoinTeR)记录:# name:IP,有特定格式,把IP地址反过来写,1.2.3.4要写作4.3.2.1;
# 而有特定后缀:in-addr.arpa.,以是完全写法为:4.3.2.1.in-addra.arpa.
# value:FQDN
#例如:
4.3.2.1.in-addr.arpa. IN PTR www.baidu.com
#简写成:
4 IN PTR www.baidu.com.
把稳:网络地址及后缀可省略;主机地址依然须要反写;
CNAME(Canonical Name)格式:# name:别的FQDN
# value:正工名字的FQDN
web.baidu.com. IN CNAME www.baidu.com.
DNS解析答案当DNS客户端向DNS做事器发出解析要求时,不管是否能够查询到想要的结果,都会返回一个解析答案。根据是否能够查询到想要的结果,可分为肯定答案和否定答案;根据解析答案是否由直接卖力的DNS做事器返回,可分为威信答案和非威信答案。
根据是否能够查询到想要的结果:肯定答案:存在查询的键(key),并且存在与其查询键对应的值(value)。否定答案:不存在查询的键(key),因此,自然不存在与其查询键(value)对应的值。根据解析答案是否由直接卖力的DNS做事器返回:威信答案:由直接卖力的DNS做事器返回的答案。非威信答案:不是由直接卖力的DNS做事器返回的答案。这种情形下一样平常是由其他DNS做事器直接返回缓存的解析结果。DNS and Bind我们说DNS是一种协议,而对付每一种协议的实现都须要程序员开拓出遵照这种协议规范的软件程序来实现,这里要先容的BIND便是DNS协议的一种开源实现。据统计,利用bind作为DNS做事器软件的DNS做事器大约占所有DNS做事器的九成。BIND全称为Berkeley Internet Name Domain,由于当今互联网上的通信险些都必须借助于DNS做事器来解析主机名,得到通信对方的IP地址,而在DNS做事器上最常用的软件便是bind,以是,bind这款软件险些可以说是当今互联网上常用的软件了。
目前bind由ISC.org(Internet Systems Consortium,互联网系统协会)卖力开拓与掩护。
学习bind这款软件之前,务必节制以下基本观点:
dns:协议
bind:dns协议的一种开源实现
named:bind程序运行起来后的进程名
子域授权办法子域授权:每个域的名称做事器,都是通过其上级名称做事器在解析库进行授权;
类似根域授权tld:.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
baidu.com.在.com的名称做事器上,解析库中添加资源记录;baidu.com. IN NS ns1.baidu.com
baidu.com. IN NS ns2.baidu.com
baidu.com. IN NS ns3.baidu.com
ns1.baidu.com IN A 3.3.3.1
ns2.baidu.com IN A 3.3.3.2
ns3.baidu.com IN A 3.3.3.3
glue record:粘合记录
域名注册商: 新网, 万网, godaddy...DNS 做事搭建BIND的安装配置:dns做事, 程序包名:bind, 程序名:named
程序包bind #供应dns server程序,以及几个常用的测试工具。
bind-libs #供应bind和bind-utils包中的程序共同用到的库文件。
bind-utils #bind客户端程序集,例如供应dig, nslookup, dig等工具。
bind-chroot #类似chroot,把dns做事限定在某个范围之类.
bind做事脚本:/etc/rc.d/init.d/named主配置文件:/etc/named.conf,/etc/rfc1912.zones,/etc/rndc.key解析文件:/var/named/ZONE_NAME.ZONE把稳:一台物理做事器可同时为多个区域供应解析;必须要有根区域文件;named.ca该当有两个(如果包括ipv6的,该当更多)实现localhost和本地回环地址的解析库;rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;供应赞助性的管理功能;监听端口:953/tcp
要点:(1)一台DNS做事器可同时为多个区域供应解析。
(2)DNS做事器必须要有根区域解析库文件:named.ca.
(3)DNS做事器还该当有两个区域解析库文件:localhost和127.0.0.1的正反向解析库,这两个文件分别如下:
①正向解析库文件:/var/named/named.localhost
②反向解析库文件:/var/named/named.loopback
查看named.localhost文件:[root@localhost ~]# cat /var/named/named.localhost
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1 <--关键便是这一条记录。
AAAA ::1
查看named.loopback文件:[root@localhost ~]# cat /var/named/named.loopback
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
PTR localhost. <--这条记录
rndc命令管理dns做事器我们知道,DNS做事默认的监听端口是53,当我们在主机上启动DNS做事之后,用netstat查看监听端口,显示如下:
[root@localhost ~]# netstat -tunlp | grep named
tcp 0 0 127.0.0.1:953 0.0.0.0: LISTEN 1387/named
tcp 0 0 192.168.1.120:53 0.0.0.0: LISTEN 1387/named
tcp 0 0 127.0.0.1:53 0.0.0.0: LISTEN 1387/named
tcp6 0 0 ::1:953 ::: LISTEN 1387/named
tcp6 0 0 ::1:53 ::: LISTEN 1387/named
udp 0 0 192.168.1.120:53 0.0.0.0: 1387/named
udp 0 0 127.0.0.1:53 0.0.0.0: 1387/named
udp6 0 0 ::1:53 ::: 1387/named
上面结果显示,除了能够看到53号端口之外,还能看到953端口,那是namd在953端口多启动了一个做事,这便是rndc了。 这个rndc的全称是Remote Name Domain Controller,它可以帮助用户更方便地管理DNS做事器,包括可以检讨DNS做事器的状态与统计信息、重载配置文件及zone或单独重载某个区域而不须要重新启动全体DNS做事,还有查看已存在DNS缓存当中的资料等。 rndc做事默认监听在tcp的953端口,且默认监听于127.0.0.1地址,因此默认仅许可本地利用。
rndc的常见用法:rndc reload:在不重新启动DNS做事的情形下,重新加载配置文件及zone.rndc reload zone:重新加载指定的zone.rndc status:查看当前DNS做事器的状态。rndc stats:将当前系统的DNS统计数据记录下来,默认会将数据存储为一个文件:/var/named/data/named_stats.txt.rndc dumpdb:将当前DNS高速缓存中的数据记录下来,与stats类似,默认会将数据存储为一个文件:/var/named/data/cache_dump.db.、rndc flush:清空当前DNS做事器上的所有缓存。bind的配置文件#安装bind
[root@localhost ~]# yum install -y bind
#查看bind安装目录
[root@localhost ~]# rpm -ql bind
#默认区域解析文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
#named.ca 默认环球DNS做事器地址,YUM安装会自动天生
#named.localhost 本地回环文件
#named.loopback
主配置文件:/etc/named.conf全局配置:option {}日志配置:logging{}区域配置配置文件:/etc/rfc1912.zones区域配置:本机能够为哪些zone进行解析,就要定义哪些zone;例如:zone "ZONE_NAME" IN {}默认CentOS会默认配置回环地址
至于options内的比较主要的子参数大略阐述如下:listen-on port 53 { any; };
监听在当前主机上的哪个网络接口。默认是监听在localhost,也便是只有本性能力够查询,这显然是不符合现实须要的,因此可以改为any,表示可以监听多个网络接口,any之后要加上分号才算结束。只要监听在能够与外网主机进行通信的网络接口上,就可以为外网主机供应解析做事,当前条件是别人知道自己主机的IP地址。这里也可以监听在指定的网络接口上,可以监听多个接口,每个地址后面都须要加上分号。
directory "/var/named";
这里的意思是如果在/etc/named.conf(包括被包含进来的配置文件)中定义了正反解区域解析库文件的文件名时,该文件名默认该当存放于哪个目录下,默认是存放在/var/named/目录下。须要把稳的是,如果安装了bind-chroot程序包,则这些区域解析库文件终极会被主动链接到/var/named/chroot/var/named/这个目录。
dump-file、statistics-file、memstatistics-file
与named这个做事有关的许多统计信息,如果想要输出为文件的话,默认的文件名就由这三项指定。
allow-query { any; };
这是针对DNS客户真个设置,表示谁可以向我的DNS做事提出查询要求的意思。默认设置为localhost,表示仅许可本地查询,这里修正为any,表示对所有的用户开放(当然,防火墙必须放行才行)。
allow-transfer { none; };
当架设主-从DNS做事器时,许可哪台从DNS做事器向我的这台DNS做事器转发区域解析库文件的数据。
recursion yes;
是否许可为DNS客户端做递归查询。默认为yes.
bind做事器的启动[root@localhost named]# systemctl start named
[root@localhost named]# ss -luntp | grep ':53'
udp UNCONN 0 0 127.0.0.1:53 : users:(("named",pid=2594,fd=512))
udp UNCONN 0 0 [::1]:53 [::]: users:(("named",pid=2594,fd=513))
tcp LISTEN 0 10 127.0.0.1:53 : users:(("named",pid=2594,fd=21))
tcp LISTEN 0 10 [::1]:53 [::]: users:(("named",pid=2594,fd=22))
默认配置是不进行地址的解析,回环地址默认是缓存做事器!在配置named.conf文件时候建议复制一份.把稳:任何做事程序如果期望其能够通过网络被其它主机访问,至少该当监听在一个能与外部主机通信的IP地址上;
编辑name.d配置文件#复制配置文件
[root@localhost ~]# cp -v /etc/named.conf{,.bak}
‘/etc/named.conf’ -> ‘/etc/named.conf.bak’
#配置文件简介
options {
listen-on port 53 { 10.10.1.109; 127.0.0.1; }; <--监听端口,也可写为 { 127.0.0.1; 192.168.139.46; }
listen-on-v6 port 53 { ::1; }; <--对ip6支持
directory "/var/named"; <--域文件存储目录
dump-file "/var/named/data/cache_dump.db"; <--dump cach的目录directory
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; <--指定许可进行查询的主机,当然是要所有的电脑都可以查啦
recursion yes; <--是否递归查询
//dnssec-enable yes; <--dnssec建议关闭
//dnssec-validation yes;
/ Path to ISC DLV key /
//bindkeys-file "/etc/named.root.key";
//managed-keys-directory "/var/named/dynamic";
//pid-file "/run/named/named.pid"; <--存着named的pid
session-keyfile "/run/named/session.key";
logging { <--指定做事器日志记录的内容和日志信息来源
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
#注释后重启后一台缓存DNS做事器就配置好了
[root@localhost ~]# systemctl restart named.service
[root@localhost ~]# ss -luntp | grep ":53"
udp UNCONN 0 0 10.10.1.109:53 : users:(("named",pid=5921,fd=513))
udp UNCONN 0 0 127.0.0.1:53 : users:(("named",pid=5921,fd=512))
udp UNCONN 0 0 [::1]:53 [::]: users:(("named",pid=5921,fd=514))
tcp LISTEN 0 10 10.10.1.109:53 : users:(("named",pid=5921,fd=22))
tcp LISTEN 0 10 127.0.0.1:53 : users:(("named",pid=5921,fd=21))
tcp LISTEN 0 10 [::1]:53 [::]: users:(("named",pid=5921,fd=23))
建议测试时关闭dnssec;主正向解析DNS做事器的配置1. 主DNS名称做事器:
(1) 在主配置文件中定义区域
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
(2) 定义区域解析库文件
涌现的内容:
宏定义;
资源记录;
#主理事器就须要编辑named.rfc1912.zones
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "itcom.com" IN {
type master;
file "itcom.com.zone"
}
#添加须要解析的区域名,由于是我们要做主DNS解析 则type是master, file的默认事情目录是/var/name/
#以是文件路径可以省略不写,直接写域名的zone文件名 统称区域名加上.zone即可
#添加区域解析库文件
[root@localhost ~]# vim /var/named/itcom.com.zone
$TTL 1D
$ORIGIN itcom.com.
@ IN SOA ns1.itcom.com. admin.itcom.com (
2019112201
1H
5M
7D
1D)
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 10.10.1.1
ns2 IN A 10.10.1.2
mx1 IN A 10.10.1.3
mx2 IN A 10.10.1.4
www IN A 10.10.1.5
ftp IN CNAME www
#检讨配置文件语法是否精确
[root@localhost ~]# named-checkconf #没有是最好的,报错会提示报错问题
#检讨区域配置文件是否有语法缺点
[root@localhost ~]# named-checkzone "itcom.com" /var/named/itcom.com.zone
zone itcom.com/IN: loaded serial 2019112201
OK
#指定检讨区域名和区域文件,缺点会提示干系缺点信息
#修正文件权限
[root@localhost ~]# ps -aux | grep named <--默认运行的永不是named
named 5921 0.0 2.8 168804 58064 ? Ssl 11:53 0:00 /usr/sbin/named -u named -c /etc/named.conf
root 12915 0.0 0.0 112712 964 pts/0 R+ 22:49 0:00 grep --color=auto named
[root@localhost ~]# ll /etc/named.conf <--默认的用户权限是root 群组是named 权限值是640
-rw-r----- 1 root named 1819 Nov 21 11:53 /etc/named.conf
[root@localhost ~]# id named <--默认named用户权限
uid=25(named) gid=25(named) groups=25(named)
[root@localhost ~]# chmod 640 /var/named/itcom.com.zone <--修正区域解析文件的权限
[root@localhost ~]# chown :named /var/named/itcom.com.zone <--修正区域解析文件的用户组
[root@localhost ~]# ll /var/named/itcom.com.zone
-rw-r----- 1 root named 272 Nov 21 22:43 /var/named/itcom.com.zone
#重启named做事
[root@localhost ~]# systemctl restart named.service
#查看named的状态
[root@localhost ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-9.P2.el7 (Extended Support Version) <id:7107deb>
running on localhost.localdomain: Linux x86_64 3.10.0-1062.4.3.el7.x86_64 #1 SMP Wed Nov 13 23:58:53 UTC 2019
boot time: Thu, 21 Nov 2019 14:54:05 GMT
last configured: Thu, 21 Nov 2019 14:54:05 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 104 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
server is up and running
到此主理事器的正向解析就配置完成了!
DNS转发做事器的配置在缓存做事器的根本上进行转发做事器的配置,但缓存DNS做事器没有专门卖力解析哪一个或哪些区域,在吸收到用户的查询要求时,首先查看本地是否有缓存,如果没有缓存则从根区域开始迭代查询。那有没有办法不向根区域做事器查询,而直接把查询要求发给其他指定的DNS做事器,然后让这个指定的DNS做事器帮我们查询并返回查询结果,接着本地主机再将查询结果返回给用户呢?这就须要用到forwarding功能了。但须要把稳的是,被指定转发的做事器必须许可为当前做事器做递归查询。
转发功能分为区域转发和全局转发两种。
区域转发:功能:仅转发对某特定区域的解析要求 配置办法:配置区域段(zone),如下:
zone "ZONE_NAME" IN {
type forward;
forward {first|only};
forwarders {SERVER_IP};
};
# first:首先转发。当转发器不回合时,自行去迭代查询。
# only:只转发给指定的转发器。
把稳:forwarders后面的's'不能漏掉。
全局转发:功能:针对凡本地没有通过zone定义的区域查询要求,通通转发给某转发器。在这种情形下连根域的解析库文件都不须要了。
配置办法:配置全局段(options),如下:
options {
... ...
forward {first|only};
forwarders {SERVER_IP};
... ...
};
以用户访问www.baidu.com为例,当全局转发时,配置有forwarding的DNS做事器的查询办法示意图如下:
区域转发则仅转发特定区域的解析要求,如果用户要求解析这些特定区域时,全体查询办法和全局转发时一样;如果用户要求解析的不是这些特定区域时,则转发过程险些和前面利用缓存DNS做事器进行查询相同。
总的来说,具有forwarding功能的DNS做事器便是把原来自己要去从根开始迭代查询的这个任务交给了其他DNS做事器去处理。
这里在原来配置好的缓存DNS做事器上定义转发:
[root@localhost ~]# vim /etc/named.conf
在全局配置段进行配置。
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
allow-transfer { none; };
recursion yes;
forward only; //定义只转发。
forwarders { 223.5.5.5; 226.6.6.6; };
//这两个地址是阿里云供应的公共DNS做事器,先用223.5.5.5,再用223.6.6.6.
};
为了方便测试,打消是本地DNS做事器自己从根域开始迭代查询的可能性,因此这里注释掉根域的干系配置,使其失落效:
#zone "." IN {
# type hint;
# file "named.ca";
#};
配置好之后重载named做事:
[root@localhost ~]# rndc reload
server reload successful
将配置/etc/resolv.conf中配置的DNS做事器指向注释掉,打消是该配置文件中指向的DNS做事器查询的可能性:
[root@localhost ~]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
测试结果:[root@www ~]# dig -t A www.redhat.com @127.0.0.1
; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.redhat.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12858
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 13, ADDITIONAL: 27
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.redhat.com. IN A
;; ANSWER SECTION:
www.redhat.com. 30 IN CNAME ds-www.redhat.com.edgekey.net.
ds-www.redhat.com.edgekey.net. 30 IN CNAME ds-www.redhat.com.edgekey.net.globalredir.akadns.net.
ds-www.redhat.com.edgekey.net.globalredir.akadns.net. 30 IN CNAME e3396.ca2.s.tl88.net.
e3396.ca2.s.tl88.net. 30 IN A 119.145.144.215
;; AUTHORITY SECTION:
. 514752 IN NS l.root-servers.net.
. 514752 IN NS b.root-servers.net.
. 514752 IN NS h.root-servers.net.
. 514752 IN NS i.root-servers.net.
. 514752 IN NS m.root-servers.net.
. 514752 IN NS k.root-servers.net.
. 514752 IN NS c.root-servers.net.
. 514752 IN NS e.root-servers.net.
. 514752 IN NS f.root-servers.net.
. 514752 IN NS d.root-servers.net.
. 514752 IN NS g.root-servers.net.
. 514752 IN NS a.root-servers.net.
. 514752 IN NS j.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 514752 IN A 198.41.0.4
a.root-servers.net. 514752 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 514752 IN A 192.228.79.201
b.root-servers.net. 514752 IN AAAA 2001:500:84::b
c.root-servers.net. 514752 IN A 192.33.4.12
c.root-servers.net. 514752 IN AAAA 2001:500:2::c
d.root-servers.net. 514752 IN A 199.7.91.13
d.root-servers.net. 514752 IN AAAA 2001:500:2d::d
e.root-servers.net. 514752 IN A 192.203.230.10
e.root-servers.net. 514752 IN AAAA 2001:500:a8::e
f.root-servers.net. 514752 IN A 192.5.5.241
f.root-servers.net. 514752 IN AAAA 2001:500:2f::f
g.root-servers.net. 514752 IN A 192.112.36.4
g.root-servers.net. 514752 IN AAAA 2001:500:12::d0d
h.root-servers.net. 514752 IN A 198.97.190.53
h.root-servers.net. 514752 IN AAAA 2001:500:1::53
i.root-servers.net. 514752 IN A 192.36.148.17
i.root-servers.net. 514752 IN AAAA 2001:7fe::53
j.root-servers.net. 514752 IN A 192.58.128.30
j.root-servers.net. 514752 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 514752 IN A 193.0.14.129
k.root-servers.net. 514752 IN AAAA 2001:7fd::1
l.root-servers.net. 514752 IN A 199.7.83.42
l.root-servers.net. 514752 IN AAAA 2001:500:9f::42
m.root-servers.net. 514752 IN A 202.12.27.33
m.root-servers.net. 514752 IN AAAA 2001:dc3::35
;; Query time: 786 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 四 3月 30 22:13:39 CST 2017
;; MSG SIZE rcvd: 976
forwarders的好处和问题剖析关于forwarders的利用是好是坏,有两种见地:
①利用forwarders可以提高查询效率。
这种不雅观点认为,由于当很多DNS做事器都利用forwarders时,那个被设置为forwarders的DNS转发器,会由于积累了大量的缓存,因此查询效率会大大提高。
②利用forwarders反而会降落整体查询效率。
这种不雅观点则认为,当被设置为forwarders的DNS转发器业务繁忙时,如果有其他的DNS做事器还向它要查询数据,这时候反而会导致查询速率减慢,这种情形下双方都会受到影响。
测试配置的DNS做事器测试命令:dig#1.查询配置的DNS做事器
[root@localhost ~]# dig -t A "www.itcom.com" @10.10.1.109
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -t A www.itcom.com @10.10.1.109
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40853
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.itcom.com. IN A
;; ANSWER SECTION:
www.itcom.com. 86400 IN A 10.10.1.5 <--查询的结果是我们本机的做事器结果
;; AUTHORITY SECTION:
itcom.com. 86400 IN NS ns1.itcom.com.
itcom.com. 86400 IN NS ns2.itcom.com.
;; ADDITIONAL SECTION:
ns1.itcom.com. 86400 IN A 10.10.1.1
ns2.itcom.com. 86400 IN A 10.10.1.2
;; Query time: 0 msec
;; SERVER: 10.10.1.109#53(10.10.1.109)
;; WHEN: Thu Nov 21 23:00:19 CST 2019
;; MSG SIZE rcvd: 126
#2.如果我们定义了两个以上的www记录解析结果会如何呢?
[root@localhost ~]# vim /var/named/itcom.com.zone
$TTL 1D
$ORIGIN itcom.com.
@ IN SOA ns1.itcom.com. admin.itcom.com (
2019112201
1H
5M
7D
1D)
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 10.10.1.1
ns2 IN A 10.10.1.2
mx1 IN A 10.10.1.3
mx2 IN A 10.10.1.4
www IN A 10.10.1.5
www IN A 10.10.1.6
ftp IN CNAME www
#把稳我们改完了配置库不会立即生效,如果要立即生效的话我们不用重启做事,只须要我们重载做事就行
[root@localhost ~]# systemctl reload named.service
[root@localhost ~]# rndc reload <--这种reload也行
server reload successful
#3.现在我们在解析测试一下
[root@localhost ~]# dig -t A "www.itcom.com" @10.10.1.109
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -t A www.itcom.com @10.10.1.109
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38053
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.itcom.com. IN A
;; ANSWER SECTION:
www.itcom.com. 86400 IN A 10.10.1.6
www.itcom.com. 86400 IN A 10.10.1.5
;; AUTHORITY SECTION:
itcom.com. 86400 IN NS ns1.itcom.com.
itcom.com. 86400 IN NS ns2.itcom.com.
;; ADDITIONAL SECTION:
ns1.itcom.com. 86400 IN A 10.10.1.1
ns2.itcom.com. 86400 IN A 10.10.1.2
;; Query time: 0 msec
;; SERVER: 10.10.1.109#53(10.10.1.109)
;; WHEN: Thu Nov 21 23:05:51 CST 2019
;; MSG SIZE rcvd: 142
把稳:如果我们dig测试没有@本机进行解析的话会交给/etc/resolv.conf文件里的nameserver地址解析,
解析命令的详细利用办法:dig命令:# dig [-t type] name [@SERVER] [query options]
# dig用于测试dns系统,因此,不会查询hosts文件进行解析;
# 查询选项:
# +[no]trace:跟踪解析过程
# +[no]recurse:进行递归解析
#例:trace查询百度
[root@localhost ~]# dig -t A "www.baidu.com" +trace @8.8.8.8
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -t A www.baidu.com +trace @8.8.8.8
;; global options: +cmd
. 119 IN NS j.root-servers.net.
. 119 IN NS b.root-servers.net.
. 119 IN NS l.root-servers.net.
. 119 IN NS d.root-servers.net.
. 119 IN NS a.root-servers.net.
. 119 IN NS e.root-servers.net.
. 119 IN NS f.root-servers.net.
. 119 IN NS g.root-servers.net.
. 119 IN NS h.root-servers.net.
. 119 IN NS i.root-servers.net.
. 119 IN NS m.root-servers.net.
. 119 IN NS k.root-servers.net.
. 119 IN NS c.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 39 ms
www.baidu.com. 15 IN CNAME www.a.shifen.com.
www.a.shifen.com. 15 IN A 14.215.177.39
www.a.shifen.com. 15 IN A 14.215.177.38
;; Received 90 bytes from 202.12.27.33#53(m.root-servers.net) in 29 ms
#例:recurse查询百度
[root@localhost ~]# dig -t A "www.baidu.com" +recurse @8.8.8.8
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -t A www.baidu.com +recurse @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34458
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 76 IN CNAME www.a.shifen.com.
www.a.shifen.com. 76 IN A 14.215.177.38
www.a.shifen.com. 76 IN A 14.215.177.39
;; Query time: 31 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Nov 21 23:23:17 CST 2019
;; MSG SIZE rcvd: 90
把稳:flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3这行中的flags:后面的值aa: 表示威信答案
host命令:# host [-t type] name [SERVER]
#查询本地itcom的A记录
[root@localhost ~]# host -t A www.itcom.com 10.10.1.109
Using domain server:
Name: 10.10.1.109
Address: 10.10.1.109#53
Aliases:
www.itcom.com has address 10.10.1.6
www.itcom.com has address 10.10.1.5
#查询 NS MX 等方法相同