为什么电脑无法解析dns?,第1张

电脑无法解析DNS可能是因为网络连接问题,DNS缓存等多种因素导致。

1、网络连接问题:当电脑无法连接互联网时,DNS服务可能被阻止,导致无法解析DNS。网络连接问题包括线路故障、网卡或路由器故障等,需要重新连接或修复。

2、DNS缓存问题:当电脑无法解析DNS时,可能是因为DNS缓存导致的。DNS缓存意味着先前访问过的网站信息被存储在本地,用户再次访问时可以加速访问速度。但如果缓存中的信息过期或出错,就会导致DNS解析出现问题。用户可以通过清空DNS缓存来解决此问题。在Windows系统中,打开命令提示符,输入“ipconfig / flushdns”即可清空DNS缓存。

3、DNS服务器问题:如果DNS服务器发生故障或配置不正确,电脑就无法解析DNS。用户可以将DNS服务器配置成一个可靠的解析服务器来解决此问题。

扩展知识:

为了避免DNS解析问题,用户应该定期维护和清理电脑,避免安装病毒和恶意软件;定期更新操作系统和浏览器,以确保网络安全性;定期清空DNS缓存,以避免由于旧的DNS缓存导致的解析错误;最重要的是,定期备份并保护自己的数据,以避免意外数据丢失或损坏。

无法解析服务器的dns地址的原因有:

1 网络连接问题:如果您的网络连接不稳定或者断网了,可能会导致无法解析DNS地址。

2 DNS服务器问题:如果DNS服务器出现故障或者繁忙,可能会导致无法解析DNS地址。

3网络防火墙限制:如果网络防火墙限制了DNS请求,可能会导致无法解析DNS地址。

4DNS缓存问题:如果DNS缓存中存储了错误的DNS记录,可能会导致无法解析DNS地址。 5网络设置问题:如果网络设置中使用了错误的DNS服务器,可能会导致无法解析DNS地址。

解决方法:

1检查网络连接是否稳定。

2 尝试使用其他DNS服务器,如8888,8844 3检查网络防火墙设置,是否限制了DNS请求。

4清除DNS缓存。

5检查网络设置中的DNS服务器是否正确。

域名系统,在TCP/IP 网络中有非常重要的地位,能够提供域名与IP地址的解析服务,而不用去记住能够被机器直接读取的IP数串。

通过域名,最终得到该域名对应的IP地址的过程叫做域名解析。

DNS协议运行在UDP协议之上,使用端口53号

DNS域名空间中,树的最大深度不得超过127层,树种每个节点最长可以存储63个字符。

2、域和域名

DNS树的每一个完全合格域名(FQDN)标识。FQDN能准确表示出其对于DNS域树根的位置,也就是节点到DNS树根的完整表述方式。

例如:google为com域的子域,其表示方法为googglecom,而www为google域中的子域,可以使用wwwgooglecom表示。

注意:FQDN有严格的命名限制,长度不能超过256字节,只允许使用字符a-z,0-9,A-Z和减号(-)。

号只允许在域名标志之间和域名结尾使用。

域名不区分大小写,从最顶层到下层,可以分成:根域、顶级域、二级域、子域。

互联网的域名空间最顶层的是根域(root),记录这Interne的重要DNS信息,有Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给链接到Internet的各个组织。

全球有13个根域服务器:

1个为主根域服务器,在美国;其余12个为辅助根域服务器,

其中9个在美国;欧洲2个,分别在英国和瑞迪;亚洲一个,在日本。

3、域名的分类和等级

域名可以分为3中类型的顶级域分别是:

组织域:采用3个字符表示,表示组织的主要功能和活动,比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非盈利机构组织,int为国际机构组织。

地址域:采用两个字符的国家或地区代号,如cn表示中国,jp表示日本、hk表示香港,kr表示韩国,us表示美国。

反向域:特殊域,名字为in-addrarpa,用于将IP地址映射到名字(反向查询)

二、DNS相关概念

1、DNS服务器

运行DNS服务器程序的计算机,存储DNS数据库信息。

2、DNS缓存

DNS服务器在解析客户机的域名请求时,如果本地没有该域名的记录,则会询问其它DNS服务器,当其它域名将解析结果返回给DNS服务器是,DNS将对应的记录保存在本地,生成DNS缓存,当下一次客户机再次请求是,DNS服务器则可以直接使用缓存中的DNS记录。

3、DNS查询方式:递归查询和迭代查询

递归查询:当客户机向DNS服务器发起域名解析请求时,DNS服务器首先查看自己本机的DNS记录,如果没有则会想其它DNS服务器发起解析请求。

迭代查询:当客户机向DNS服务器发起域名解析请求是,DNS服务器不会给客户机解析地址,而是告诉客户机另外一台DNS服务器,客户即再向这台服务器发起地址解析请求。

4、正向解析和反向解析

正向解析:指域名解析到IP地址的解析过程。

反向解析:指IP地址解析到域名的解析过程。

5、DNS资源记录

1)SOA资源记录

每个区在区的开始都包含了一个起始授权记录(Start of Authority Record),简称SOA记录

SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。

2)NS资源记录

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析,每个区在区根处至少包含一个NS记录。

3)A资源记录

地址(A)资源记录把FQDN映射到IP地址。因为有次记录,所以DNS服务器能解析FQDN域名对应的IP地址。

4)PTR资源记录

相对于A记录,指针(PTR)记录把IP地址映射到FQDN。用于反向查询,通过IP地址,找到域名。

5)CNAME资源记录

别名记录(CNAME)资源记录创建特定FQDN的别名。用户可以使用CNAME记录来隐藏用户网络的实现细节,使链接的客户机无法知道真正的域名。

6)MX资源记录

邮件交换(MX)资源记录,为DNS域名指定邮件交换服务器。

三、DNS服务器安装及相关配置文件

1、安装DNS

BIND 简介:

BIND 全称为Berkeley Internet Name Domain(伯克利因特网名称域系统),BIND 主要有三个版本:BIND4、BIND8、BIND9。

BIND8版本:融合了许多提高效率、稳定性和安全性的技术,而BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。

安装命令:

[root@xuegod ~]# yum -y install bind bind-chroot bind-utils

安装包的作用:

bindx86_64 32:994-73el7_6 #DNS服务的主程序包

bind-chrootx86_64 32:994-73el7_6 #提高安全性

#bind-chroot是bind的一个功能,使bind可以在一个chroot 的模式下运行,也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已,这样做的目的是为了提高安全性,因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中。

bind-utils-994-50el7x86_64rpm #该包为客户端工具,系统默认已经安装的了,它用于搜索域名指令。

2、DNS服务器相关配置文件

[root@xuegod ~]# ls /etc/namedconf -l

-rw-r----- 1 root named 1808 1月 30 01:23 /etc/namedconf

namedconf是BIND的核心配置文件,它包含了BIND的基本配置,但其并不包括区域数据

/var/name/目录为DNS数据库文件存放目录,每一个域文件都放在这里

3、启动服务器

[root@xuegod ~]# systemctl start named

[root@xuegod ~]# systemctl enable named

Created symlink from /etc/systemd/system/multi-usertargetwants/namedservice to /usr/lib/systemd/system/namedservice

[root@xuegod ~]# netstat -antup | grep 53

tcp 0 0 127001:53 0000: LISTEN 3501/named

4、服务的使用方法

在客户端上配置好DNS服务器地址

[root@xuegod140 ~]# vim /etc/resolvconf

[root@xuegod140 ~]# cat /etc/resolvconf

Generated by NetworkManager

nameserver 1921681130

resolvconf文件,添加DNS,此文件的生效范围是全局的,即是所有网卡都可以生效。

修改网卡添加的DNS,此方法添加DNS仅对当前网卡生效。

DNS1=1921681130

5、配置文件详解

要求:配置DNS服务器解析:xuegodcn

[root@xuegod etc]# cp /etc/namedconf /etc/namedconfbak

DNS配置文件整体分为三段:

options:对全局生效

zone:针对某个区域生效

type:指定区域类型

type主要分为六种

Master:主DNS服务器,拥有区域数据文件,并对此区域提供管理梳理

Slave:辅助DNS服务器,拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据

Stub:stub区域和slave类似,但其只复制主DNS服务器上的NS记录,而不像slave复制DNS服务器的所有数据

Forward:一个forward zone是每个区域的配置转发的主要部分。一个zone语句中的type forward可以包括一个forward和/或forwarders子句,它会在区域名称给定的域中查询。如果没有forwarders语句或者forwarder是空表,那么这个域就不会转发,消除了options语句中有关转发的配置

Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用跟线索来查找根域名服务器,并找到最近的根域名服务器列表

四、实战-为公司搭建一个DNS服务器

1、配置正向解析区域

修改配置文件,授权DNS服务器管理xuegodcn区域,并把该区域的区域文件命名为xuegodcn

options {

listen-on port 53 { any; }; #把原来的127001改为any。

listen-on-v6 port 53 { any; }; #把原来的::1,改为any。

directory “/var/named”;

dump-file “/var/named/data/cache_dumpdb”;

statistics-file “/var/named/data/named_statstxt”;

memstatistics-file “/var/named/data/named_mem_statstxt”;

allow-query { any; }; #把原来的localhost,改为any。

recursion yes;

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto; #加入此项。

1

2

3

4

5

1

2

3

4

5

zone “xuegodcn” IN { #把原来的 改为xuegodcn。

type master; #把原来的hint,改为master。

file “xuegodcnzone”; #把原来的namedca,改为xuegodcnzone。

};

include “/etc/namedrfc1912zones”;

include “/etc/namedrootkey”;

2、创建zone文件

[root@xuegod etc]# cd /var/named #进入zone工作目录

[root@xuegod named]# ll -d namedlocalhost

-rw-r----- 1 root named 152 6月 21 2007 namedlocalhost

[root@xuegod named]# cp -a namedlocalhost xuegodcnzone

#-a参数,复制后的文件保留源文件权限

[root@xuegod named]# ll -d xuegodcnzone

-rw-r----- 1 root named 152 6月 21 2007 xuegodcnzone

[root@xuegod named]# vim xuegodcnzone

[root@xuegod named]# cat xuegodcnzone

$TTL 1D

xuegodcn IN SOA dnsxuegodcn rootxuegodcn (

0 ; serial #系列

1D ; refresh #刷新

1H ; retry #重试

1W ; expire #到期

3H ) ; minimum #最低限度

xuegodcn NS dnsxuegodcn #NS资源记录

dnsxuegodcn A 1921681130 #A资源记录

wwwxuegodcn A 1921681130 #A资源记录

www1xeugodcn CNAME wwwxuegodcn #CNAME记录

3、重启DNS服务:

[root@xuegod named]# systemctl restart named

4、修改客户机的DNS记录

[root@xuegod140 ~]# vim /etc/resolvconf

[root@xuegod140 ~]# cat /etc/resolvconf

Generated by NetworkManager

nameserver 1921681130

5、删除网卡配置文件的DNS记录

[root@xuegod140 ~]# cd /etc

[root@xuegod140 etc]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

[root@xuegod140 etc]# cat !$ | grep DNS1 #删除DNS1的行

cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep DNS1

6、测试结果:

[root@xuegod140 etc]# ping wwwxuegodcn

PING wwwxuegodcn (1921681130) 56(84) bytes of data

64 bytes from 1921681130 (1921681130): icmp_seq=1 ttl=64 time=0216 ms

64 bytes from 1921681130 (1921681130): icmp_seq=2 ttl=64 time=0359 ms

[root@xuegod140 etc]# ping www1xuegodcn

PING wwwxuegodcn (1921681130) 56(84) bytes of data

64 bytes from 1921681130 (1921681130): icmp_seq=1 ttl=64 time=0216 ms

64 bytes from 1921681130 (1921681130): icmp_seq=2 ttl=64 time=0255 ms

[root@xuegod140 etc]# ping dnsxuegodcn

PING dnsxuegodcn (1921681130) 56(84) bytes of data

64 bytes from 1921681130 (1921681130): icmp_seq=1 ttl=64 time=0170 ms

64 bytes from 1921681130 (1921681130): icmp_seq=2 ttl=64 time=0294 ms

总结:实验容易错误点

1)区文件的权限,需要注意,这里直接使用cp -a参数拷贝,保留文件的权限和属组、属主

2)服务端的防火墙必须要关闭,如果不关闭,就要放通DNS53号端口

3)客户端指定DNS地址时,resolv文件需要表示全局生效,本地网卡修改表示当前网卡生效

4)可以的话最好关闭NetworkManager

7、zone配置文件的参数说明

$TTL 1D:设置有效地址解析记录的默认缓存时间,默认为1天也就是1D。

xuegodcn IN SOA dns xuegodcn root xuegodcn

#原来的@表示当前的域xuegodcn,为方便大家记忆,在此直接写成xuegodcn

#设置SOA记录为:dnsxuegodcn

#在此配置文件中写域名时,都把根 也需要写上。

#域管理邮箱rootxuegodcn 由于@有其他含义,所以用“”代替@。

0 :更新序列号,用于标示数据库的变换,可以在10位以内,如果存在辅助DNS区域,建议每次更新完数据库,手动加1。

1D :刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天。

1H :重试延时,从域名服务器更新地址数据库失败以后,等待多长时间,默认为1小时。

1W :到期,失效时间,超过该时间仍无法更新地址数据库,则不再尝试,默认为一周。

3H :设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。设置无效记录,最少缓存时间为3小时。

NS @ :域名服务器记录,用于设置当前域的DNS服务器的域名地址,

A 127001: 设置域名服务器的A记录,地址为ipv4的地址127001,可以设置成192168100102

AAAA ::1:设置域名服务器的A记录,地址为ipv6的地址。

资源记录参数详解:

CNAME 资源记录

别名(CNAME)资源记录用于为某个主机指定一个别名

CNAME 资源记录语法格式:

别名 CNAME 主机名

www1xuegodcn CNAME wwwxuegodcn

MX 资源记录

MX(邮件交换器)资源记录提供邮件传递信息。该记录会指定区域内的邮件服务器名称。

MX 资源记录语法格式:

mail A 192168163

MX 192168163

PTR 资源记录

指针(PTR)资源记录。该记录与A 记录相反,用于查询IP 地址与主机名的对应关系。

根区域是一个较为特殊的区域,记录列出全球根域名服务器信息,域名通常用“”表示,如表 5-1 所示。

在这里插入描述

五、实战-DNS递归查询和搭建DNS转发服务器

1、使用DNS递归查询

修改配置文件:

[root@xuegod130 etc]# vim /etc/namedconf #修改DNS配置文件,修改如下内容。

options {

listen-on port 53 { any ; }; #把原来的127001改为any。

listen-on-v6 port 53 { any; }; #把原来的::1,改为any。

directory “/var/named”;

dump-file “/var/named/data/cache_dumpdb”;

statistics-file “/var/named/data/named_statstxt”;

memstatistics-file “/var/named/data/named_mem_statstxt”;

allow-query { any; }; #把原来的localhost,改为any。

recursion yes; #默认是支持递归查询。

#dnssec-enable yes;

#dnssec-validation yes;

#dnssec-lookaside auto;

只需要把以上三条内容注释了,其它内容不用改,这样客户端才能通过这个DNS进行递归查询,把dns加密通讯功能关闭,才可以和根服务器时行迭代查询。:

2、重启DNS服务,使配置文件生效:

[root@xuegod63 ~]# systemctl restart named

3、在xuego140主机上进行测试:

[root@localhost network-scripts]# ping wwwbaiducom

PING wwwashifencom (61135169105) 56(84) bytes of data

64 bytes from 61135169105: icmp_seq=1 ttl=55 time=318 ms

64 bytes from 61135169105: icmp_seq=3 ttl=55 time=147 ms

4、 搭建DNS转发服务器

[root@xuegod130 ~]# vim /etc/namedconf

options {

listen-on port 53 { any; }; #把原来的127001改为any。

listen-on-v6 port 53 { any; }; #把原来的::1,改为any。

directory “/var/named”;

dump-file “/var/named/data/cache_dumpdb”;

statistics-file “/var/named/data/named_statstxt”;

memstatistics-file “/var/named/data/named_mem_statstxt”;

allow-query { any; }; #把原来的localhost,改为any。

recursion yes; #允许递归查询

#dnssec-enable yes; #注释以下三行。

#dnssec-validation yes;

#dnssec-lookaside auto;

zone “xuegodcn” IN {

#type master; #注释此项

type forward; #添加此项,类型为转发。

#file “xuegodcnzone”; #注释此项

forward only ; #仅执行转发操作,only:仅转发,first:先查找本地zone,再转发。

forwarders { 8888; }; #指定转发查询请求的DNS服务器列表。

};

重启DNS服务,使配置文件生效:

[root@xuegod63 ~]# systemctl restart named

在xuegod140主机上进行测试:

[root@localhost network-scripts]# ping wwwbaiducom

PING wwwashifencom (61135169105) 56(84) bytes of data

64 bytes from 61135169105: icmp_seq=1 ttl=55 time=318 ms

64 bytes from 61135169105: icmp_seq=3 ttl=55 time=147 ms

六、实战-搭建DNS主从服务器

1、搭建一个主DNS服务器A,配置内容如下

[root@xuegod63 ~]# vim /etc/namedconf

options {

listen-on port 53 { any; }; #把原来的127001改为any。

listen-on-v6 port 53 { any; }; #把原来的::1,改为any。

directory “/var/named”;

dump-file “/var/named/data/cache_dumpdb”;

statistics-file “/var/named/data/named_statstxt”;

memstatistics-file “/var/named/data/named_mem_statstxt”;

allow-query { any; }; #把原来的localhost,改为any。

recursion yes;

#dnssec-enable yes;

#dnssec-validation yes;

#dnssec-lookaside auto;

zone “xuegodcn” IN {

type master; #指定类型为master。

file “xuegodcnzone”; #指定为xuegodcnzone。

allow-transfer { 19216810/24; }; #指定允许哪个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认为所有。

};

include “/etc/namedrfc1912zones”;

重启DNS服务,使配置文件生效:

[root@xuegod63 ~]# systemctl restart named

2、从DNS服务器的配置

要求:主从系统时间一定要保持一致。

1客户机提出域名解析请求,并将该请求发送给本地的域名服务器。

2当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。

3如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。

4本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。

5重复第四步,直到找到正确的纪录。

6本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

DNS也叫网域名称系统,是互联网的一项服务。它实质上是一个域名和IP相互映射的分布式数据库,有了它,我们就可以通过域名更方便的访问互联网。

DNS特点有分布式的,协议支持TCP和UDP,常用端口是53,每一级域名的长度限制是63,域名总长度限制是253。

最早的时候,DNS的UDP报文上限大小是512字节,所以当某个response大小超过512(返回信息太多),DNS服务就会使用TCP协议来传输。后来DNS协议扩展了自己的UDP协议,DNS client发出查询请求时,可以指定自己能接收超过512字节的UDP包,这种情况下,DNS还是会使用UDP协议。

分层的数据库结构:

DNS的结构跟Linux文件系统很相似,像一棵倒立的树。下面用站长之家的域名举例:最上面的是根域名,接着是顶级域名,再下来是站长之家域名chinaz依次类推。使用域名时,从下而上。stoolchinaz就是一个完整的域名,wwwchinaz也是。

之所以设计这样复杂的树形结构,是为了防止名称冲突。这样一棵树结构,当然可以存储在一台机器上,但现实世界中完整的域名非常多,并且每天都在新增、删除大量的域名,存在一台机器上,对单机器的存储性能就是不小的挑战。

另外,集中管理还有一个缺点就是管理不够灵活。可以想象一下,每次新增、删除域名都需要向中央数据库申请是多么麻烦。所以现实中的DNS都是分布式存储的。

根域名服务器只管理顶级域,同时把每个顶级域的管理委派给各个顶级域,所以当你想要申请下的二级域名时,找域名注册中心就好了。二级域名,再向下的域名就归你管理了。

当你管理http://chinaz的子域名时,你可以搭建自己的nameserver,在注册中心把//chinaz的管理权委派给自己搭建的nameserver。自建nameserver和不自建的结构图如下:

一般情况下,能不自建就不要自建,因为维护一个高可用的DNS也并非容易。据我所知,有两种情况需要搭建自己的nameserver:

搭建对内的DNS。公司内部机器众多,通过ip相互访问太过凌乱,这时可以搭建对内的nameserver,允许内部服务器通过域名互通。公司对域名厂商提供的nameserver性能不满意。

虽然顶级域名注册商都有自己的nameserver,但注册商提供的nameserver并不专业,在性能和稳定性上无法满足企业需求,这时就需要企业搭建自己的高性能nameserver,比如增加智能解析功能,让不同地域的用户访问最近的IP,以此来提高服务质量。

概括一下DNS的分布式管理,当把一个域委派给一个nameserver后,这个域下的管理权都交由此nameserver处理。这种设计一方面解决了存储压力,另一方面提高了域名管理的灵活性。

顶级域名像这样的顶级域名,由ICANN严格控制,是不允许随便创建的。顶级域名分两类:通用顶级域名,国家顶级域名。

通用顶级域名常见的如、org、edu等,国家顶级域名如我国的cn,美国的us。一般公司申请公网域名时,如果是跨国产品,应该选择通用顶级域名。

如果没有跨国业务,看自己喜好(可以对比各家顶级域的服务、稳定性等再做选择)。这里说一下几个比较热的顶级域,完整的顶级域参见维基百科。

meme顶级域其实是国家域名,是黑山共和国的国家域名,只不过它对个人开发申请,所以很多个人博主就用它作为自己的博客域名。

io很多开源项目常用io做顶级域名,它也是国家域名。因为io与计算机中的input/output缩写相同,和计算机的二机制10也很像,给人一种geek的感觉。相较于域名,io下的资源很多,更多选择。

DNS解析流程:

聊完了DNS的基本概念,我们再来聊一聊DNS的解析流程。当我们通过浏览器或者应用程序访问互联网时,都会先执行一遍DNS解析流程。

标准glibc提供了libresolvso2动态库,我们的应用程序就是用它进行域名解析(也叫resolving)的,它还提供了一个配置文件/etc/nsswitchconf来控制resolving行为,配置文件中最关键的是这行:

hosts:files dns myhostname。

它决定了resolving的顺序,默认是先查找hosts文件,如果没有匹配到,再进行DNS解析。默认的解析流程如下图:

上图主要描述了client端的解析流程,我们可以看到最主要的是第四步请求本地DNS服务器去执行resolving,它会根据本地DNS服务器配置,发送解析请求到递归解析服务器(稍后介绍什么是递归解析服务器),本地DNS服务器在/etc/resolvconf中配置。下面我们再来看看服务端的resolving流程:

我们分析一下解析流程:

客户端向本地DNS服务器(递归解析服务器)发出解析//toolchinaz域名的请求,本地dns服务器查看缓存,是否有缓存过//toolchinaz域名,如果有直接返回给客户端;如果没有执行下一步。

本地dns服务器向根域名服务器发送请求,查询顶级域的nameserver地址,拿到域名的IP后,再向 nameserver发送请求,获取chinaz域名的nameserver地址。

继续请求chinaz的nameserver,获取tool域名的地址,最终得到了//toolchinaz的IP,本地dns服务器把这个结果缓存起来,以供下次查询快速返回。

本地dns服务器把把结果返回给客户端,递归解析服务器vs权威域名服务器,我们在解析流程中发现两类DNS服务器,客户端直接访问的是递归解析服务器,它在整个解析过程中也最忙。它的查询步骤是递归的,从根域名服务器开始,一直询问到目标域名。

递归解析服务器通过请求一级一级的权威域名服务器,获得下一目标的地址,直到找到目标域名的权威域名服务器,简单来说:递归解析服务器是负责解析域名的,权威域名服务器,是负责存储域名记录的。

递归解析服务器一般由ISP提供,除此之外也有一些比较出名的公共递归解析服务器,如谷歌的8888,联通的114,BAT也都有推出公共递归解析服务器,但性能最好的应该还是你的ISP提供的,只是可能会有DNS劫持的问题。

缓存,由于整个解析过程非常复杂,所以DNS通过缓存技术来实现服务的鲁棒性。当递归nameserver解析过//toolchianaz域名后,再次收到//toolchinaz查询时,它不会再走一遍递归解析流程,而是把上一次解析结果的缓存直接返回。

并且它是分级缓存的,也就是说,当下次收到的是//wwwchinaz的查询时,由于这台递归解析服务器已经知道//chinaz的权威nameserver,所以它只需要再向//chinaz nameserver发送一个查询www的请求就可以了。

根域名服务器的地址是固定的,目前全球有13个根域名解析服务器,这13条记录持久化在递归解析服务器中:

为什么只有13个根域名服务器呢,不是应该越多越好来做负载均衡吗?之前说过DNS协议使用了UDP查询,由于UDP查询中能保证性能的最大长度是512字节,要让所有根域名服务器数据能包含在512字节的UDP包中,根服务器只能限制在13个,而且每个服务器要使用字母表中单字母名。

智能解析,就是当一个域名对应多个IP时,当你查询这个域名的IP,会返回离你最近的IP。由于国内不同运营商之间的带宽很低,所以电信用户访问联通的IP就是一个灾难,而智能DNS解析就能解决这个问题。

智能解析依赖EDNS协议,这是google起草的DNS扩展协议,修改比较简单,就是在DNS包里面添加origin client IP,这样nameserver就能根据client IP返回距离client比较近的server IP了。

国内最新支持EDNS的就是DNSPod了,DNSPod是国内比较流行的域名解析厂商,很多公司会把域名利用DNSPod加速。

一般我们要注册域名,都要需要找域名注册商,比如说我想注册//hello,那么我需要找域名注册商注册hello域名。的域名注册商不止一家,这些域名注册商也是从ICANN拿到的注册权,参见如何申请成为域名注册商。

域名注册商都会自建权威域名解析服务器,比如你在狗爹上申请一个下的二级域名,你并不需要搭建nameserver,直接在godaddy控制中心里管理你的域名指向就可以了,原因就是你新域名的权威域名服务器默认由域名注册商提供。

当然你也可以更换,比如从godaddy申请的境外域名,把权威域名服务器改成DNSPod,一方面加快国内解析速度,另一方面还能享受DNSPod提供的智能解析功能。

用bind搭建域名解析服务器,由于网上介绍bind搭建的文章实在太多了,我就不再赘述了,喜欢动手的朋友可以网上搜一搜搭建教程,一步步搭建一个本地的nameserver玩一玩。这里主要介绍一下bind的配置文件吧。

bind的配置文件分两部分,bind配置文件和zone配置文件,bind配置文件位于/etc/namedconf,它主要负责bind功能配置,如zone路径、日志、安全、主从等配置其中最主要的是添加zone的配置以及指定zone配置文件。

开启递归解析功能,这个如果是no,那么此bind服务只能做权威解析服务,当你的bind服务对外时,打开它会有安全风险,如何防御不当,会让你的nameserver被hacker用来做肉鸡zone的配置文件在bind配置文件中指定,下图是一份简单的zone配置:

zone的配置是nameserver的核心配置,它指定了DNS资源记录,如SOA、A、CNAME、AAAA等记录,各种记录的概念网上资料太多,我这里就不重复了。其中主要讲一下SOA和CNAME的作用。

SOA记录表示此域名的权威解析服务器地址。上文讲了权威解析服务器和递归解析服务器的差别,当所有递归解析服务器中有没你域名解析的缓存时,它们就会回源来请求此域名的SOA记录,也叫权威解析记录。

CNAME的概念很像别名,它的处理逻辑也如此。一个server执行resloving时,发现name是一个CNAME,它会转而查询这个CNAME的A记录。一般来说,能使用CNAME的地方都可以用A记录代替,它是让多个域名指向同一个IP的一种快捷手段。

这样当最低层的CNAME对应的IP换了之后,上层的CNAME不用做任何改动。就像我们代码中的硬编码,我们总会去掉这些硬编码,用一个变量来表示,这样当这个变量变化时,我们只需要修改一处。

配置完之后可以用named-checkconf和named-checkzone。两个命令来check我们的配置文件有没有问题,之后就可以启动bind服务了:$>service named start,Redirecting to/bin/systemctl restart namedservice。

我们用netstat-ntlp,来检查一下服务是否启动,53端口已启动,那么我们测试一下效果,用dig解析一下域名,使用127001作为递归解析服务器。

我们看到dig的结果跟我们配置文件中配置的一样是1234,DNS完成了它的使命,根据域名获取到IP。用DNS实现负载均衡,一个域名添加多条A记录,解析时使用轮询的方式返回随机一条,流量将会均匀分类到多个A记录。www IN A1234,www IN A1235。

其实每次DNS解析请求时,nameserver都会返回全部IP,如上面配置,它会把1234和1235都返回给client端。那么它是怎么实现RR的呢?nameserver只是每次返回的IP排序不同,客户端会把response里的第一个IP用来发请求。DNS负载均衡vs LVS专业负载均衡。

和LVS这种专业负载均衡工具相比,在DNS层做负载均衡有以下特点:实现非常简单,默认只能通过RR方式调度,DNS对后端服务不具备健康检查。

DNS故障恢复时间比较长(DNS服务之间有缓存),可负载的rs数量有限(受DNS response包大小限制),真实场景中,还需要根据需求选择相应的负载均衡策略子域授权。

我们从域下申请一个二级域名http://hello后,发展到某一天我们的公司扩大了,需要拆分两个事业部A和B,并且公司给他们都分配了三级域名ahello和bhello,域名结构如下图:

再发展一段时间,A部门和B部门内部业务太多,需要频繁的为新产品申请域名,这个时候他们就想搭建自己的namserver,并且需要上一级把相应的域名管理权交给自己,他们期望的结构如下:

注意第一阶段和第二阶段的区别:第一阶段,A部门想申请//ahello下的子域名,需要向上级申请,整个//ahello域的管理都在总公司;第二阶段,A部门先自己搭建nameserver,然后总公司把http://ahello域管理权转交给自建的nameserver。

A部门自建nameserver,并且在zone配置文件中指定//ahello的权威解析服务器为自己的nameserver地址,总公司在nameserver上增加一条NS记录,把//ahello域授权给A部门的nameserver。

我们在用bind搭建域名解析服务器里讲过,只要在zone配置文件里指定SOA记录就好:@IN SOA nsahello adminahello(……)。

在http://hello域的nameserver上添加一条NS记录:ahello IN NS nsahellonsahello IN A xxxxxxxx(自建nameserver的IP)。

这样当解析http://xxahello域名时,//hello nameserver发现配置中有NS记录,就会继续递归向下解析,DNS调试工具,OPS常用的DNS调试工具有:host,nslookup,dig。

这三个命令都属于bind-utils包,也就是bind工具集,它们的使用复杂度、功能依次递增。关于它们的使用,man手册和网上有太多教程。DNS放大攻击属于DoS攻击的一种,是通过大量流量占满目标机带宽,使得目标机对正常用户的请求拒绝连接从而挂掉。

思路正常的流量攻击,hack机向目标机建立大量request-response,但这样存在的问题是需要大量的hack机器。因为服务器一般的带宽远大于家用网络,如果我们自己的家用机用来做hack机器,还没等目标机的带宽占满,我们的带宽早超载了。

原理DNS递归解析的流程比较特殊,我们可以通过几个字节的query请求,换来几百甚至几千字节的resolving应答(流量放大),并且大部分服务器不会对DNS服务器做防御。

那么hacker们只要可以伪装DNS query包的source IP,从而让DNS服务器发送大量的response到目标机,就可以实现DoS攻击。

但一般常用的DNS服务器都会对攻击请求做过滤,所以找DNS服务器漏洞也是一个问题。详细的放大攻击方法自行google。

首先,客户端发出DNS 请求翻译IP 地址或主机名。DNS 服务器在收到客户机的请求后:

(1)检查DNS 服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;

(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;

(3)若没有查到,则将请求发给根域DNS 服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS 服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。

(4)若没有找到,则返回错误信息。

关于这个问题,你看懂了吗?看不懂也没事,可以去黑马程序员学习,慢慢的就懂了哦!

计算机局域网中的双绞线可分为非屏蔽双绞线)UTP*和屏蔽双绞线)STP*两大类。DNS是计算机域名系统或域名解析服务器(Domain Name System 或Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 为什么电脑无法解析dns?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情