Comment faire pour que Windows Server DNS utilise le fichier hosts pour résoudre des noms d'hôtes spécifiques

18

[NOTE: La solution de cette question est parfaite, par quelque chose qui s'éloigne de ce que le titre indique.]

Je fais face à un petit problème avec Windows Server 2003 DNS service. Dans ma société, j'exécute un serveur DNS Microsoft ( 172.16.0.12) pour effectuer la résolution de noms sur l'intranet de mon entreprise (le nom de domaine se termine par dev.nls. Résoudre l'IP 172.16 . ), Et il est également configuré en tant que redirecteur DNS pour transférer d'autres noms de domaine ( par exemple * .google.com, * .sf.net) à Internet real DNS servers. Ce serveur DNS interne n'a jamais tendance à servir des utilisateurs du monde extérieur.

Et, nous exécutons un serveur de messagerie (servant le courrier entrant pour un vrai domaine Internet @nlscan.com) à l'intérieur du pare-feu de l'entreprise auquel on peut accéder de l'une ou l'autre manière:

  1. en se connectant à 172.16.0.10partir de l'intranet.
  2. en vous connectant mail.nlscan.com(résolu à 202.101.116.9) à partir d'Internet.

Notez que 172.16.0.10et 202.101.116.9n'est pas la même machine physique. L' 202un est une machine pare-feu qui fait la redirection de port du port 25et 110vers l'adresse intranet 172.16.0.10.

Maintenant ma question: si les utilisateurs du réseau local d'entreprise veulent résoudre mail.nlscan.com, cela se résout à 202.101.116.9. C'est correct et réalisable, MAIS PAS BON, car le trafic de messagerie va à la machine pare-feu puis rebondit 172.16.0.10. J'espère que notre internal DNS serverpourra intercepter le nom mail.nlscan.comet le résoudre au 172.16.0.10. J'espère donc pouvoir écrire une entrée dans le fichier "hosts" 172.16.0.12pour le faire. Mais comment Microsoft DNS serverreconnaître ce fichier "hosts"?

Peut-être que vous suggérez, pourquoi ne pas utiliser l'utilisateur intranet 172.16.0.10pour accéder à mon serveur de messagerie? Je dois dire que cela n'est pas pratique, supposons qu'un utilisateur (employé) travaille sur son ordinateur portable, de jour au bureau et de nuit à la maison. Lorsqu'il est à la maison, il ne peut pas l'utiliser 172.16.0.10.

La création d'une zone pour nlscan.comsur notre interne DNS servern'est pas possible, car le serveur de nlscan.comnoms pour le domaine est sur notre FAI, et il est responsable de la résolution d'autres noms d'hôtes et sous-domaines sous nlscan.com.

[ÉDITER]

Comme WesleyDavidsuggéré, je suis la solution de créer simplement une zone nommée mailserver.nlscan.comet de placer un enregistrement A sans nom dans cette zone . Le temps prouve que cela fonctionne bien.

Jimm Chen
la source
+1 parce que c'est exactement ce que je fais. Mon résolveur DNS interne pointe mail.example.com vers 192.168 ... même si mon DNS principal pointe mail.example.com vers son IP Internet pour tout le monde. J'aimerais entendre tout inconvénient à cela.
Cory J
Salut, Cory, je crains que vous ne compreniez pas les faits. Comme joeqwerty le dira plus loin dans cette rubrique: le fichier hosts est utilisé par le composant résolveur client DNS, pas le composant serveur DNS. Ainsi, la modification des hôtes sur 172.16.0.12 n'aide pas le service DNS Microsoft.
Jimm Chen
Jun, vous pouvez marquer une réponse comme acceptée afin que les autres sachent quelle était la solution. Heureux que cela ait fonctionné pour vous! =)
Wesley

Réponses:

12

La dernière partie de ce message est erronée. J'avais l'impression, sur la base de certaines choses que j'avais lues sur le Web (si c'est sur le Web, cela doit être vrai!) Qu'une partie des tâches du service DNS Windows Server pour créer son cache consistait également à charger son fichier hôte dans cache avec ses données de zone locale. J'ai cherché autour et je n'ai pas trouvé de preuves tangibles de cela. J'ai testé la théorie sur ma propre machine Server 2008 R2 et j'ai constaté que le fichier hosts n'était pas utilisé pour créer le cache du serveur DNS.

Cependant, je crois avoir une solution légèrement plus élégante que Massimo. Au lieu de créer une zone faisant autorité pour toute la zone nlscan.com, créez simplement une zone nommée mailserver.nlscan.com et placez un enregistrement A sans nom dans cette zone. L'enregistrement A sans nom aura le même nom que la zone elle-même et vous pouvez lui donner l'adresse IP que vous souhaitez. Tous les autres domaines situés sous nlscan.com ainsi que nlscan.com lui-même seront résolus par DNS public.

Je viens de tester cela sur mon propre serveur DNS Server 2008 R2 et j'ai pu résoudre le site Web de mon ami (nessus.nl) via des serveurs DNS publics, mais le sous-domaine spécifique (blog.nessus.nl) se résout en une adresse IP Apple.com . Essayez-le et voyez si cela fonctionne pour vous.

Un message plus ancien ou erroné commence:

Si ma compréhension est correcte (EDIT: et ce n'est pas le cas), lorsque le cache DNS est construit sur la machine Server 2003, il extrait les entrées du fichier hosts ainsi que ses données de zone. Le placement 172.16.0.10 mailserver.nlscan.comdans le fichier d'hôtes de votre machine Server 2003 devrait résoudre le problème. Redémarrez vos services DNS après avoir modifié votre fichier d'hôtes.

Utilisez ipconfig / displaydns sur n'importe quelle machine Windows (en particulier, votre machine DNS Server 2003) pour voir vos entrées de fichier hôte. Gardez également à l'esprit que les réponses négatives sont mises en cache dans vos clients, exécutez donc toujours ipconfig / flushdns sur les clients que vous expérimentez. Sinon, vous finirez par vous abuser contre divers objets durs en vous demandant pourquoi vos clients ne peuvent pas résoudre un nom que vous venez de saisir dans un fichier zone / hosts. =)

Avez-vous essayé cela et échoué?

Wesley
la source
2
Le DNS de Windows Server 2003 n'utilisera pas le hostsfichier pour résoudre les noms. Il utilisera ses propres données, redirecteurs ou requêtes récursives, mais pas le hostsfichier local .
Massimo
@Massimo tu as raison! Je l'ai testé et j'ai échoué. Cependant, je pense avoir pris votre suggestion et la simplifier davantage pour être un peu plus élégante. Dis-moi ce que tu penses.
Wesley
Suppression du downvote :-)
Massimo
@Massimo TY. Et merci de m'avoir incité à le tester par moi-même. J'ai appris une nouvelle chose. Toujours amusant. =)
Wesley
1
Je ne sais pas pourquoi vous vous êtes encore fait sonner, cela semble être une bonne solution à un problème que je rencontre régulièrement et c'est beaucoup plus simple que de configurer l'observation pour toute la zone Internet (publique).
Helvick
3

Le souhait que les utilisateurs internes obtiennent des adresses IP internes pour les ressources tandis que les utilisateurs externes obtiennent des adresses IP externes pour ces mêmes ressources est courant. Il est appelé DNS split brain. Vous avez un serveur DNS qui fait face à Internet et un autre serveur DNS interne pour les utilisateurs locaux. Les utilisateurs internes utilisent DHCP sur votre réseau et votre serveur DHCP vous annonce le serveur DNS interne. Lorsque vos utilisateurs sont absents du bureau, leur serveur DHCP les affectera à un serveur DNS qui ne connaîtra que la zone externe.

Vous semblez vouloir partager le DNS du cerveau sans vraiment héberger la zone en interne. Vous suggérez que l'hébergement de la zone en interne est problématique parce que vous ne voulez pas que les utilisateurs obtiennent l'IP interne lorsqu'ils travaillent à domicile, mais cela n'a pas de sens parce que lorsqu'ils sont à la maison, ils obtiennent leur IP à partir d'un autre serveur DHCP cela ne va pas annoncer votre serveur DNS interne. Il va annoncer le serveur DNS de leur FAI qui ne connaîtra que votre zone externe et ne leur fournira donc que des adresses IP externes.

Enfin, je ne pense pas que vous réussirez à demander à un serveur DNS de servir les enregistrements du fichier hosts sur le serveur DNS. Un serveur DNS sert des enregistrements à partir de ses fichiers de zone. Le fichier d'hôtes local sur ce serveur DNS propage les entrées dans le cache de résolution du client local qui ne s'applique qu'aux recherches sur cette machine. Ces entrées ne sont pas servies par le serveur DNS qui est un mécanisme différent.

Lisez sur DNS du cerveau divisé - c'est la façon normale de gérer cette situation.

icky3000
la source
"mais cela n'a pas de sens" - désolé, vous vous méprenez. Actuellement, j'ai l'intention d'avoir du personnel de l'entreprise à leur domicile pour résoudre correctement mail.nlscan.com au 202.101.116.9, mais je ne m'attends pas à ce qu'ils résolvent somehomt.dev.nls à la maison (sauf si j'ai configuré un serveur VPN). Et merci de souligner le DNS split-brain. Étant donné que je souhaite uniquement un ajustement pour le nom mail.nlscan.com dans l'intranet de mon entreprise, la configuration d'un DNS à cerveau partagé peut ne pas être aussi pratique.
Jimm Chen
2

Wes: Je ne sais pas qui vous a sonné, mais je voudrais clarifier l'utilisation du fichier hosts: le fichier hosts est utilisé par le composant résolveur client DNS, pas le composant serveur DNS. Une entrée dans le fichier hosts sur un serveur DNS sera utilisée par le serveur DNS lorsqu'il agit en tant que client DNS. Par exemple, une entrée dans le fichier d'hôtes de mon serveur DNS W2K8 comme ceci:

1.1.1.1 test.test.com

est chargé dans le cache client DNS du serveur DNS (pas son cache serveur). Si je teste test.test.com depuis mon serveur DNS, il renvoie 1.1.1.1 comme prévu. Si je lance ensuite nslookup sur le serveur DNS et lui demande test.test.com, il renvoie la bonne adresse IP publique enregistrée pour test.test.com car le composant client DNS sur le serveur DNS demande maintenant au composant serveur DNS de résoudre (comme n'importe quel autre client DNS). C'est une idée déroutante d'envelopper votre tête, mais le serveur DNS est également un client DNS et lorsque le composant client DNS est mis en action, il agit comme tout autre client DNS en regardant son propre cache client DNS, y compris toutes les entrées pré -chargé à partir du fichier hosts. Uniquement lorsque le composant client DNS utilise le composant serveur DNS (en interrogeant le ou les serveurs DNS configurés dans celui-ci '

Tout client DNS interrogeant le serveur DNS obtiendra toujours la «vraie» réponse et non l'entrée des hôtes car le cache client DNS du serveur DNS est utilisé par le serveur lui-même (en tant que client DNS) et non par le composant serveur DNS.

joeqwerty
la source
Vos tests et résultats ont reflété ma quête de cet après-midi exactement. Pour une raison quelconque, je pensais avoir lu que le service du serveur DNS utilisait également le fichier hosts pour amorcer son cache, pas seulement le résolveur. Appelez-nous simplement Savage et Hyneman! =)
Wesley
Savage et Hyneman, c'est génial! Mais qui est qui? S'il vous plaît, ne me dites pas que je dois faire pousser une moustache de morse et commencer à porter un béret. ;)
joeqwerty
1

Pour autant que je sache, il n'y a aucun moyen de faire utiliser Windows DNS le hostsfichier pour gérer la résolution de noms; mais ce n'est pas nécessaire.

Vous pouvez créer en toute sécurité une zone sur votre serveur DNS interne avec le même nom qu'une zone Internet publique; ce qui se passera, c'est que votre serveur traitera les demandes de noms dans cette zone en utilisant ses propres données, au lieu de transmettre ces demandes aux serveurs de noms faisant autorité pour cette zone; cela est parfois appelé "observation", car cela rend la "vraie" zone publique inaccessible au client interne, répondant à la place avec des "fausses" données.

Ce que vous devez faire attention, c'est que vous devez remplir cette zone interne avec tous les noms dont vous aurez besoin, même en utilisant des adresses IP publiques si nécessaire; sinon, les clients internes ne pourront pas résoudre ces noms.

Disons que votre zone publique ressemble à ceci:

www.nlscan.com    202.101.116.8
mail.nlscan.com   202.101.116.9

Vous voulez que les clients internes résolvent mail.nlscan.com comme 172.16.0.10; c'est ok, donc vous créez une zone "nlscan.com" sur votre serveur DNS interne et y mettez "mail.nlscan.com -> 172.16.0.10".
Mais maintenant, vos clients internes ne peuvent pas résoudre "www.nlscan.com", car le serveur pense qu'il fait autorité pour cette zone, il ne répondra donc pas à la requête (car il ne connaît pas cet hôte), mais il ne le transmettra à personne.
Pour résoudre ce problème, vous devez également placer "www.nlscan.com" dans votre zone interne; il peut pointer vers sa véritable adresse IP publique si vous voulez que vos clients y accèdent de cette façon, ou vous pouvez utiliser la même redirection que vous utilisez pour "mail.nlscan.com", si "www" est également transmis par votre pare-feu à un serveur interne.
Le même principe s'applique à tout nom de la zone.

Cette configuration n'eu aucun impact sur les clients externes, ou sur l' un de vos utilisateurs qui est temporairement en dehors de votre réseau, car cette zone « d'ombre » interne ne sera jamais visible sur Internet.

Massimo
la source
Je ne pense pas que vous ayez besoin de créer une zone faisant autorité pour l'ensemble du domaine nlscan.com. Je pense que vous pouvez créer un sous-domaine: mailserver.nlscan.com, puis créer un enregistrement A sans nom. Voir mon article pour plus de détails.
Wesley
Oui, cela fonctionnerait; et serait en fait plus simple ... si vous avez seulement besoin de rediriger un seul hôte; si vous devez rediriger certains d'entre eux, une zone complète serait préférable.
Massimo
ajoutez nlscan.com à votre dossier de redirecteur conditionnel dans le serveur DNS
1

Peu importe le fichier hôte, ajoutez simplement une nouvelle zone dans le DNS mail.domain.com et ajoutez un hôte dans la zone. laissez le nom vide (il utilisera automatiquement le nom de la zone) et entrez l'adresse IP du serveur de messagerie local ;-)

Lysandro
la source