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 há necessidade de criar um subdomínio inteiro para isso, apenas o único registro que você deseja alterar), permite substituir CNAMEs, etc. Outras soluções, como Unbound, não podem substituir CNAMEs .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDIT: Vamos fazer isso corretamente então. Documentarei o que fiz com base no tutorial vinculado acima.
Meu sistema operacional é o Raspbian 4.4 para Raspberry Pi, mas a técnica deve funcionar sem nenhuma alteração no Debian e Ubuntu, ou com alterações mínimas em outras plataformas.
Vá para onde os arquivos de configuração do Bind são mantidos no seu sistema - aqui está /etc/bind. Crie lá um arquivo chamado db.rpzcom 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?
- substitui o endereço IP pelo endereço
www.some-website.comfalso 127.0.0.1, enviando efetivamente todo o tráfego desse site para o endereço de loopback
- envia tráfego para
www.other-website.comoutro site chamadofake-hostname.com
Qualquer coisa que possa entrar em um arquivo de zona de ligação, você pode usar aqui.
Para ativar essas alterações, existem mais algumas etapas:
Edite named.conf.locale adicione esta seção:
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
};
O tutorial vinculado acima diz para você adicionar mais coisas, zone "rpz" { }mas isso não é necessário em configurações simples - o que mostrei aqui é o mínimo para fazê-lo funcionar no seu resolvedor local.
Edite named.conf.optionse em algum lugar da options { }seção adicione a response-policyopção:
options {
// bunch
// of
// stuff
// please
// ignore
response-policy { zone "rpz"; };
}
Agora reinicie o Bind:
service bind9 restart
É isso aí. O servidor de nomes deve começar a substituir esses registros agora.
Se você precisar fazer alterações, basta editar db.rpze reiniciar o Bind novamente.
Bônus: se você deseja registrar consultas DNS no syslog, para acompanhar os procedimentos, editar named.conf.locale verificar se há uma loggingseção que inclua estas instruções:
logging {
// stuff
// already
// there
channel my_syslog {
syslog daemon;
severity info;
};
category queries { my_syslog; };
};
Reinicie o Bind novamente e é isso.
Teste-o na máquina executando o Bind:
dig @127.0.0.1 www.other-website.com. any
Se você executar o dig em uma máquina diferente, use @ o endereço IP do Bind-server em vez de @ 127.0.0.1
Usei essa técnica com grande êxito para substituir o CNAME de um site no qual eu 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 - portanto, ao conectar dispositivos ao SSID em execução no RPi, recebia as substituições de DNS necessárias para o teste.