Atualizações para uma zona dinâmica BIND compartilhada entre visualizações atrasadas

8

Aqui está o rápido e sujo: no BIND9 com uma zona dinâmica que é compartilhada entre visualizações , fazer um nsupdate, atualizar / criar / excluir um registro funcionará bem se eu procurar esse registro de um cliente que caia na mesma visualização que o nsupdate de.

Consultar a partir de uma exibição que não é a mesma que eu costumava nsupdate lançará NXDOMAIN (se estiver adicionando um novo registro) ou mostrará informações antigas do registro no caso de uma alteração / atualização até um período arbitrário (por exemplo, 15 minutos) passa, ou eu o faço forçosamente $ rndc freeze && rndc thaw. $ rndc syncparece não fazer nada para resolver o problema - eu esperava que fosse apenas um arquivo de diário, uma vez que as liberações do diário estão documentadas para liberar em torno de 15 minutos.

Se isso não estiver claro, aqui estão alguns pseudocódigos para começar:

Visualizações BIND

view "cdn-redir" {
   match-clients { 10.1.1.0/24; 10.1.2.0/24; };
   include "cdn-zone.db";
   include "dynamic-zone.db";
};

view "default" {
   match-clients { any; };
   include "dynamic-zone.db";
};

Exemplo de linha de comando

user@ns:~$ nsupdate -k rndc.key
> server localhost
> zone example.com.
> update add foohost.example.com. 600 A 10.5.6.7
> send
> quit

user@ns:~$ dig foohost.example.com (resolv.conf points to 127.0.0.1)
  [ responds with correct answer 10.5.6.7 ]

Em outros lugares, um host que fica na mesma visualização que o nsupdate

[email protected]:~$ foohost.example.com (resolv.conf points to above nameserver)
  [ responds with correct answer 10.5.6.7 ]

Em outros lugares, o host cai em uma visão diferente como o nsupdate

[email protected]:~$ dig foohost.example.com (resolv.conf points to above nameserver)
  [ responds with NXDOMAIN even though I'm asking the same server ]

Nesse ponto, se eu tiver paciência, o problema acabará se resolvendo (talvez 15 minutos), mas como freqüentemente não tenho o luxo de paciência, sou forçado $ rndc freeze && rndc thawa usar o servidor de nomes para corrigir o problema à força.

Por outro lado

No lado perfeitamente invertido, se eu fizer o nsupdate no servidor a partir de um endereço que se enquadre na exibição "cdn-redir", o problema será revertido. Consultas subsequentes de clientes que correspondem a "cdn-redir" obtêm o registro correto imediatamente após o nsupdate sem mexer com "rndc freeze / thaw", mas as consultas em endereços que ficam fora da visualização de "cdn-redir" agora têm o atraso / rndc bobagem.

Minha pergunta final

Se fosse tão simples quanto 42, eu a pegaria de braços abertos ...

Gostaria de evitar o "rndc freeze && rndc thaw" por medo de perder uma atualização dinâmica do servidor DHCP. Alguém sabe como sincronizar os registros atualizados entre visualizações com mais eficiência / eficácia, ou pode esclarecer onde eu posso estar errado?

Edit: BIND 9.9.5 / Ubuntu 14.04, mas aconteceu nas versões anteriores do Ubuntu e BIND.

Obrigado a todos!

Conforme solicitado por Andrew B , eis a zona editada (e parcial):

$ORIGIN .
$TTL 3600
example.com     IN SOA ns1.example.com. HOSTMASTER.example.com. (
                       2009025039 ; serial
                       900 ; refresh 15
                       600 ; retry 10
                       86400 ; expire 1 day
                       900 ; minimum 15 min
                )
                NS     ns1.example.com.
$ORIGIN example.com.
$TTL 30
AEGIS           A   10.2.1.60
                TXT "31bdb9b3dec929e051f778dda5abd0dfc7"
$TTL 86400
ts-router       A 10.1.1.1 
                A 10.1.2.1
                A 10.1.3.1
                A 10.1.4.1
                A 10.1.5.1
                A 10.1.6.1
                A 10.1.7.1
                A 10.1.8.1
                A 10.2.1.1
                A 10.2.2.1
                A 10.2.3.1
ts-server       A 10.2.1.20
ts-squid0       A 10.2.2.20
ts-squid1       A 10.2.2.21
$TTL 600
tssw4           A 10.2.3.4
tssw5           A 10.2.3.5
tssw6           A 10.2.3.6
tssw7           A 10.2.3.7
; wash rinse repeat for more hosts
$TTL 30
wintermute      A     10.2.1.61
                TXT   "003f141e5bcd3fc86954ac559e8a55700"
enragedSquirrel
fonte
Você poderia compartilhar o conteúdo do dynamic-zone.db? Ofusque os domínios, se necessário, mas eu gostaria de ver as opções de zona.
Andrew B
Como você pediu ...
enfurecidoSquirrel
Na verdade, eu queria o arquivo de inclusão, não o conteúdo do arquivo de zona. Eu queria ver a zonedeclaração porque meus pensamentos estavam indo em uma direção semelhante à de Håkan.
Andrew B
Com relação a: usuário @ ns: ~ $ nsupdate -k rndc.key> servidor localhost> zona exemplo.com. > atualizar adicione foohost.example.com. 600 A 10.5.6.7 Você pode estar ciente de que usar em servervez de local external-ip-addressconsultar o MNAME da região (no SOA da região) e levá-lo para outro servidor de nomes em outro servidor para fazer sua atualização de DNS (principalmente se você tiver um mestre oculto / escravo público) topologia de rede principal furtiva).
John Greene

Respostas:

7

Diferentes visualizações agem separadamente, é essencialmente uma conveniência sobre a execução de instâncias separadas de named. Se houver zonas com o mesmo nome em visualizações diferentes, isso é apenas uma coincidência, elas ainda serão zonas totalmente separadas, não mais relacionadas do que quaisquer outras zonas.

Ter várias zonas separadas usando o mesmo arquivo de zona não funciona em situações em que o bind está atualizando o conteúdo da zona por si próprio (zonas escravas, zonas com atualizações dinâmicas etc.). Não tenho certeza se existe o risco de corromper o próprio arquivo de zona.

Você pode definir algo parecido com o que deseja fazer, fazendo com que a zona em uma exibição seja escrava da zona com o mesmo nome na outra exibição. Essa será claramente uma configuração um pouco complicada, mas o uso de chaves TSIG para clientes de correspondência, bem como a notificação / transferência que eu acredito que deve ser possível.

Edit: O ISC publicou um artigo da KB para este cenário. Como compartilhar uma zona dinâmica entre várias visualizações? , sugerindo o mesmo tipo de configuração mencionado acima.

Este é o exemplo de configuração deles com formatação um pouco melhorada:

key "external" {
    algorithm hmac-md5;
    secret "xxxxxxxx";
};

key "mykey" {
    algorithm hmac-md5;
    secret "yyyyyyyy";
};

view "internal" {
    match-clients { !key external; 10.0.1/24; };

    server 10.0.1.1 {
        /* Deliver notify messages to external view. */
        keys { external; };
    };

    zone "example.com" {
        type master;
        file "internal/example.db";
        allow-update { key mykey; };
        also-notify { 10.0.1.1; };
    };
};

view "external" {
    match-clients { key external; any; };

    zone "example.com" {
        type slave;
        file "external/example.db";
        masters { 10.0.1.1; };
        transfer-source { 10.0.1.1; };
        // allow-update-forwarding { any; };
        // allow-notify { ... };
    };
};
Håkan Lindqvist
fonte
Depois disso, o artigo de base de conhecimento do ISC que você mencionou e outro específico para versões mais recentes que 9.9 pelo link do artigo da KB (registro necessário) mencionado acima , me ajudaram. Obrigado Håkan Lindqvist!
enragedSquirrel
Eu tive que usar transfer-source 10.0.1.1;(sem os colchetes) com o bind 9.9.5.
Calimo 24/05
1

Tendo os mesmos problemas com as visualizações, decidi me livrar deles e mover a autorização para as zonas.

Você pode substituir as visualizações nas perguntas por inclusões simples de ambos os arquivos de zona, deixar as zonas atualmente compartilhadas intocadas e adicionar a consulta de permissão {} à definição "dynamic-zone.db", como:

    zone "dynamic.zone" {
            allow-query { 10.1.1.0/24; 10.1.2.0/24; };
            type master;
            file "/etc/bind/zones/master/dynamic.zone";
            update-policy { .... };
    };

com isso, você alcança seu objetivo presumido de tornar dynamic.zone acessível somente a partir de redes especificadas e ter outras zonas públicas.

tomas
fonte