La meilleure méthode consiste à utiliser la zone de politique de réponse dans Bind 9.8.1 ou plus récent. Elle vous permet de remplacer des enregistrements uniques dans des zones arbitraires (et il n'est pas nécessaire de créer un sous-domaine entier pour cela, seulement l'enregistrement unique que vous voulez modifier), elle vous permet de remplacer les CNAME, etc. D'autres solutions, comme Unbound, ne peuvent pas remplacer les CNAME.
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDIT : Faisons ça correctement alors. Je vais documenter ce que j'ai fait en me basant sur le 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 plateformes.
Allez à l'endroit où se trouvent les fichiers de configuration de Bind sur votre système - ici, ils se trouvent à l'adresse suivante /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.
Que fait-il ?
- il remplace l'adresse IP pour
www.some-website.com
avec la fausse adresse 127.0.0.1
en envoyant tout le trafic de ce site vers l'adresse de bouclage.
- il envoie du trafic pour
www.other-website.com
vers un autre site appelé fake-hostname.com
Tout ce qui pourrait aller dans un fichier de zone de liaison peut être utilisé ici.
Pour activer ces changements, il y a encore quelques étapes à franchir :
Modifier named.conf.local
et ajoutez 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 le options { }
ajouter la section 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 faire des changements, il suffit de modifier db.rpz
puis redémarrez Bind.
Bonus : si vous souhaitez enregistrer les requêtes DNS dans le syslog, afin de garder un œil sur la procédure, modifiez le fichier named.conf.local
et assurez-vous qu'il y a un logging
qui comprend ces déclarations :
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 qui exécute Bind :
dig @127.0.0.1 www.other-website.com. any
Si vous exécutez dig sur une autre machine, utilisez simplement @the-ip-address-of-Bind-server 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, en l'envoyant vers un nouvel équilibreur de charge AWS que je testais. Un Raspberry Pi a été utilisé pour exécuter Bind, et le RPi a également été configuré pour fonctionner comme un routeur WiFi - ainsi, en connectant des appareils au SSID fonctionnant sur le RPi, j'obtenais les dérogations DNS dont j'avais besoin pour mes tests.