Es ist gut zu wissen, was die RFCs zu diesem Thema sagen, und wir haben bereits eine gute maßgebliche Antwort darauf, aber aus praktischen Gründen finde ich den Rat von Prof. Daniel J. Bernstein, PhD, dem Autor von DJBDNS, ziemlich unterhaltsam.
http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)
Wann werden TCP-Abfragen gesendet?
Wenn Sie sich in einer der folgenden Situationen befinden, müssen Sie Ihren DNS-Server so konfigurieren, dass er TCP-Abfragen beantwortet:
- Sie möchten Datensätze veröffentlichen, die größer als 512 Byte sind. (Dies ist fast immer ein Fehler.)
- Sie möchten ausgehende Zonenübertragungen zulassen, z. B. an einen Drittanbieter-Server.
- Ein übergeordneter Server lehnt es ab, einen Namen an Sie zu delegieren, bis Sie den TCP-Dienst eingerichtet haben.
Wenn Sie sich in keiner dieser Situationen befinden, müssen Sie keinen TCP-Dienst bereitstellen und sollten ihn nicht einrichten. DNS-over-TCP ist viel langsamer als DNS-over-UDP und von Natur aus anfälliger für Denial-of-Service-Angriffe. (Dies gilt auch für BIND.)
Beachten Sie, dass er eine explizite Erwähnung von DNSSEC auslässt; Der Grund dafür ist, dass DNSSEC laut DJB in die Kategorie "Immer ein Fehler" fällt. Weitere Informationen finden Sie unter https://cr.yp.to/djbdns/forgery.html . DJB hat einen alternativen Standard namens DNSCurve - http://dnscurve.org/ - der bereits von einigen Anbietern (wie OpenDNS) unabhängig übernommen wurde. Von Interesse: /security/45770/if-dnssec-is-so-questable-why-is-it-ahead-of-dnscurve-in-adoption .
Beachten Sie, dass die obige Dokumentation zum DJBDNS-Setup nur AXFR für TCP unterstützt. Da viele Anbieter immer noch DJBDNS verwenden, ist es unwahrscheinlich, dass sie DNS über TCP ohne zusätzlichen Aufwand unterstützen.
PS: DJB übt tatsächlich, was er predigt. Seine eigenen Server (1) führen DNSCurve aus (2) und beantworten TCP nicht richtig. Nur die +notcp
würde erfolgreich sein (was Standard ist):
% 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
, während a +tcp
fehlschlagen würde (anscheinend mit einer anderen Fehlermeldung, je nachdem welcher seiner Server ausgewählt wird):
% 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