概要
RFC7766(2016年)にてTCP単独でのDNSクエリ送信が可能(MAY)となりましたが、今後のDNS動向においてもDNS over TCPが重要になりそうです。
本記事は、PAM2022というカンファレンスで採択された論文のうち"Assessing Support for DNS-over-TCP in the Wild"で参考にしようと思った点をまとめておくものです。
本記事の目的
目次
基本
DNS over TCPの位置づけ
DNS over TCPは、53/tcpを使用したDNS通信のことです。
従来、DNS over TCPは主にTCPフォールバックの際に使用されるものでしたが、現在は最初のDNSクエリ送信時点で使用して良いことになっています。
- RFC7766(2016年)
TCP単独でDNSクエリを送信して良い(MAY)ことになっています("5. Transport Protocol Selection")。 - それ以前(RFC1123の6.1.3.2、1989年)
DNSクエリは最初にUDPで送信されなければならず(MUST)、そのDNSレスポンスがtruncate(TC bitが有効)されていた際にTCPで再問合せすべきとされていました(SHOULD)。このTCPによる再問合せをTCPフォールバックと呼びます。
あるいは、ほとんど無いと思いますが、個別の合意により全ての通信でTCPを使用して良い(MAY)ことにはなっていました。 - (RFC5966(2010年)もありますが省略します)
DNSメッセージのtruncate
DNSメッセージのtruncateは、基本的にUDP経由で送信されたDNSメッセージのサイズが512バイトの制限を超える場合に発生します。
このようなメッセージはUDP経由ではやり取りできないので、DNS over TCPや、EDNS0による拡張といった方法が必要です。
- RFC791 "3.1. Internet Header Format"
(IPではヘッダ64バイトを含む576バイトまでの通信を保証) - RFC1035 "2.3.4. Size limits"、"4.2.1. UDP usage"
あるいは、DNSサーバがリゾルバに対して何らかの理由でTCPによる再問合せをさせたい場合、意図的にTCビットが有効な応答を返すという動作は(プロトコルとしては)あり得ます。
DNSの動向
2022年に発行されたRFC9210(DNS Transport over TCP - Operational Requirements)では、DNS over TCPの重要性について説明されています("3. DNS-over-TCP Requirements")。
DNSメッセージサイズの増加(DNSSEC等)、今後のDNS関連技術の発展、DoS攻撃の緩和策、全てにおいてDNS over TCPは今までと同等かそれ以上に重要とされています。
身近なDNS通信では、DNS over TLS(DoT)、DNS over HTTPS(DoH)の活用が進む中、従来のもの(非DoT、非DoH)と混在するネットワーク環境が形成されつつあります。
このようにDNS通信のパターンが多様化するという意味でも、やはりDNS over TCPは中核的な技術要素の1つと言えるでしょう。
例えば、様々なパターンのDNS通信を分析する場面や、TCPコネクション再利用等について考慮する場面で重要になってくると思われます。
DoTとTCPコネクションの再利用
DoT(RFC7858)では、TCPコネクションの再利用についてはDNS over TCP(RFC7766)に従うべき(SHOULD)と記載があります。
To avoid excess TCP connections, each with a single query, clients SHOULD reuse a single TCP connection to the recursive resolver.
…
"Proper management of established and idle connections is important to the healthy operation of a DNS server. An implementor of DNS over TLS SHOULD follow best practices for DNS over TCP, as described in [RFC7766]."
RFC7858 "3.4. Connection Reuse, Close, and Reestablishment"より
RFC7766では、"6.2. Recommendations"の中に、"6.2.1. Connection Reuse"や"6.2.1.1. Query Pipelining"に記載があります。
パフォーマンスやリソース効率の向上のため、1つのTCPコネクションの中で複数のDNSクエリおよびDNSレスポンスをやり取りすることを指しています。
DNS over TCPとセキュリティ
セキュリティ面では、RFC9210ではコネクション指向のDNS通信がセキュリティやプライバシーを向上させる可能性や、その他セキュリティに対する考慮事項についての言及があります。
例えば、UDP-based flooding attacksが近年最も一般的なDNSに対する攻撃手法であるとしつつ、TCPによる短いDNS通信が増えることでIPフラグメンテーション攻撃の可能性があり得るとの記載があります。
Furthermore, there has been research that argues connection-oriented DNS transactions may provide security and privacy advantages over UDP transport [TDNS]. In fact, the standard for DNS over TLS [RFC7858] is just this sort of specification. Therefore, this document makes explicit that it is undesirable for network operators to artificially inhibit DNS-over-TCP transport.
RFC9210 "3. DNS-over-TCP Requirements"より
Historically, operators have been wary of TCP-based attacks, but in recent years, UDP-based flooding attacks have proven to be the most common protocol attack on the DNS. Nevertheless, a high rate of short-lived DNS transactions over TCP may pose challenges.In fact, [DAI21] details a class of IP fragmentation attacks on DNS transactions if the IP Identifier field (16 bits in IPv4 and 32 bits in IPv6) can be predicted and a system is coerced to fragment rather than retransmit messages.
RFC9210 "8. Security Considerations"より
DNS over TCPの普及状況に関する論文
DNS over TCPの普及状況に関し、"Assessing Support for DNS-over-TCP in the Wild(世に出回っている DNS-over-TCP へのサポートの評価)"という論文がありました。
これは、PAM2022というカンファレンスで採択された論文の1つのようです。
著者の1人がAkamaiの従業員のようで、そのためか実際のCDN環境のログ等も含めた広範な調査結果がまとめられています。
以下よりPDFや動画を参照できます。
論文における調査結果からは、以下のような内容が分かります。
詳細は後述します。
詳細
論文の中で参考にしようと思った点
論文を全てきちんと読めた訳ではありませんが、整理しておきたいポイントを記載します。
興味深いのは、実在する10万以上のリゾルバ、1,000万以上のドメイン(の権威DNSサーバ:ADNS)に対する調査を行っている点です。
特に、インターネットに公開されていない組織内のリゾルバに対する調査手法に関しては、迷惑行為にもなり得るようなものも含まれており、色んな意味で参考になります。
※本記事には、論文中の図は転載していないので、詳細については論文自体を参照願います。
調査内容
DNSクエリの一般的な傾向
リゾルバに対するTCPフォールバックサポート状況の調査
- 調査方法
以下、調査結果等に関するポイントです。
TCPフォールバックに対応していないということは、TCPフォールバックが必要となった際(ADNS側がDNS over TCPを強制しようとした場合も含む)に、目的のコンテンツにアクセスできない(その名前解決ができない)ということを意味しています。膨大なトラフィックを扱う環境では、この数%の損失は大きなものになります。
ADNSに対するDNS-over-TCPサポート状況の調査
TCPによるDNSクエリに応答できないということは、リゾルバがTCP接続のみを使用する方針とした際に、目的のコンテンツにアクセスできない(その名前解決ができない)ということを意味しています。リゾルバの場合と同様、膨大なトラフィックを扱う環境では、この数%の損失は大きなものになります。
競合状態によるTCPパイプラインの失敗
エッジケースとして以下のような現象についての説明があります。
"race condition(競合状態)"によりTCPコネクションの再利用(パイプライン)が失敗する動作
競合状態の発生例(Fig. 9)
論文内で言及されている"Our ADNS"では、以下の設定
EDNS0 edns-tcp-keepaliveオプション(6.1)
この問題は、DoT、DoH、DNS-over-QUICにも当てはまる(6.2)