Thật tốt khi biết RFC nói gì về chủ đề này và chúng tôi đã có câu trả lời chính đáng về vấn đề đó, nhưng với mục đích thực tế, tôi tìm thấy lời khuyên từ Giáo sư Daniel J. Bernstein, Tiến sĩ, tác giả của DJBDNS, khá thú vị.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
Khi nào các truy vấn TCP được gửi?
Nếu bạn đang ở một trong các tình huống sau, bạn cần định cấu hình máy chủ DNS của mình để trả lời các truy vấn TCP:
- Bạn muốn xuất bản các bộ bản ghi lớn hơn 512 byte. (Điều này gần như luôn luôn là một sai lầm.)
- Bạn muốn cho phép chuyển vùng đi, ví dụ như đến máy chủ của bên thứ ba.
- Máy chủ mẹ từ chối ủy quyền tên cho bạn cho đến khi bạn thiết lập dịch vụ TCP.
Nếu bạn không ở trong bất kỳ tình huống nào, bạn không cần phải cung cấp dịch vụ TCP và bạn không nên thiết lập nó. DNS-over-TCP chậm hơn nhiều so với DNS-over-UDP và vốn dễ bị tấn công từ chối dịch vụ hơn nhiều. (Điều này cũng áp dụng cho BIND.)
Lưu ý rằng ông bỏ qua một đề cập rõ ràng về DNSSEC; Lý do là, theo DJB, DNSSEC thuộc danh mục "luôn luôn là một sai lầm". Xem https://cr.yp.to/djbdns/forgery.html để biết thêm chi tiết. DJB có một tiêu chuẩn thay thế, được gọi là DNSCurve - http://dnscurve.org/ - đã được một số nhà cung cấp áp dụng độc lập (như OpenDNS). Quan tâm: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .
Lưu ý rằng nếu tài liệu trên về thiết lập DJBDNS là bất kỳ dấu hiệu nào cho thấy các tính năng của nó, có vẻ như nó chỉ hỗ trợ AXFR cho TCP. Vì nhiều nhà cung cấp vẫn sử dụng DJBDNS, do đó họ sẽ không thể hỗ trợ DNS qua TCP mà không cần nỗ lực thêm.
PS Lưu ý rằng DJB thực tế, thực hành những gì anh ấy giảng. Các máy chủ của riêng anh ấy, (1), chạy DNSCurve, (2), không trả lời đúng TCP. Chỉ +notcp
thành công mới (mặc định):
% 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
, trong khi đó +tcp
sẽ thất bại (rõ ràng với một thông báo lỗi khác nhau, tùy thuộc vào máy chủ nào của anh ta được chọn):
% 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