Dobrze jest wiedzieć, co mówią RFC na ten temat, i mamy już na to dobrą, autorytatywną odpowiedź, ale dla celów praktycznych uważam radę prof. Dr. J. J. Bernsteina, autora DJBDNS, dość zabawną.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
Kiedy wysyłane są zapytania TCP?
Jeśli znajdujesz się w jednej z poniższych sytuacji, musisz skonfigurować serwer DNS, aby odpowiadał na zapytania TCP:
- Chcesz opublikować zestawy rekordów większe niż 512 bajtów. (To prawie zawsze błąd).
- Chcesz zezwolić na transfer stref wychodzących, na przykład na serwer innej firmy.
- Serwer nadrzędny odmawia przekazania Ci nazwy, dopóki nie skonfigurujesz usługi TCP.
Jeśli nie znajdziesz się w żadnej z tych sytuacji, nie musisz świadczyć usługi TCP i nie powinieneś jej konfigurować. DNS-over-TCP jest znacznie wolniejszy niż DNS-over-UDP i jest z natury znacznie bardziej podatny na ataki typu „odmowa usługi”. (Dotyczy to również BIND.)
Zauważ, że pomija wyraźną wzmiankę o DNSSEC; powodem jest to, że według DJB DNSSEC należy do kategorii „zawsze błąd”. Więcej informacji na stronie https://cr.yp.to/djbdns/forgery.html . DJB ma alternatywny standard o nazwie DNSCurve - http://dnscurve.org/ - który został już niezależnie przyjęty przez niektórych dostawców (np. OpenDNS). Interesujące: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .
Należy zauważyć, że jeśli powyższa dokumentacja dotycząca konfiguracji DJBDNS wskazuje na jej funkcje, wydaje się, że obsługuje ona tylko AXFR dla TCP. Ponieważ wielu dostawców nadal korzysta z DJBDNS, jest mało prawdopodobne, aby obsługiwali DNS przez TCP bez dodatkowych wysiłków.
PS Zauważ, że DJB faktycznie ćwiczy to, co głosi. Jego własne serwery (1) uruchamiają DNSCurve, (2), nie odpowiadają poprawnie na TCP. Tylko +notcp
sukces się powiedzie (co jest domyślne):
% 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
, podczas gdy a +tcp
zawiedzie (najwyraźniej z innym komunikatem o błędzie, w zależności od tego, który z jego serwerów zostanie wybrany):
% 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