O melhor método é através da zona de política de resposta no Bind 9.8.1 ou mais recente. Ele permite que você substitua registros únicos em zonas arbitrárias (e não é necessário criar um subdomínio inteiro para isso, apenas o único registro que você deseja alterar), ele permite substituir CNAMEs etc. Outras soluções, como Unbound não podem substituir CNAMEs .
EDITAR: Vamos fazer isso corretamente então. Vou documentar o que fiz com base no tutorial vinculado acima.
Meu sistema operacional é o Raspbian 4.4 para o Raspberry Pi, mas a técnica deve funcionar sem qualquer alteração no Debian e no Ubuntu, ou com um mínimo de alterações em outras plataformas.
Vá para onde seus arquivos de configuração do Bind são mantidos em seu sistema - aqui está em /etc/bind
. Crie lá um arquivo chamado db.rpz
com o seguinte conteúdo:
$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.
O que isso faz?
- ele substitui o endereço IP para
www.some-website.com
pelo endereço falso127.0.0.1
, enviando efetivamente todo o tráfego desse site para o endereço de loopback - envia tráfego para
www.other-website.com
para outro site chamadofake-hostname.com
Qualquer coisa que possa entrar em um arquivo de zona Bind que você pode usar aqui.
Para ativar essas alterações, há mais algumas etapas:
Edite named.conf.local
e adicione esta seção:
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
};
O tutorial linkado acima diz para você adicionar mais coisas ao zone "rpz" { }
, mas isso não é necessário em configurações simples - o que eu mostrei aqui é o mínimo para que ele funcione no seu resolvedor local.
Edite named.conf.options
e algures na secção options { }
adicione a opção response-policy
:
options {
// bunch
// of
// stuff
// please
// ignore
response-policy { zone "rpz"; };
}
Agora reinicie o Bind:
service bind9 restart
É isso. O servidor de nomes deve começar a substituir esses registros agora.
Se você precisar fazer alterações, edite apenas db.rpz
e reinicie o Bind novamente.
Bônus: se você quiser registrar as consultas DNS no syslog, pode ficar de olho nos procedimentos, editar named.conf.local
e verificar se há uma seção logging
que inclua estas declarações:
logging {
// stuff
// already
// there
channel my_syslog {
syslog daemon;
severity info;
};
category queries { my_syslog; };
};
Reinicie o Bind novamente e pronto.
Teste-o na máquina que executa o Bind:
dig @127.0.0.1 www.other-website.com. any
Se você executar uma escavação em uma máquina diferente, apenas use @ the-ip-address-of-Bind-server em vez de @ 127.0.0.1
Eu usei essa técnica com grande sucesso para substituir o CNAME por um site em que estava trabalhando, enviando-o para um novo balanceador de carga da AWS que eu estava testando. Um Raspberry Pi foi usado para executar o Bind, e o RPi também foi configurado para funcionar como um roteador WiFi - assim, conectando dispositivos ao SSID em execução no RPi, eu obteria as substituições de DNS que eu precisava para testar.