DNS扩展机制(EDNS0) 摘要 DNS协议中包括一些长度固定的域,这些域在以后的使用中会因为功能的增加而变得不够用了,本文主要讨论如何利用现有的情况对它进行扩展。 1 - 原理 DNS指定了一种消息机制,利用这种消息机制可以传输编码选项,错误和压缩后的名字。DNS消息的长度是固定的,许多DNS协议对包的限制太死而影响了使用。现存的用户不必知道如何解释协议扩展的细节,实际上,这些客户在需要这些特征时可以进行升级,只有这些新特征用到了扩展部分。我们必须考虑客户如何处理这些多余的域,并考虑到相应的兼容性问题。 2 - 影响到的协议单元 DNS消息头的第二个16位字,被分为一个4位OPCODE,一个4位RCODE和一此一位的标记,有个保留的Z位被分配为不同的用途,大部分的RCODE值都已被使用,现在需要更多的标记和RCODE值。传输格式域标签的前2位被使用代表标签的类型。有些文档将四种可能的类型保留两种。而要求的标签数可能大大多于这个数目,因此需要更多的标签。DNS消息长度限制于512字节。因为必须要提供新机制以提供更大的缓冲,以适应更大的包。 3 - 扩展标记类型 "0 1"标签类型可以用于指示一个可扩展的标记类型,它的值可在标签头一字节的低六位进行扩展。所有因此而得到的标准类型必须使用扩展标签类型。"1 1 1 1 1 1"扩展标签类型留做以后使用。 4 - OPT pseudo-RR OPT pseudo-RR可被加入请求或响应的附加数据区内。OPT称为pseudo-RR,是因为它不传输任何数据。OPT RR不应该被缓冲,转发或从主文件中存取。每条信息中的OPT pseudo-RR数量必须小于等于1。OPT RR有固定部分,也有表现为{属性,值}对的选项集,这个集是不不定的。固定部分有DNS元数据,还有一些新协议单元,这些新协议在未来可以比较流行。下面是固定部分的结构:
OPT RR的变长域在RDATA中,它可以是0到多个以下结构的集合:
发送者的payload大小是最大的UPD payload大小的字节数。这样的大小刚好可以在网络上进行重组和传输。请注意:512字节的UPD payload需要576字节的IP缓冲,这就需要在连接的以太网要选择1280。请求和响应者都需要注意路径发现MTU(path discovered MTU)的大小。请求方的最大payload大小可能经常变化,所以应该事先留有相应的余量。虽然会变化,可是我们必须要求在两个操作之间payload的大小必须保持一致。下面就是一个例子:一个意义的QUERY,来获得响应方的最大UDP payload大小,下来是一个利用这个大小的UPDATE命令。我们不应该对UDP payload的大小进行限制,因为我们把栈设置为可以重组64KB大小的数据报,所以我们不应该假设每个操作需要超过4KB的状态内存。下面是扩展RCODE和标记:
5 传输问题 出现了OPT pseudo-RR就表示请求方完全实现了EDNS的给定版本,能够正确理解响应的内容。如果没有使用这个标记,则认为请求者未实现本文档中的任何要求,响应方不应该在响应中使用任何协议扩展。响应方如果不能识别协议扩展,应该发送RCODE NOTIMPL,FORMERR或SERVFAIL。因为在确定可以使用协议扩展前必须要进行试探,不要对方不支持你也要用。如果响应方的实现级别由请求者缓冲,应该进行进行新的测试,以确定这一结果。 6 安全问题 请求方指定最大的缓冲区大小时,如果请求方能够发送过大的包给中间网关转发,会可以打开一个新的DNS拒绝访问攻击入口,到时会在网关和响应者之间引起潜在的ICMP风暴。 7 - IANA的问题 IANA为OPT的RR类型设置类型代码41。 |