DNS 基础知识

在排查一些DNS 问题时,顺便学了些DNS的基础知识,记录一下。

什么是根、顶级、权威、本地域名服务?

域名解析过程涉及4个DNS服务器,分别如下:

分类 作用
根DNS服务器 英文:Root nameserver。本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。
顶级域名服务器 英文:Tld nameserver。负责管理在该顶级域名服务器下注册的二级域名,例如 www.example.com,.com则是顶级域名服务器,在向它查询时,可以返回一级域名“example.com”所在的权威域名服务器地址。
权威域名服务器 英文:authoritative nameserver。在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系,例如云解析DNS。
本地域名服务器 英文:DNS resolver或Local DNS。本地域名服务器是响应来自客户端的递归请求,并最终跟踪直到获取到解析结果的DNS服务器。例如用户本机自动分配的DNS、运营商ISP分配的DNS、谷歌/114公共DNS等。

什么是 FQDN(Fully qualified domain name)?

FQDN是完整域名。以.结束的域名是FQDN,例如example.com.是FQDN,但example.com不是。
对FQDN,操作系统会直接查询DNS server。那么非FQDN呢?需要做一番操作,使其变为 FQDN之后发起查询。接着就用到search和ndots了。

什么是search和ndots?

查看一下 /etc/resolv.conf 文件,大概内容如下:

1
2
3
nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

要查一个域名,例如查找 pod-1.namespace-1,会拼接pod-1.namespace-1.svc.cluster.local 再进行查询。

参数 描述
nameserver 定义DNS服务器的IP地址。
search 设置域名的查找后缀规则,查找配置越多,说明域名解析查找匹配次数越多。ACK集群匹配有kube-system.svc.cluster.local、svc.cluster.local、cluster.local3个后缀,最多进行8次查询才能得到正确解析结果,因为集群里面进行IPV4和IPV6查询各四次。
options 定义域名解析配置文件选项,支持多个KV值。例如该参数设置成ndots:5,说明如果访问的域名字符串内的点字符数量超过ndots值,则认为是完整域名,并被直接解析;如果不足ndots值,则追加search段后缀再进行查询。

rcode 表示什么意思?

DNS返回值。rcode枚举值如下:
Rcode=0(无错误条件)
Rcode=3(名称错误)、1(格式错误)、2(服务器故障)、4(未实现)或5(拒绝)查询没有有效答案。

DNS日志格式参考

1
2
3
4
5
6
7
8
9
10
11
{
"src_port": "53",
"dst_addr": "10.10.11.12",
"dst_port": "54017",
"transport": "UDP",
"dns_msg_id": "12095",
"query_type": "AAAA",
"dns_msg_flags": "QR RD",
"query_name": "demo.example.com.",
"rcode": "2"
}

query_type什么意思?

query_type是解析记录类型,就是常见的A记录、CNAME记录等类型。

解析记录类型 场景
A记录 添加 A 记录可实现将域名指向 IPv4 地址。
CNAME记录 当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录,最常用到 CNAME 的场景包括做 CDN、企业邮箱、全局流量管理等。
MX记录 设置邮箱时,让邮箱能收到邮件,就需要添加 MX 记录。MX全称为mail exchanger,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当有人发邮件给“abc@example.com”时,系统将对“example.com”进行DNS中的MX记录解析。如果MX记录存在,系统就根据MX记录的优先级,将邮件转发到与该MX相应的邮件服务器上。
AAAA记录 当预期是实现访问者通过 IPv6 地址访问网站,可以使用 AAAA 记录实现。
TXT记录 如果希望对域名进行标识和说明,可以使用 TXT 记录, TXT 记录多用来做 SPF 记录(反垃圾邮件)。
URL显性/隐性转发 将一个域名指向另外一个已经存在的站点时,需要添加 URL 记录。
NS记录 如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
SRV记录 SRV 记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。
CAA记录 CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。域名设置 CAA 记录,使网站所有者,可授权指定CA机构为自己的域名颁发证书,以防止HTTPS证书错误签发,从而提高网站安全性。
PTR记录 反向解析则是指将IP地址映射到域名上,需要您与IDC机房或主机服务商联系实现。

dns_msg_flags什么意思?

DNS信息Flags,有如下枚举值:

●QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。
●Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。
●AA(Authoritative):授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
●TC(Truncated):表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。
●RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
●RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
●Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
●rcode(Reply code):返回码字段,表示响应的差错状态。当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

作者

David

发布于

2023-11-24

更新于

2023-11-25

许可协议

评论

:D 一言句子获取中...