One document matched: draft-lee-dnsop-recursion-performance-improvement-00.xml
<?xml version="1.0"?>
<rfc category="bcp" docName="draft-lee-dnsop-recursion-performance-improvement-00">
<!-- category values: std, bcp, info, exp, and historic -->
<front>
<title>An approach to improve recursion performance
</title>
<author fullname="Xiaodong Lee" initials="X" surname="Lee">
<organization>CNNIC</organization>
<address>
<postal>
<street>4 South 4th Street,Zhongguancun,Haidian District</street>
<city>Beijing</city>
<region>Beijing</region>
<code>100190</code>
<country>China</country>
</postal>
<phone>+86 10 5881 3020</phone>
<email>lee@cnnic.cn</email>
</address>
</author>
<author fullname="Hongtao Li" initials="H" surname="Li">
<organization>CNNIC</organization>
<address>
<postal>
<street>4 South 4th Street,Zhongguancun,Haidian District</street>
<city>Beijing</city>
<region>Beijing</region>
<code>100190</code>
<country>China</country>
</postal>
<phone>+86 10 5881 3164</phone>
<email>lihongtao@cnnic.cn</email>
</address>
</author>
<author fullname="Haikuo Zhang" initials="H" surname="Zhang">
<organization>CNNIC</organization>
<address>
<postal>
<street>4 South 4th Street,Zhongguancun,Haidian District</street>
<city>Beijing</city>
<region>Beijing</region>
<code>100190</code>
<country>China</country>
</postal>
<phone>+86 10 5881 3163</phone>
<email>zhanghaikuo@cnnic.cn</email>
</address>
</author>
<author fullname="Peng Zuo" initials="P" surname="Zuo">
<organization>CNNIC</organization>
<address>
<postal>
<street>4 South 4th Street,Zhongguancun,Haidian District</street>
<city>Beijing</city>
<region>Beijing</region>
<code>100190</code>
<country>China</country>
</postal>
<phone>+86 10 5881 2629</phone>
<email>zuopeng@cnnic.cn</email>
</address>
</author>
<date month="November" year="2015" />
<area>Internet</area>
<workgroup>Domain Name System Operations</workgroup>
<keyword>recursion performance improvement</keyword>
<abstract>
<t>
A recursive DNS server generally uses random port numbers to send outbound requests to protect against DNS spoofing attacks. Due to the limitation of operation system, a process typically can only open numerable file descriptors simultaneously. This limit reduces recursion performance of resolvers. This draft offers an approach to improve both recursion performance and security for recursive servers.
</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>
A recursive DNS server generally uses random port numbers to send outbound requests to avoid cache poisoning. This is also essential to protect against Dan Kaminsky's DNS attack. Due to the limitation of operation system, a process typically can only open numerable file descriptors simultaneously. For example, the limitation on Linux is 1024 by default. Although this configuration could be modified by operation system operators, there is still a limit for maximum port number (65535).This limitation not only reduces recursion performance, but also makes resolvers vulnerable to attackers. Suppose that a hacker sends thousands of queries for domains which change irregularly and are actually not exist, the resolver must start corresponding recursive requests to authoritative servers as these domains are not cached, and soon, this resolver will not be able to generate more outbound requests because no more file descriptor can be open.
</t>
<t>
This draft proposes an approach to solve this problem. A resolver should reuse a group of fixed port numbers for outbound requests. In this case, the resolver could improve recursion performance greatly as it avoids limitation of maximum file descriptors. As for security, the resolver should add an extra recursive identifier(RQID) in EDNS0 record in outbound requests. Authoritative servers should copy this RQID in EDNS0 record to the response packet. The resolver then match up the reply using RQID option. In this case, this approach improves security because a hacker can hardly correctly guess the randomized 32bit RQID besides the Transaction ID in DNS message header.
</t>
</section>
<section title="Protocol changes">
<t>
This draft uses an EDNS0 (<xref target="RFC6891"></xref>) option to include recursive query ID(RQID) in DNS messages. The option is structured as follows:
</t>
<figure>
<artwork>
<![CDATA[
+0 (MSB) +1 (LSB)
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0: | OPTION-RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2: | OPTION-LENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
4: | |
+ (RQID)Recursive Query ID |
6: | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
]]>
</artwork>
</figure>
<t>
<list style="symbols">
<t>
(Defined in <xref target="RFC6891"></xref>) OPTION-CODE, 2 octets, for RQID is 10.
</t>
<t>
(Defined in <xref target="RFC6891"></xref>) OPTION-LENGTH, 2 octets, use 4 as recommended.
</t>
<t>
RQID, a 32 bit identifier(recommended) assigned by the resolver that generates a recursive query. This RQID should be copied by authoritative server to the corresponding reply message and then be used by the resolver to match up the reply.
</t>
</list>
</t>
</section>
<section title="Stub Resolver Considerations">
<t>
This approach is aimed to work between recursive servers and authoritative servers, a stub resolver by itself should determine if it has to support this RQID option.
</t>
</section>
<section title="Recursive Server Considerations">
<t>
A resolver supporting RQID option should reuse fixed port numbers to send recursive queries to improve performance. The port number could be configured by users and the RQID function should also be configurable.
</t>
<t>
If the RQID function is enabled, a resolver should behave as follows:
When sending a query, it generates a random 32 bit RQID (recommended) in the EDNS0 record as described above. This RQID option indicates the resolver reuses its port to send recursive queries and expect the authoritative server to copy the RQID option in the responses.
When receiving a response, it should check RQID option in EDNS0 record in the response to match up the reply. If the response contains no EDNS0 record or RQID option, the resolver itself should determine if to accept this reply. For compatibility, it is recommended to accept these replies. This could increase the risk of cache poisoning, but in most cases, the resolver should be secured by other equipments(firewalls etc).
</t>
<t>
If a recursive server receives a query containing RQID option from stub resolver, it should copy this option in the reply.
</t>
</section>
<section title="Authoritative Server Considerations">
<t>
If an authoritative server does not support RQID function, it just ignores RQID option in EDNS0 record.
</t>
<t>
If a authoritative server supports RQID function, it should copy the RQID option in the reply.
</t>
</section>
<section title="Performance Considerations">
<t>
The recursive query performance should be greatly improved as the resolver reuses port numbers to avoid the operation system limit of maximum file descriptors.
</t>
</section>
<section title="Security Considerations">
<t>
This draft proposes an approach to use a RQID(32 bit as recommended) option to match up DNS replies. If both the recursive and authoritative server support this option, the risk of cache poisoning is much lower than previous protocol.
</t>
<t>
For compatibility, it is recommended to accept DNS replies which contain no RQID option.
</t>
</section>
<section title="IANA Considerations">
<t>
IANA is requested to assign the option code 10 for the RQID Option Code in the EDNS0 meta-RR.
</t>
</section>
</middle>
<back>
<references>
<reference anchor="RFC1035"
target="http://www.rfc-editor.org/info/rfc1035">
<front>
<title>"DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION"</title>
<author initials="P." surname="Mockapetris">
<organization>ISI</organization>
</author>
<date month="November" year="1987" />
</front>
</reference>
<reference anchor="RFC6891"
target="http://www.rfc-editor.org/info/rfc6891">
<front>
<title>"Extension Mechanisms for DNS (EDNS(0))"</title>
<author initials="J." surname="Damas">
<organization>Bond Internet Systems</organization>
</author>
<author initials="M." surname="Graff">
<organization></organization>
</author>
<author initials="P." surname="Vixie">
<organization>Internet Systems Consortium</organization>
</author>
<date month="April" year="2013" />
</front>
</reference>
</references>
</back>
</rfc>| PAFTECH AB 2003-2026 | 2026-04-24 03:11:17 |