1. DNS故障诊断的常用工具或命令
诊断DNS解析故障的四个常用命令工具:
①unbound-checkconf:用于检查unbound服务器配置文件的语法错误
②unbound-control:是一个用于控制远程Unbound服务器的工具。
③nscd(name service cache daemon,名称服务缓存管理器):一种专门对DNS缓存进行管理的工具(RHEL7中默认未安装,可使用yum -y install nscd命令安装)。
④dig(Domain Information Groper,域信息搜索器):一种用于询问DNS服务器的命令工具,他执行DNS搜索,显示从接收请求的域名服务器返回的答复。
DNS故障诊断的常用工具或命令
dig命令的格式:
dig [@server] [type] [name] [-x addr] [-p port#]
其中:
server——待查询DNS服务器的名称或IP地址,若缺省此项则根据本机/etc/resolv.conf文件中列举的DNS服务器做出应答。
name——指定要查询的域名。
type——指定要查询的记录类型,如A、ANY、MX、NS、SOA等类型,默认值为A。
-b address——指定通过哪块网卡(IP地址)进行查询,适用于多网卡环境下指定网卡。
-x address——表示要对指定的IP地址进行反向查询。
-p port——指定DNS服务器所使用的端口.用于当服务器使用非标准DNS端口的状况。
dig命令的输出信息包括以下内容:
●第一行:显示当前dig的版本和查询内容。
●第三行:全局设置选项为直接在窗口显示结果。
●第四行到第六行:显示查询结果的信息。
●QUESTION SECTION(查询段),显示查询的条件和对象。
●ANSWER SECTION(回应段):显示从服务器上面得到的回答 202.132.10.161。
●最后面是其它报告信息,如查询花费(微秒)、查询服务器的IP地址、查询的时间以及回应数据包的大小。
2. DNS故障点出错的原因
其主要的故障原因有:
①客户端指派了不正确的DNS服务器的IP地址;
②防火墙规则阻止了53号端口的DNS流量;
③Unbound服务器配置文件出错;
④DNS缓存滞后:当计算机访问某个网站或解析域名时,该解析条目会保存在计算机的DNS缓存中,但有时候会出现DNS服务器中更改了IP地址,而用户本地的DNS缓存信息没有改变,这样就会出现DNS解析故障。
⑤DNS劫持:又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址(钓鱼网站),从而实现窃取资料或者破坏原有正常服务的目的。
DNS劫持故障的排除方法之一是将当前被劫持的DNS服务器更换为其他公共DNS服务器,常用公共DNS服务器及其IP地址见下表:
名称 | DNS服务器IP地址 | 名称 | DNS服务器IP地址 |
DNSPod DNS+ | 119.29.29.29、182.254.116.116 | 114 DNS | 114.114.114.114、114.114.115.115 |
阿里 AliDNS | 223.5.5.5、223.6.6.6 | Google DNS | 8.8.8.8、8.8.4.4 |
V2EX DNS | 199.91.73.222、78.79.131.110 | OpenDNS | 208.67.222.222、208.67.220.220 |
CNNIC SDNS | 1.2.4.8、210.2.4.8 | OpenerDNS | 42.120.21.30 |
DNS派 | 101.226.4.6、218.30.118.6 | 百度 BaiduDNS | 180.76.76.76 |
⑥DNS污染:是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器给查询者返回虚假结果。一些被禁止访问的网站基本是通过DNS污染来实现的。对于DNS污染,通常可以使用各种SSH加密代理,在加密代理里进行远程DNS解析或者使用VPN上网的方法解决,但这大多需要购买付费的VPN或SSH等,也可以通过修改主机中hosts文件的方法,手动设置域名对应的正确IP地址来排除故障。
3. DNS缓存滞后的故障排除方法
在Linux系统下DNS缓存滞后的故障排除
步骤1:查看初始状态的Unbound服务器的DNS缓存数据。
[root@dns2 ~]# unbound-control dump_cache
START_RRSET_CACHE
END_RRSET_CACHE
START_MSG_CACHE
END_MSG_C
步骤2:在客户端上,使用dig命令向纯缓存DNS服务器请求解析两条资源记录。
[root@client ~]# dig @dns2.dyzx.edu A www.dyzx.edu …… www.dyzx.edu. 3600 IN A 192.168.8.3 …… [root@client ~]# dig @dns2.dyzx.edu cname ftp.dyzx.edu …… ftp.dyzx.edu. 3600 IN CNAME www.dyzx.edu. …… |
步骤3:在缓存DNS服务器端,显示查询后DNS缓存信息。将当前Unbound服务器的DNS缓存数据转储到指定的文件中
[root@dns2 ~]# unbound-control dump_cache START_RRSET_CACHE ;rrset 3500 1 0 8 3 ftp.dyzx.edu. 3500 IN CNAME www.dyzx.edu. ;rrset 3363 1 0 8 3 www.dyzx.edu. 3363 IN A 192.168.8.3 END_RRSET_CACHE START_MSG_CACHE msg ftp.dyzx.edu. IN CNAME 33152 1 3500 3 1 0 0 ftp.dyzx.edu. IN CNAME 0 msg www.dyzx.edu. IN A 33152 1 3363 3 1 0 0 www.dyzx.edu. IN A 0 END_MSG_CACHE EOF |
步骤4:在服务器端,对DNS缓存进行整理,删除缓存中陈旧或错误的资源记录→将整理后DNS缓存信息转储到指定文本文件,以备后用→重启DNS服务后系统会自动清除所有DNS缓存信息。
[root@dns2 ~]# unbound-control flush www.dyzx.edu //清除缓存中指定的资源记录 ok [root@dns2 ~]# unbound-control flush_zone dyzx.edu //清除缓存中指定区域的全部资源记录 ok removed 3 rrsets, 3 messages and 0 key entries [root@dns2 ~]# unbound-control dump_cache > /tmp/dns_cache.txt [root@dns2 ~]# systemctl restart unbound.service [root@dns2 ~]# unbound-control dump_cache START_RRSET_CACHE END_RRSET_CACHE START_MSG_CACHE END_MSG_CACHE EOF |
步骤5:加载Unbound缓存数据,使保存的DNS缓存数据回填到缓存中→查看回填后的信息。
//从文件读取数据以填充缓存 [root@dns2 ~]# unbound-control load_cache </tmp/dns_cache.txt [root@dns2 ~]# unbound-control dump_cache |
提示:
①在Linux下还可以通过安装nscd服务,并使用“nscd -i hosts”命令或重新启动nscd服务命令“systemctl restart nscd”来清除DNS缓存。
②在Windows客户端中DNS缓存滞后的故障,可通过刷新DNS缓存来排除,其刷新过程为:同时按下【Windows徽标+R】组合键→在打开的【运行】对话框中输入“cmd”命令→在打开的命令行窗口中输入“ipconfig /displaydns”命令查看本机的DNS缓存信息→输入“ipconfig /flushdns”命令刷新DNS缓存信息。
③Windows下的DNS缓存是由后台进程控制的,可以在【控制面板】→【服务】中将【DNS Client】禁用,从而取消Windows的DNS缓存功能,此后的查询请求都将直接查询DNS服务器而忽略本机的DNS缓存了。