Estou executando um servidor de nomes para algumas máquinas no EC2. Este servidor de nomes não pode ser acessado pela Internet pública. Desejo que todas as instâncias do EC2 usem para encontrar um ao outro e resolver todos os nomes de domínio público (por exemplo, google.com
). Usando CNAMEs eu sou suposto ser capaz de criar meus próprios nomes, mas aderir ao servidor de nomes interno EC2 da Amazon para (interno ) Endereços IP . Funciona por um tempo, mas eventualmente alguns nomes resolvem incorretamente para seus endereços IP públicos .
Veja o que deve acontecer:
foo$ host bar
bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com.
ec2-88-88-88-88.compute-1.amazonaws.com has address 192.168.50.17
Veja o que realmente acontece depois de um tempo:
foo$ host bar
bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com.
ec2-88-88-88-88.compute-1.amazonaws.com has address 88.88.88.88
Ack! Se eu reiniciar o BIND, ele voltará a resolver corretamente o nome para o IP privado por um tempo e, eventualmente, exibirá o IP público. Ele nunca parece voltar a servir o IP privado novamente, a menos que eu reinicie o BIND.
A propósito, isso sempre parece funcionar:
foo$ host ec2-88-88-88-88.compute-1.amazonaws.com 172.16.0.23
ec2-23-21-222-199.compute-1.amazonaws.com has address 192.168.50.17
Se parece que eu não sei o que estou fazendo porque cometi um erro simples em um desses arquivos de configuração, é porque não sei o que estou fazendo.
Eu configurei meu próprio domínio de nível superior: ".tld" (ofuscado - esperamos que os caracteres reais escolhidos para o domínio de nível mais alto não importem).
Eu tentei fazer o que Eric Hammond recomenda . Aqui está o meu /etc/bind/named.conf.options
:
options {
directory "/var/cache/bind";
forwarders { 172.16.0.23; };
auth-nxdomain no;
listen-on-v6 { any; };
allow-query { 127.0.0.1; 192.168.50.0/24; };
};
172.16.0.23 é o ip do servidor DNS da Amazon, acessível apenas dentro do EC2. É o único que conhece os IPs internos / privados corretos para minhas máquinas. É quase como se meu servidor não conseguisse resolver foo.tld
às vezes, depois fosse para outro servidor de nomes [público] e a pesquisa fosse então borkeada (depois disso resolvida para o IP público). O truque que eu não pareço estar realizando é que meu servidor de nomes deve nunca ir além de 172.16.0.23 para resolver esses x.compute-1.amazonaws.com
nomes. Outra possibilidade é que, às vezes, o servidor de nomes da Amazon se estraga e me dá um IP público, mas por que meu servidor de nomes não corrige o erro e resolve o IP privado de novo às vezes?
De qualquer forma, seguindo em frente ... aqui está o /etc/bind/named.conf.local
:
zone "tld" {
type master;
file "/etc/bind/db.tld";
notify no;
};
Por questões de integridade, aqui está o /etc/bind/named.conf
:
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
Aqui está meu banco de dados de ligação ofuscado para minha zona, /etc/bind/db.tld
:
$TTL 1h
@ IN SOA tld. ns.tld. (
2012021425 ; Serial
1m ; Refresh
2m ; Retry
1w ; Expire
1h ) ; Negative Cache TTL
;
@ IN NS ns.tld.
@ IN A 192.168.50.5
ns A 192.168.50.5
foo CNAME ec2-99-99-99-99.compute-1.amazonaws.com.
bar CNAME ec2-88-88-88-88.compute-1.amazonaws.com.
Uau. Ok, aqui estão mais alguns arquivos que provavelmente são necessários para a foto inteira. Aqui está /etc/resolv.conf
no servidor de nomes, ns
:
domain tld
search tld
nameserver 127.0.0.1
Veja /etc/resolv.conf
on foo.tld
e bar.tld
:
domain tld
search tld compute-1.internal
nameserver 192.168.50.5
nameserver 172.16.0.23
Eu não sei se isso está correto. Talvez eu deva ter apenas nameserver 192.168.50.5
Esta configuração usa o BIND 9.7.3 no Ubuntu Server 11.10.
(FYI: publicado em link )