Es bueno saber lo que dicen los RFC sobre el tema, y ya tenemos una buena respuesta autorizada al respecto, pero para fines prácticos, encuentro el consejo del profesor Daniel J. Bernstein, PhD, autor de DJBDNS, bastante entretenido.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
¿Cuándo se envían las consultas TCP?
Si se encuentra en una de las siguientes situaciones, debe configurar su servidor DNS para responder consultas TCP:
- Desea publicar conjuntos de registros de más de 512 bytes. (Esto casi siempre es un error).
- Desea permitir transferencias de zona salientes, por ejemplo a un servidor de terceros.
- Un servidor principal se niega a delegarle un nombre hasta que configure el servicio TCP.
Si no se encuentra en ninguna de esas situaciones, no es necesario que proporcione el servicio TCP y no debe configurarlo. DNS-over-TCP es mucho más lento que DNS-over-UDP y es inherentemente mucho más vulnerable a los ataques de denegación de servicio. (Esto también se aplica a BIND).
Tenga en cuenta que omite una mención explícita de DNSSEC; la razón es que, según DJB, DNSSEC cae en la categoría de "siempre un error". Consulte https://cr.yp.to/djbdns/forgery.html para obtener más detalles. DJB tiene un estándar alternativo, llamado DNSCurve - http://dnscurve.org/ - que ya ha sido adoptado independientemente por algunos proveedores (como OpenDNS). De interés: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .
Tenga en cuenta que si la documentación anterior sobre la configuración de DJBDNS es una indicación de sus características, parece que solo es compatible con AXFR para TCP. Como muchos proveedores todavía usan DJBDNS, es poco probable que admitan DNS sobre TCP sin esfuerzos adicionales.
PD Tenga en cuenta que DJB, de hecho, practica lo que predica. Sus propios servidores, (1), ejecutan DNSCurve, (2), no responden correctamente TCP. Solo el +notcp
éxito (que es el predeterminado):
% 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
, mientras +tcp
que a fallaría (aparentemente con un mensaje de error diferente, dependiendo de cuál de sus servidores se seleccione):
% 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