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.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?
- substitui o endereço IP pelo endereço
www.some-website.com
falso 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.com
outro 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.local
e 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.options
e em algum lugar da options { }
seção adicione a response-policy
opçã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.rpz
e reiniciar o Bind novamente.
Bônus: se você deseja registrar consultas DNS no syslog, para acompanhar os procedimentos, editar named.conf.local
e verificar se há uma logging
seçã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.