Adalah baik untuk mengetahui apa yang dikatakan RFC tentang masalah ini, dan kami sudah memiliki jawaban otoritatif yang bagus tentang hal itu, tetapi untuk tujuan praktis, saya menemukan saran dari Prof. Daniel J. Bernstein, PhD, penulis DJBDNS, cukup menghibur.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
Kapan permintaan TCP dikirim?
Jika Anda berada dalam salah satu situasi berikut, Anda perlu mengonfigurasi server DNS Anda untuk menjawab pertanyaan TCP:
- Anda ingin menerbitkan kumpulan catatan yang lebih besar dari 512 byte. (Ini hampir selalu merupakan kesalahan.)
- Anda ingin mengizinkan transfer zona keluar, misalnya ke server pihak ketiga.
- Server induk menolak untuk mendelegasikan nama kepada Anda sampai Anda mengatur layanan TCP.
Jika Anda tidak berada dalam situasi itu, Anda tidak perlu menyediakan layanan TCP, dan Anda tidak perlu mengaturnya. DNS-over-TCP jauh lebih lambat daripada DNS-over-UDP dan secara inheren jauh lebih rentan terhadap serangan penolakan layanan. (Ini juga berlaku untuk BIND.)
Perhatikan bahwa ia tidak menyebutkan DNSSEC secara eksplisit; alasannya adalah bahwa, menurut DJB, DNSSEC termasuk dalam kategori "selalu kesalahan". Lihat https://cr.yp.to/djbdns/forgery.html untuk lebih jelasnya. DJB memiliki standar alternatif, yang disebut DNSCurve - http://dnscurve.org/ - yang telah diadopsi secara independen oleh beberapa penyedia (seperti OpenDNS). Yang menarik: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .
Perhatikan bahwa jika dokumentasi di atas pada pengaturan DJBDNS adalah indikasi dari fitur-fiturnya, tampaknya hanya mendukung AXFR untuk TCP. Karena banyak penyedia masih menggunakan DJBDNS, mereka tidak akan mungkin mendukung DNS melalui TCP tanpa upaya ekstra.
PS Perhatikan bahwa DJB sebenarnya mempraktekkan apa yang dia khotbahkan. Servernya sendiri, (1), jalankan DNSCurve, (2), tidak menjawab TCP dengan benar. Hanya yang +notcp
akan berhasil (yang default):
% dig +trace @ordns.he.net +notcp cr.yp.to | tail
yp.to. 86400 IN NS uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to. 86400 IN NS uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 151 ms
cr.yp.to. 600 IN A 131.155.70.11
cr.yp.to. 600 IN A 131.155.70.13
yp.to. 3600 IN NS uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
yp.to. 3600 IN NS uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.yp.to.
;; Received 244 bytes from 131.155.70.13#53(uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to) in 14 ms
, sedangkan a +tcp
akan gagal (tampaknya dengan pesan kesalahan yang berbeda, tergantung pada server mana yang dipilih):
% dig +trace @ordns.he.net +tcp cr.yp.to | tail
yp.to. 86400 IN NS uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 150 ms
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.193.32.147#53: end of file
;; connection timed out; no servers could be reached