DNS规范化——Series2:DNS协议与业界实现

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: DNS规范化——Series2:DNS协议与业界实现

引言

上一期我们基本上将客户端的查询行为及其特性尽可能地梳理了一次,而本期我们关注DNS服务器部分。由于DNS协议本身已经有相当详细的分析了,本文将不再赘述,若感兴趣可直接在Internet搜索。推荐关注DNS RFC,可参考文后资料了解详情(1)。

与DNS协议工作

多数DNS服务提供商有各自的DNS服务应用来提供名称解析功能,一般来说此类应用最主要的是完成标准DNS协议,并提供较好的性能、完善的日志服务以及特殊的GEO解析等高级功能。针对DNS服务,各家产品的实现虽各不相同,但总体解析的过程是一定符合协议标准的。下面分别看一下Windows的DNS服务和Linux的Bind应用。

Windows DNS server服务

DNS标准协议定义的两种查询方式在Windows的DNS server服务中支持得很好。自Windows NT开始,DNS server总是一个基础服务带在server的发行版中,历经多次升级,功能相当全面。由于与Windows的AD完全整合,Windows DNS server功能复杂,适合内网使用。其功能简单罗列如下:
图1:Windows DNS server功能展示.png

图1:Windows DNS server功能展示

Linux Bind应用

在Linux上Bind(Berkeley Internet Name Domain)应用提供了完善的DNS功能,其功能相对简单,但性能较好,我们简单将其作为本地DNS服务学习和研究。Bind是实现DNS协议的一种开放源码软件,已经成为使用最广泛的DNS服务器软件,它包含对域名的查询和响应所需的所有软件。与Windows DNS类似,BIND软件包包括以下主要的几个部分:

  • DNS服务器:这是一个叫做named的程序,代表name daemon的简写。它根据DNS协议标准的规定,响应收到的查询。
  • DNS解析库(resolver library):一个解析器是一个程序,通过发送请求到合适的服务器并且对服务器的响应做出合适的回应,来解析对一个域名的查询。一个解析库是程序组件的集合,可以在开发其它程序时使用,为这些程序提供域名解析的功能。

DNS服务器配置建议

DNS查询行为配置细节

Iterative Query迭代查询

迭代查询是DNS名称解析的基础,一般情况下,DNS server使用迭代查询,根据root-hints server的响应一级一级得到最终结果。与迭代查询相关的配置项如下:

Windows:
root-hints server配置: C:\Windows\System32\dns\cache.dns
NoRecursion开关: dnscmd /config /NoRecursion
root zone配置: Create a .(dot) zone

Linux Bind:
默认使用Iterative Query,除非在named.conf中配置forwarders

注:root zone的创建将会使DNS服务拒绝所有转发查询的请求,对于一些仅提供本域名解析功能的服务器来说,会是一个比较安全的做法。
另外,参与查询的过程中,Windows DNS server有隐含的一个拒绝查询列表,配置在注册表的GlobalQueryBlockList下,所有匹配的名称(不包含domain name),会返回REFUSED响应。默认EnableGlobalQueryBlockList为true。

Recursive Query递归查询

递归查询相对来说比较简单,类似客户端的行为,将请求发送给上游DNS Forwarder,期望收到直接的查询结果。与递归查询相关的配置项如下:

Windows:
Recursion配置: 
dnscmd /config /RecursionRetry
dnscmd /config /RecursionTimeout
Forward配置: 
dnscmd /config /EnableForwarderReordering
dnscmd /config /ForwardDelegations
dnscmd /config /ForwardingTimeout

Linux Bind:
forwarders
forward (first | only ) 
first设置优先使用forwarders DNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
only设置只使用forwarders DNS服务器做域名解析,如果查询不到则返回DNS客户端查询失败。

结合迭代查询,推荐做法是明确DNS服务的目的,例如:

  • 仅供内部解析使用推荐创建root zone,避免内部查询的请求外泄。
  • 内部解析外部,使用专门的DNS服务器做转发(Forwarder)指向迭代查询DNS服务器,同时根据需要考虑是否选择Forwarder first or only等选项,使用专门的DNS服务器做递归查询,避免上级DNS服务异常等问题。
  • 提供互联网客户端获取外部域名解析的DNS服务器上,关注两种情形。一种提供Authoritative Answer,建议也是创建root zone,避免额外的查询服务。一种是类似ISP提供查询转发,需要关注DNS cache缓存的配置。
DNS cache配置

对于DNS缓存来说,最重要的一项就是DNS资源记录(Resource Record)的TTL。影响TTL的因素很多,一般默认在DNS记录创建的时候,我们必须指定对应记录的TTL时间,或者使用对应DNS zone的默认值。当我们配置转发器(Forwarder)时,该服务器作为非权威DNS服务需要关注缓存的配置。Windows DNS server和Linux Bind各自有不同的配置项,具体如下:

Windows:
Possitive cache: dnscmd /config /MaxCacheTtl
Negative cache: dnscmd /config /MaxNegativeCacheTtl
cache size: dnscmd /config /MaxCacheSize

Linux Bind:
max-cache-ttl
max-ncache-ttl
max-cache-size
lame-ttl

注:在配置转发器(Forwarder)的时候,要特别注意缓存时间,因为该服务器所有可以提供解析的记录基本都在缓存中,如果缓存更新不及时、或者造成Lame Delegation,那可能会带来查询异常等问题。例如,在2012之前的Windows DNS server上,默认的DNS Max Cache TTL为172800s,错误的配置可能会带来意外的解析问题。

DNS响应

现今互联网上DNS已经是流量管理的重要手段,智能流量调度等功能最开始是从修改DNS响应开始。通过对DNS响应结果的调整,可以根据地理位置来负载不同地域的客户端访问请求,或者是智能地判断服务器DNS请求的数量来估计负载情况,进而进行负载均衡等操作。基础版的DNS服务也有相关的配置项可供选择:

Windows:
Round robin: dnscmd /config /RoundRobin 
Netmask Ordering: dnscmd /config /LocalNetPriority
DNS Policies相关内容可参考文后资料了解详情(2)

Linux Bind:
response-policy相关内容可参考文后资料了解详情(3)
rrset-order
sortlist

由于客户端一般总是使用第一个A,因此,调整响应结果的顺序可以从一定程度上达到流量调整的目的。

EDNS支持

Windows:
dnscmd /config /EnableEDnsProbes

Linux Bind:
默认bind 9.10以上版本支持Edns0

EDNS协议按标准来说就是在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。EDNS标准协议最著名的功能是支持超过512字节的udp消息,即Edns0。没有Edns0,DNS使用tcp来完成超过512字节的响应接收。无论是提供解析结果的DNS服务器,还是中间DNS转发器(Forwarder)服务,都推荐关注DNS服务器上是否开启EDNS,以及检查EDNS是否符合规范。EDNS(0)的RFC文档(4)以及去年国际知名厂商发起的DNS Flag Day活动(5)、Client subnet in DNS requests草案(6)等相关信息,可参考文后资料了解详情。

DNSSEC支持

Windows:
dnscmd /config /EnableDnsSec

Linux Bind:
named.conf 配置:
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

DNSSEC协议在DNS服务上实现,是通过查询NSEC等Resource Record,来验证DNS响应是否经过篡改。如果验证通过,则将解析结果经过正常的DNS Recursive Query Response返回给客户端。目前应该还没有特别多的DNSSEC的需求,但是考虑到已经有一部分国外的网站域名已经开启了DNSSEC,我们可能需要对此进行了解。当然,在发生DNSSEC查询异常的情况下可以考虑在DNS转发器(Forwarder)上禁用DNSSEC来回退到普通递归、迭代查询。注:DNS客户端不参与DNSSEC的验证过程。DNSSEC如何工作可参考文后资料进行参考(7)。
以上就是本次DNS规范化的全部内容,不过想要透彻地理解各产品,最好的办法是阅读相应的产品文档,可参考文后资料了解详情(8),(9),希望能够对读者有所帮助。

参考资料:
(1)DNS RFC:https://www.ietf.org/rfc/rfc1035.txt
(2)Windows DNS Policies Overview:https://docs.microsoft.com/en-us/windows-server/networking/dns/deploy/dns-policies-overview
(3)DNS Response Policy Zones:https://dnsrpz.info/
(4)EDNS(0)的RFC文档:https://tools.ietf.org/html/rfc6891
(5)去年国际知名厂商发起的一个比较著名的活动DNS Flag Day:https://dnsflagday.net/2019/
(6)Client subnet in DNS requests草案:https://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-01
(7)DNSSEC如何工作:https://www.cloudflare.com/dns/dnssec/how-dnssec-works/
(8)Windows产品文档:https://docs.microsoft.com/en-us/windows-server/networking/dns/dns-top
(9)Linux Bind产品文档:https://docs.freebsd.org/doc/8.2-RELEASE/usr/share/doc/bind9/arm/Bv9ARM.html

作者:陈鸽

阿里云智能GTS-SRE团队技术专家

曾就职于微软负责Windows操作系统网络协议栈及网络产品技术支持相关工作,了解各产品标准协议例如TCPIP、DNS等。现就职于阿里云智能GTS-SRE团队,负责专有云网络相关产品(SLB/VPC等)的高可用、高可靠运维。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。

image.png

相关文章
|
2月前
|
XML 监控 网络协议
云深处绝影四足机器人协议学习解析
本文详细介绍并解析了云深处绝影X20四足机器人的通信协议,包括TCP服务端端口号、基于Service的请求/响应通信机制、通信帧结构、消息类型、常见的通信示例如获取状态和导航请求,以及运动控制的参数和命令。文中还提出了对协议中某些未明确说明或可能存在的问题的疑惑。
30 0
云深处绝影四足机器人协议学习解析
|
12天前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
48 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
2月前
|
缓存 网络协议 安全
【网络攻防战】DNS协议的致命弱点:如何利用它们发动悄无声息的网络攻击?
【8月更文挑战第26天】DNS(域名系统)是互联网的关键组件,用于将域名转换为IP地址。然而,DNS协议存在安全漏洞,包括缺乏身份验证机制、缓存中毒风险及放大攻击的可能性。通过具体案例,如DNS缓存中毒和DNS放大攻击,攻击者能够误导用户访问恶意站点或对目标服务器实施DDoS攻击。为了防范这些威胁,可以采用DNSSEC实现数字签名验证、利用加密的DNS服务(如DoH或DoT)、限制DNS服务器响应以及及时更新DNS软件等措施。理解并应对DNS的安全挑战对于确保网络环境的安全至关重要。
74 2
|
3月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
73 4
|
7天前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
14 0
深入解析 http 协议
|
17天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
48 3
|
22天前
|
消息中间件 安全 Kafka
Kafka支持SSL/TLS协议技术深度解析
SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。这些协议在传输层对网络连接进行加密,确保数据在传输过程中不被窃取或篡改。
41 0
|
2月前
|
域名解析 监控 网络协议
利用DNS协议的弱点
【8月更文挑战第17天】
41 1
|
2月前
|
安全 数据库连接 数据库
Python深度解析:上下文协议设计与应用技巧
在Python编程中,资源管理是一个常见且重要的问题。无论是文件操作、网络连接还是数据库事务,都需要确保资源在使用后能够正确地释放或恢复到初始状态。Python通过上下文管理器提供了一种优雅的方式来处理资源的获取与释放,使得代码更加简洁、安全。
|
2月前
|
域名解析 缓存 网络协议
揭秘DNS协议:从'http://www.example.com'到IP地址的奇幻旅程,你不可不知的互联网幕后英雄!
【8月更文挑战第4天】在互联网的广袤空间里,每台设备都有唯一的IP地址,但记忆这些数字组合并不直观。因此,DNS(域名系统)作为关键桥梁出现,将易记的域名转换为IP地址。DNS协议工作于应用层,支持用户通过域名访问资源。DNS系统包含多级服务器,从根服务器到权威服务器,共同完成域名解析。查询过程始于客户端,经过递归或迭代查询,最终由权威服务器返回IP地址,使浏览器能加载目标网页。
87 12

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
    下一篇
    无影云桌面