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:
$TTL 60
@ IN SOA localhost. root.localhost. (
2015112501 ; serial
1h ; refresh
30m ; retry
1w ; expiry
30m) ; minimum
IN NS localhost.
localhost A 127.0.0.1
www.some-website.com A 127.0.0.1
www.other-website.com CNAME fake-hostname.com.
Qu'est ce que ça fait?
- il remplace l'adresse IP
www.some-website.com
par la fausse adresse 127.0.0.1
, en envoyant effectivement tout le trafic de ce site à l'adresse de bouclage
- il envoie du trafic
www.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:
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
};
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 la options { }
section ajouter l' response-policy
option:
options {
// bunch
// of
// stuff
// please
// ignore
response-policy { zone "rpz"; };
}
Maintenant redémarrez Bind:
service bind9 restart
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'une logging
section contient les instructions suivantes:
logging {
// stuff
// already
// there
channel my_syslog {
syslog daemon;
severity info;
};
category queries { my_syslog; };
};
Redémarrez Bind à nouveau et c'est tout.
Testez-le sur la machine en cours d'exécution Bind:
dig @127.0.0.1 www.other-website.com. any
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.