DNS 杂谈

时间:2024-07-11 17:09:24

一、定义

DNS(Domain Name System),域名系统,该系统记录域名和Ip地址的相互映射关系。用户访问互联网时,通过域名地址得到对应的IP地址,这个过程称为域名解析。DNS运行于UDP协议之上,使用的端口为53。

递归查询:客户端只发出一次请求,直到服务器响应该请求,并返回结果到客户端。客户端向本地域名服务器的查询一般是递归查询。

迭代查询:服务器发出多次请求,层层请求后知道查询到结果并返回。本地域名服务器向域名系统中各级域名服务器的请求查询是迭代查询。

若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知本地域名服务器另对一个可能查询到该DNS解析结果的DNS服务器IP,本地域名服务器再次向这个DNS服务器发起解析请求,层层问询,直到查询到应的结果为止。

1、常见的记录类型

A(Address Mapping records)指示了对应名称的IPv4地址, A记录用来将域名转换为ip地址。

AAAA:指示对应名称的IPv6地址。

SOA(Start Of Authority): 起始授权记录,一个区域解析库有且仅能有一个SOA记录,而且必须为解析库的第一条记录。

NS(Name Server):记录当前区域中的某个DNS服务器的名字,一个区域可有多个NS记录。

PTR(Reverse-lookup Pointer records):反向查找记录,是一种 DNS 记录类型,用于将 IP 地址映射到对应的主机名。这与 A 记录和 AAAA 记录的作用相反,后者是将主机名映射到 IP 地址

CNAME(Canonical Name):域名的别名记录,用于记录某个主机域名的别名。

NAME                    TYPE   VALUE
--------------------------------------------------
bar.example.com.        CNAME  foo.example.com.
foo.example.com.        A      192.0.2.23

当用户查询 bar.example.com 的时候,DNS Server 实际返回的是 foo.example.com 的 IP 地址。

MX(Mail Exchanger records):为某个DNS域名指定邮件交换的服务器。

TXT(text records):包含任意非格式化的文本信息。

二、常用linux命令

1、ping

最常用的通常用于检查网络连通性,但也会执行 DNS 解析以获取目标主机的 IP 地址。

ping example.com

2、 nslookup

一个用于查询 DNS 记录的命令行工具

查询主机名的 IP 地址:nslookup example.com

指定 DNS 服务器进行查询:nslookup example.com 8.8.8.8

3、 dig

DNS 查询工具,提供更多的查询选项和详细信息,下面列举一个最常见的 dig www.baidu.com

参考:

   反演 百度DNS解析规则 | ESON

DNS 服务器在响应查询时,需要查询自己的数据库,数据库中的条目被称为 资源记录(Resource Record,RR) 。RR 提供了主机名到 IP 地址的映射。RR 是一个包含了Name, Value, Type, TTL四个字段的四元组。dig结果的每一行解释

//dig 的版本信息和查询的域名。

; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.baidu.com

//表示全局选项和命令行参数
;; global options: +cmd

//表明收到了响应。
;; Got answer:

//这是响应头信息,opcode: QUERY:表示这是一个查询操作

//status: NOERROR:表示查询成功,无错误

//id: 46143:查询的 ID
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39913

//标志和计数。
//qr:查询响应;rd:递归查询已请求;ra:递归查询已可用。
//QUERY: 查询问题部分的计数;ANSWER: 回答部分的计数;AUTHORITY: 权威部分的计数; ADDITIONAL: 附加部分的计数。
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

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

//查询问题部分,显示了所请求的信息,查询类型是 A 记录
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

//回答部分,显示了查询的结果

;; ANSWER SECTION:
www.baidu.com.          492     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       21      IN      CNAME   www.wshifen.com.
www.wshifen.com.        261     IN      A       45.113.192.102
www.wshifen.com.        261     IN      A       45.113.192.101

//查询耗时 50 毫秒

;; Query time: 1 msec
//使用的 DNS 服务器是 127.0.0.1,端口号为 53
;; SERVER: 127.0.0.1#53(127.0.0.1)

//查询时间
;; WHEN: Tue Jul 09 16:37:56 CST 2024

//接收的消息大小为 127字节
;; MSG SIZE  rcvd: 127

三、DNS服务器方式

1、BGP + Anycast

        Anycast是一种网络通信方法,其中同一个 IP 地址被分配给多个地理位置不同的服务器节点。用户的请求会自动路由到距离最近或者最有效的服务器节点,这样可以减少延迟,提高访问速度和可靠性。

        分配相同的 IP 地址给多个服务器节点并通过 Anycast 实现请求的路由,主要是通过配置网络路由协议,特别是边界网关协议(BGP)。

参考:千亿级HttpDNS服务是怎样炼成的-腾讯云开发者社区-腾讯云

2、Localdns + dnsmasp+DPDK

        /etc/resolv.conf 文件是系统DNS解析的关键配置文件,它指定了系统在进行域名解析时应该使用的DNS服务器。正确配置这个文件对于确保系统的网络连接和互联网访问至关重要。

        dnsmasq支持解决DNS,DHCP和router等多方面问题,一个常见的认知dnsmasq是一个本地dns(/etc/resolv.conf)的加强版

参考:

DPDK开发之基于UDP的DNS服务器_dpdk千万级流量并发的dns处理 ****-****博客

3、Nacos-DNS

服务提供者将自己的服务实例信息(如IP地址、端口号、健康状态等)注册到Nacos注册中心。

当服务消费者(Consumer)需要调用某个服务时,会通过服务的名称发送DNS查询请求到Nacos DNS服务器。

Nacos DNS服务器接收到DNS查询请求后,会向Nacos注册中心查询该服务名称对应的所有可用的IP地址列表。

参考:

微服务架构中基于DNS的服务注册与发现