J'ai un réseau interne avec un serveur DNS exécutant BIND, connecté à Internet via une seule passerelle. Mon domaine "exemple.com" est géré par un fournisseur DNS externe. Certaines entrées de ce domaine, telles que "hôte1.exemple.com" et "hôte2.exemple.com", ainsi que l'entrée de niveau supérieur "exemple.com", renvoient à l'adresse IP publique de la passerelle.
Je souhaite que les hôtes situés sur le réseau interne résolvent "host1.example.com", "host2.example.com" et "example.com" en adresses IP internes au lieu de celles de la passerelle. D'autres hôtes comme "otherhost.example.com" doivent toujours être résolus par le fournisseur DNS externe.
J'ai réussi à le faire pour les entrées host1 et host2, en définissant deux zones à entrée unique dans BIND pour "host1.example.com" et "host2.example.com". Cependant, si j'ajoute une zone pour "exemple.com", toutes les requêtes de ce domaine sont résolues par mon serveur DNS local. Par exemple, l'interrogation de "otherhost.example.com" entraîne une erreur.
Est-il possible de configurer BIND pour ne remplacer que certaines entrées d'un domaine et pour résoudre le reste de manière récursive?
la source
Réponses:
La meilleure méthode consiste à utiliser la zone de stratégie de réponse dans Bind 9.8.1 ou une version plus récente. Il vous permet de remplacer des enregistrements uniques dans des zones arbitraires (il n'est pas nécessaire de créer un sous-domaine complet pour cela, mais uniquement le seul enregistrement que vous souhaitez modifier), il vous permet de remplacer les CNAME, etc. D'autres solutions telles que Unbound ne peuvent pas remplacer les CNAME. .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDIT: Faisons cela correctement alors. Je vais documenter ce que j'ai fait sur la base du tutoriel lié ci-dessus.
Mon système d'exploitation est Raspbian 4.4 pour Raspberry Pi, mais la technique devrait fonctionner sans aucune modification sur Debian et Ubuntu, ou avec des modifications minimales sur d'autres plates-formes.
Accédez à l'emplacement où sont conservés vos fichiers de configuration de liaison sur votre système
/etc/bind
. Créez-y un fichier appelédb.rpz
avec le contenu suivant:Qu'est ce que ça fait?
www.some-website.com
par la fausse adresse127.0.0.1
, en envoyant effectivement tout le trafic de ce site à l'adresse de bouclagewww.other-website.com
vers un autre site appeléfake-hostname.com
Tout ce qui pourrait aller dans un fichier de zone Bind peut être utilisé ici.
Pour activer ces modifications, quelques étapes supplémentaires sont nécessaires:
Modifier
named.conf.local
et ajouter cette section:Le tutoriel lié ci-dessus vous dit d'ajouter plus de choses à,
zone "rpz" { }
mais ce n'est pas nécessaire dans les configurations simples - ce que j'ai montré ici est le minimum pour que cela fonctionne sur votre résolveur local.Modifier
named.conf.options
et quelque part dans laoptions { }
section ajouter l'response-policy
option:Maintenant redémarrez Bind:
C'est ça. Le serveur de noms devrait commencer à remplacer ces enregistrements maintenant.
Si vous devez apporter des modifications, modifiez-les
db.rpz
, puis redémarrez Bind.Bonus: si vous souhaitez enregistrer les requêtes DNS dans syslog, vous pouvez ainsi surveiller les procédures, éditer
named.conf.local
et vérifier qu'unelogging
section contient les instructions suivantes:Redémarrez Bind à nouveau et c'est tout.
Testez-le sur la machine en cours d'exécution Bind:
Si vous utilisez dig sur une machine différente, utilisez simplement @ l'adresse-ip-de-serveur-Bind au lieu de @ 127.0.0.1
J'ai utilisé cette technique avec succès pour remplacer le CNAME d'un site Web sur lequel je travaillais et l'envoyer à un nouvel équilibreur de charge AWS que je venais de tester. Un Raspberry Pi était utilisé pour exécuter Bind, et le RPi était également configuré pour fonctionner en tant que routeur WiFi. Ainsi, en connectant des périphériques au SSID exécuté sur le RPi, j'obtenais les substitutions DNS dont j'avais besoin pour les tests.
la source
Le serveur DNS récursif non lié peut remplacer des enregistrements de ressources individuels.
Regardez les paramètres de configuration
local-zone
etlocal-data
dans le manuel , par exemple:Le
transparent
paramètre sur le luilocal-zone
dit d'effectuer des recherches récursives normales pour tous les noms non fournislocal-data
.la source
unbound
sur mon propre routeur, je pense que la solution est bien meilleure.Vous voudrez peut-être vous pencher sur "dnsmasq", qui vous permet de faire des choses très intelligentes avec une résolution améliorée.
la source
Ce que vous recherchez, c'est un DNS fractionné, défini par Webopedia comme:
Pour l'essentiel, vous devez copier votre fichier de zone externe et le conserver sur votre serveur DNS interne, puis modifier ou ajouter les enregistrements nécessaires à votre réseau interne. Il s’agit d’une configuration assez courante, même s’il peut être difficile de garder les enregistrements "externes" synchronisés entre les deux serveurs DNS. Si vous créez ou modifiez un enregistrement sur le serveur public, vous devrez également le créer ou le modifier sur le serveur privé.
Cela peut être implémenté indépendamment de l'implémentation du serveur DNS que vous utilisez. Dans la plupart des configurations, vous aurez un serveur DNS qui dessert le réseau externe et un autre qui dessert le réseau interne. Avec BIND, comme éventuellement d'autres implémentations, vous pouvez avoir les deux versions de la zone sur le même serveur en utilisant l'instruction "allow-query" dans la section zone du fichier named.conf.
Une autre possibilité sur BIND (et je n'ai jamais essayé cela) serait de définir votre domaine example.com sur le serveur DNS interne avec uniquement les enregistrements que vous utilisez en interne. Ensuite, définissez une instruction "forward" avec le "premier" argument (en conjonction avec "forwarders"). En théorie, cela irait demander au serveur DNS externe (comme défini dans les "redirecteurs") une réponse qui n'aurait pas vos enregistrements internes et ne renverrait une réponse d'échec. Ensuite, le serveur interne se chercherait lui-même une réponse. bien sûr si cela fonctionnerait, mais c'est une pensée.
la source
Dans BIND, je parviens à ce résultat en définissant une zone à l'aide du nom d'hôte souhaité. L'approche est acceptable si vous souhaitez uniquement remplacer quelques hôtes.
Ma déclaration de zone ressemble à ceci:
Ma définition de zone ressemble à ceci:
Donc, si j'interroge exemple.com sur DNS intranet et DNS du FAI, j'obtiens la même adresse IP mais si j'interroge override.example.com, j'obtiens des résultats différents si l'intranet DNS (principal) est accessible.
la source
Vous êtes déjà sur la bonne voie.
Sur vos serveurs DNS internes, vous devrez définir une zone pour chaque hôte d'exception situé immédiatement sous "example.com". Pour minimiser ces exceptions, il est courant de nommer toutes les machines internes "hosta.internal.example.com", le serveur DNS envoyant la plupart des requêtes aux serveurs DNS externes, mais faisant autorité pour la zone "internal.example.com". (Une fois que vous avez dépassé de petites opérations, il existe généralement deux serveurs DNS vers lesquels les clients sont dirigés et un DNS faisant autorité distinct vers lequel ces serveurs sont dirigés pour "internal.example.com".)
En règle générale, les exceptions que vous décrivez sont créées uniquement lorsqu'un hôte doit être accessible à la fois en externe et en interne. Même dans ce cas, vous souhaiterez peut-être utiliser "host1.example.com" de l'extérieur et "host1.internal.example.com" de l'intérieur. Les hôtes internes sont configurés pour rechercher des noms dans "internal.example.com". Dans certaines situations, ce que vous faites déjà est approprié, par exemple si le certificat d'un serveur identifie le serveur comme étant "hôte1.exemple.com", auquel cas vous souhaitez que ce soit le nom auquel les clients se connectent.
la source
Utiliser dnsmasq rend cela vraiment facile. http://www.thekelleys.org.uk/dnsmasq/doc.html Agit en tant que serveur DNS mais obtient des réponses du serveur DNS local. La bonne chose est que vous pouvez remplacer des enregistrements de domaine unique sans jouer avec les fichiers de zone
la source
En fait, il existe une autre façon de procéder, même si elle est légèrement différente. J'ai la même situation, j'ai un domaine qui est utilisé en externe et en interne, et j'ai des hôtes externes statiques et dynamiques. Les seuls réellement douloureux sont les dynamiques externes. La solution n'est peut-être pas la plus élégante, mais peut être mise en œuvre avec un petit script. La plupart du temps, je fais mon propre script DNS dynamique avec l'API de mon fournisseur DNS dynamique, je lance ce script par cron toutes les 5 minutes:
1) obtenir mon adresse IP externe. cela a-t-il changé? sans issue.
2) modification de l'adresse IP, appelez l'API de dyndns-provider, avec la nouvelle adresse IP,
3) sed le db.mydomain.com avec l'IP externe
4) redémarrer la liaison.
Fonctionne de manière très fiable pour mon réseau domestique
la source
dyn.dev.shahed.biz
de World Wide! Pourriez-vous nous aider à résoudre ce problème?