Добре знати, що говорять на цю тему, і ми вже маємо хорошу авторитетну відповідь на це, але в практичних цілях я вважаю пораду професора Даніеля Дж. Бернштейна, автора довідки DJBDNS, досить цікавою.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
Коли надсилаються запити TCP?
Якщо ви перебуваєте в одній з наступних ситуацій, вам потрібно налаштувати свій DNS-сервер, щоб відповідати на запити TCP:
- Ви хочете опублікувати набори записів більше 512 байт. (Це майже завжди помилка.)
- Ви хочете дозволити передачу вихідних зон, наприклад, на сторонній сервер.
- Батьківський сервер відмовляється делегувати вам ім'я, поки ви не налаштуєте послугу TCP.
Якщо ви не знаходитесь ні в одній із цих ситуацій, вам не потрібно надавати послугу TCP, і ви не повинні її налаштовувати. DNS-over-TCP набагато повільніше, ніж DNS-над-UDP, і по суті є набагато більш вразливим до атак відмови у наданні послуги. (Це стосується і BIND.)
Зауважте, що він упускає явну згадку про DNSSEC; причина полягає в тому, що, за словами DJB, DNSSEC підпадає під категорію "завжди помилка". Дивіться https://cr.yp.to/djbdns/forgery.html для отримання більш детальної інформації. DJB має альтернативний стандарт під назвою DNSCurve - http://dnscurve.org/ - який вже незалежно прийняли деякі провайдери (наприклад, OpenDNS). Цікаво: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .
Зауважте, що якщо вищевказана документація про налаштування DJBDNS є будь-якою ознакою його особливостей, виявляється, що вона підтримує лише AXFR для TCP. Оскільки багато постачальників все ще використовують DJBDNS, вони навряд чи підтримуватимуть DNS через TCP без зайвих зусиль.
PS Зауважте, що DJB насправді практикує те, що він проповідує. Його власні сервери, (1), запускають DNSCurve, (2), не відповідають належним чином TCP. Тільки +notcp
би вдалося (що за замовчуванням):
% 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
, тоді як +tcp
помилка a (мабуть, з іншим повідомленням про помилку, залежно від того, який з його серверів буде обраний):
% 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