EDNS

 随着业务的复杂化和多样化,RFC1035中定义的DNS消息格式和它支持的消息内容已经不足以满足一些DNS服务器的需求,于是,RFC2671中提出了一种扩展DNS机制EDNS(Extension Mechanisms for DNS),并在其中推荐了一种传递包大小的EDNS0。我将EDNS0中的一些关键内容总结在这篇文章中,以便日后翻阅,同时希望能够帮助到像我这样迷茫过的、探寻EDNS很久才知道其概貌的新人。

,什么是EDNS?

     EDNS就是在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。

需要注意的是,像DNS服务器这样一个大型且广泛应用的系统软件,新增加扩展协议的时候一定要考虑到向后兼容性(backward compatibility),即你增加了你这个特性的消息传输给未支持该特性的服务器时,后者依然能正确处理。

,为什么要有EDNS?

      RFC2671中指出EDNS被提出来的几个理由:

1)DNS协议头部的第二个16字节中都已经被用的差不多了,需要添加新的返回类型(RCODE)和标记(FLAGS)来支持其他需求;

2)只为标示domain类型的标签分配了两位,现在已经用掉了两位(00标示字符串类型,11表示压缩类型),后面如果有更多的标签类型则无法支持;

3)当初DNS协议中设计的用UDP包传输时包大小限制为512字节,现在很多主机已经具备重组大数据包的能力,所以要有一种机制来允许DNS请求方通知DNS服务器让其返回大包;

以后我们会看到,DNSSEC机制和edns-client-subnet机制等都需要有EDNS的支持。

,EDNS的内容是什么?

        怎样在DNS消息协议的基础上再增加一些字段呢?为了保持向后兼容性,更改已有的DNS协议格式是不可能的,所以只能在DNS协议的数据部分中做文章。

所以,EDNS中引入了一种新的伪资源记录OPT(Resource Record),之所以叫做伪资源记录是因为它不包含任何DNS数据,OPT RR不能被cache、不能被转发、不能被存储在zone文件中。OPT被放在DNS通信双方(requestor和responsor)DNS消息的Additional data区域中。

1,OPT伪资源记录中的内容有哪些呢?

OPT pseudo-RR中的内容包含固定部分和可变部分。它的结构如下:

图1 OPT内容

图1中最下面的RDATA是可变部分,其余的部分都是固定部分:Name字段目前为空;TYPE字段是OPT RR的类型编号,IANA为其分配的是41(0x29);TTL中是扩展的DNS消息头部,下面会有介绍;RDLEN是可变部分RDATA的长度;RDATA是KV类型的可变部分。

原来的TTL字段被用来存储扩展消息头部中的RCODE和flags,它的格式如下:

图2 extended RCODE and flags Detail

图2中高位8个bit是扩展RCODE(返回状态码),这8个bit加上DNS头部的4bit总共有12bit(8bit在高位),这样就可以表示更多的返回类型;

VERSOION字段表示EDNS的版本(EDNS根据支持不同的扩展内容会有很多版本),这篇文章提到的内容的VERSION=0

RFC2671中Z一般情况下被发送者设置为0,接收方可以忽略它。但是后续的扩展协议中会用到这16bit。

OPT RR中可变部分RDATA的结构如下图所示:

图3 RDATA格式

图3中OPTION-CODE由IANA分配;OPTION-LENGTH是OPTION-DATA的长度;OPTION-DATA是具体长度。

上面三个图之间的关系用下图看或许会清晰一点:

   需要注意的是,每个DNS 消息中只能有一个OPT伪资源记录,当有多中EDNS扩展协议时,各个{attribute, value}对一个紧接一个存储在RDATA中。如下图所示

   

可以看到当有NSID和CSUBNET的时候,两个RDATA紧密排列在OPT的RDATA字段中,它们两的总长度由Data length指定。

2,example

好苦涩的理论啊,我们拿一个实例看看EDNS0的格式吧!

我在自己的机器上用bind-9.8.1-p1中的dig请求Google首页,并把包大小参数设置为768:

./dig www.google.com.hk +bufsize=768

用tcpdump抓包,然后用ethereal查看UDP包的内容,下图是请求包的详细内容:

图4 request message

图4中蓝色的是请求消息中的Additional data中的所有内容,我们可以看到有一个OPT RR,需要注意的是:

1)TTL字段中的extended RCODE、VERSION和Z被ethereal拆分来显示了;

2)RDATA length为0说明没有可变消息RDATA,从下面的消息中可以看到确实没有RDATA(...)

下图是响应消息:

图5 response message

图5中可以看出,Additional data中除了四个google权威域名服务器详细信息外还有OPT RR,响应消息包的大小为4096字节。

3,Others

RFC2671中还包含了很多EDNS0实现时请求方和响应方注意的事项,以及EDNS0带来的问题,对它们感兴趣的可以移步这里

四,参考文献

1,RFC2671

2,维基百科  http://en.wikipedia.org/wiki/EDNS

时间: 2024-10-19 10:00:14

EDNS的相关文章

DNS原理及其配置

DNS----Domain Name System域名系统 工作原理: 作用: 1)将域名, 主机名解析成对应的IP地址 正向解析 2)将IP地址解析成对应的主机名,域名        反向解析 DNS解析方式: 递归 客户端只需要向DNS服务器发送一次请求 迭代 客户端需要发送多次DNS请求 区域zone 正向区域xxx.com 反向区域X.X.X.in-addr.arpa 记录Record A记录主机记录 www.uplooking.comA192.168.1.1 NS记录标识DNS服务器自

LNMP-Nginx负载均衡

1.获取网站IP地址 [[email protected] ~]# yum install -y bind-utils ##安装dig命令 [[email protected] ~]# dig baidu.com ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- o

教你使用火狐浏览器(Linux)保护隐私

基于这些目的选择浏览器的时候,火狐或许是你的最佳选择.谷歌 Chrome 不能信任.它是属于谷歌的,一个众所周知的数据收集公司,而且它是闭源的. Chromium 或许还可以,但并不能保证.只有火狐保持了一定程度的用户权利承诺. 火狐设置 火狐里有几个你能设定的设置,能更好地保护你的隐私.这些设置唾手可得,能帮你控制那些在你浏览的时候分享的数据. 健康报告 你首先可以设置的是对火狐健康报告发送的限制,以限制数据发送量.当然,这些数据只是被发送到 Mozilla,但这也是传输数据. 打开火狐的菜单

DNS服务器综合实验(包含view下主从+子域授权+转发域)

说明:本文并不是一上来就搭建包含view下主从+子域授权+转发域的实验环境,我们按照先易后难的顺序逐渐深入搭建的.特此说明. ===============================实战======================================= 规划: 主DNS:192.168.0.10 从DNS:192.168.0.11 其他地址:192.168.0.13.192.168.0.14 子域DNS:192.168.0.12 注意:所有工作之前,将所有的主机进行如下设置 [

dnsmasq 之 dnsmasq.conf 配置

############################################################################## # #        DNS 选项 # ############################################################################## # 不加载本地的 /etc/hosts 文件 #no-hosts # 添加读取额外的 hosts 文件路径,可以多次指定.如果指定为目录,则读取

BIND搭建主从DNS

DNS介绍 DNS (Domain Name System)域名解析系统,主要用来解析IP 和域名的对应关系. DNS有这几种不同的记录类型: A记录:Adress记录,用来指定域名或主机名和IP的对应关系.域名对应的IP地址. NS记录:Name Server ,域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析. MX记录:Mail Exchanger,邮件服务器的域名记录,通过解析@后的域名将邮件发送到指定服务器. CNAME记录:Canonical Name, 别名记录,允许将多

西部开源学习笔记BOOK3《DNS本地高速缓存服务器》

################################# ####### 配置高速缓存DNS ######## ################################# ################ ### DNS总揽 ### ################ ##权威名称服务器 -存储并提供某个区域整个DNS域或DNS域的一部分的实际数据.权威名称服务器的类型包括 *Master包含原始区域数据.有时称作"主要"名称服务器 *Slaver备份服务器通过区域传送

小白日记3:kali渗透测试之被动信息收集(二)-dig、whios、dnsenum、fierce

一.DIG linux下查询域名解析有两种选择,nslookup或者dig.Dig(Domain Information Groper)是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具. <span style="font-size:18px;">[email protected]:~# dig -h Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt} {glo

NFS共享关系型数据库利用DNS轮询提供Web负载均衡

前言: 用NFS.LAMP.BIND结合的方法,应对网络中访问量增大而导致服务器负载运行的情况.以实现Web服务器之间使用同一个MYSQL和相同的网页配置文件. 实验环境: HostName IP 规划 nfs.preferred.com 192.168.1.6 NFS ns.preferred.com 192.168.1.5 DNS mysql.preferred.com 192.168.1.4 MYSQL www.preferred.com 192.168.1.3 WEB www.prefe