J'ai installé un serveur DNS sur SLES10 (lie actuellement 9.6) sur un serveur multi-hébergé. Ce serveur peut être interrogé à partir de tous les réseaux internes et fournit des réponses pour tous les réseaux internes. Nous avons deux zones DNS "maîtres" distinctes. Chacune de ces zones est desservie par un certain nombre de serveurs Windows-DNS faisant autorité.
Maintenant, mon serveur linux est un serveur DNS secondaire pour l'une de ces zones (zone interne privée) et agit en tant que transitaire pour l'autre zone (zone interne publique).
Jusqu'à récemment, cette configuration fonctionnait sans problème. Maintenant, je reçois - lors de l'interrogation de la zone interne publique (par exemple par la host
commande sur un client Linux) le message d'erreur
;; Troncature, nouvelle tentative en mode TCP
un wirehark-dump a révélé la cause de ceci: la première requête sort en mode UDP, la réponse ne rentre pas dans UDP (en raison de la longue liste de NS faisant autorité), puis elle est réessayée en mode TCP, fournissant la bonne réponse.
Maintenant, la question: Puis-je configurer ma liaison pour interroger les redirecteurs en mode TCP sans essayer d'abord UDP?
Mise à jour: Essayer ma main sur l'art ASCII ...
+--------------+ +--------------+ +-----------------+
| W2K8R2 DNS | | SLES 10 DNS | | W2K8R2 DNS |
| Zone private +---+ All internal +---+ Zone public |
| internal 2x | | Zones | | internal 30+ x |
+--------------+ +-+----------+-+ +-----------------+
| |
+--+---+ +--+---+
|Client| |Client|
+------+ +------+
host
commande et quelle requête est envoyée.minimal-responses: yes
à la configuration BIND sur SLES 10 - cela peut réduire les tailles de réponse. Dans tous les cas, la plupart des requêtes normales ne dépasseront pas la limite de 512 octets.Réponses:
Tout d'abord, je n'appellerais pas cela une erreur, juste un message d'information.
Deuxièmement, les serveurs DNS répondront toujours aux requêtes UDP (au moins BIND, je ne trouve pas d'options pour désactiver UDP) et les clients essaieront toujours (?) D'abord d'envoyer une requête UDP (par exemple, il n'y a pas d'options dans resolv.conf pour changer cela ni dans la JVM) - s'ils tiennent dans un paquet UDP (les requêtes le font généralement)
Si vous avez un cas d'utilisation spécifique, vous pouvez spécifier d'utiliser TCP, par exemple dans le script shell, utilisez 'dig + tcp' ou 'host -T' pour la résolution, et vous pouvez utiliser les appels système 'sethostent / gethostbyname / endhostent' (voir man page) pour forcer TCP dans les autres cas.
Si vous voulez vraiment essayer de bloquer UDP, la seule option que je peux voir est avec une règle iptable, mais je ne suis pas sûr que cette configuration fonctionnerait. Je m'attends à ce que la résolution DNS échoue tout simplement.
la source
Votre serveur BIND doit utiliser EDNS (voir RFC 2671) pour autoriser les paquets UDP de plus de 512 octets.
Cela devrait permettre à votre grand ensemble NS d'être récupéré sur UDP, sans nécessiter la surcharge d'une connexion TCP pour d'autres requêtes plus petites.
Notez cependant qu'il s'agit en fait des valeurs par défaut. Si EDNS n'est pas utilisé, soit quelque chose le bloque, soit les serveurs recevant les options EDNS ne le prennent pas en charge.
Notez également que
host
ne prend pas en charge EDNS. Il est parfaitement possible que vos requêtes de redirecteur -> serveur utilisent déjà EDNS, et vous ne pouvez tout simplement pas le voir lorsque vous essayez avec votre client local.Essayez
dig +bufsize=4096 @server hostname A
au lieu d'utiliserhost
.la source