Akemi

DNS排查

2025/03/31

解析查找顺序

默认情况下,使用host、dig、nslookup时,会默认使用dns进行解析

但是当使用ping、curl时,会优先使用/etc/hosts中的解析

这是因为**/etc/nsswitch.conf**这个文件中定义了查找的顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/etc/nsswitch.conf

# In order of likelihood of use to accelerate lookup.
shadow: files
# hosts: files dns myhostname ←默认优先级最高的是file
hosts: dns files myhostname # 使其优先使用dns第一优先级

aliases: files
ethers: files
gshadow: files
# Allow initgroups to default to the setting for group.
# initgroups: files
networks: files dns
protocols: files
publickey: files
rpc: files

使用getent工具可以快速进行解析顺序的测试:
getent hosts www.wangsheng.com
1.1.1.1 www.wangsheng.com

使用dig命令

dig命令 -t参数可以指定查找记录的类型,默认查找A记录

dig命令@ 指定dns服务器地址

dig命令 +trace选项,逐步解析,同tracert

dns默认使用53udp端口,但建议udp与tcp都放行,否则会遇到报错,因为如果响应超过 512 字节,DNS 服务器会返回一个截断标志(TC 位),客户端需改用 TCP 重新发起请求。

dig返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
dig www.wangsheng.com

; <<>> DiG 9.16.23-RH <<>> www.wangsheng.com
;; global options: +cmd
;; Got answer:

# 请求的概况,请求数量1回答数量1,状态NOERROR,AUTHORITY表示权威服务器NS数量,ADDITIONAL表示是否附加记录
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27017
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232

# 查找类型
;; QUESTION SECTION:
;www.wangsheng.com. IN A

# 回答记录
;; ANSWER SECTION:
www.wangsheng.com. 3600 IN A 1.1.1.1

# 查找的信息
;; Query time: 2 msec
;; SERVER: 10.163.2.100#53(10.163.2.100)
;; WHEN: Mon Mar 31 03:28:28 EDT 2025
;; MSG SIZE rcvd: 62

# 返回状态:
NOERROR -- 正常
SERVFAIL -- 查询遇到问题(可能是DNSSEC选项)
NXDOMAIN -- 查询无结果
REFUSED -- 查询拒绝(可能网段被拒绝)

# flags:
aa -- 表示是权威服务器
ra -- 表示支持递归查询
qr -- 表示是一个响应
tc -- 响应过长被截断
rd -- 客户端请求递归查询
ad -- 表示通过DNSSEC
cd -- 表示禁用DNSSEC

常见问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1.DNS轮询:
将一个域名解析为3个不同的IP
以round-robin的方式来进行轮询
如果其中一个IP挂了,就会导致访问有1/3无法正常进行连接

2.缺少反向解析记录:
很多网络服务会使用DNS传入的连接来进行反向查找
比如sshd会对客户端IP进行查找,如果没有反向解析记录就会很慢
比如邮件服务器

3.通过通配符扩大相应范围:
仅仅给一个成功的解析,说明DNS服务器没挂
wangsheng.com IN A 10.200.2.100

*.wangsheng.com IN A 10.200.2.100

4.出现两次域名
是因为结尾没有加点(.)
比如www.wangsheng.com
会被解析为www.wang.sheng.com.sheng.com.

5.CNAME孤儿/循环
孤儿--没有目标别名,会返回NXDOMAIN
循环--互相指向别名,会返回NOERROR

6.同DNS-zone内多主NS
在DNS服务器master-slave结构中
如果发生脑裂,就会出现双主
此时如果解析,就会返回多个结果

CATALOG
  1. 1. 解析查找顺序
  2. 2. 使用dig命令
  3. 3. 常见问题