BIND / Nome: recursão desativada, cliente para usar servidores alternativos

2

Estou configurando um servidor DNS simples (BIND / Named), que está sendo executado localmente em um laptop OSX.

Sua finalidade é resolver todas as solicitações de "* .laptop.example.com" para "192.168.2.2" - que é o endereço IP atribuído manualmente (não o DHCP) de uma interface de rede virtual.

Estou usando uma interface de rede virtual (fornecida pela Parallels) para garantir que o endereço IP permaneça sempre o mesmo (a eth0 mudará seu endereço IP quando conectado a redes diferentes) e também para garantir que esteja sempre disponível (eth0 desativado / indisponível quando um cabo de rede não está conectado).

Eu tenho usado a seguinte configuração:

options {

  ...

  forwarders {
    192.168.1.1;
  };
  forward only;

};

No entanto, isso requer que a configuração seja atualizada sempre que o laptop mudar de rede (já que a maioria das redes tem um endereço DNS diferente para usar).

Eu gostaria de descartar esse requisito para que, se o BIND / Named não reconhecer o nome de domínio (ou seja, não seja um subdomínio de "laptop.example.com"), ele retorne um erro para que o laptop possa tente o segundo endereço DNS que ele tem no registro (aquele que ele pegou do DHCP).

Uma possibilidade é usar:

options {

  ...

  forwarders {
  };
  forward only;

  recursion no;

};

O que impede que ele gaste mais de 3 segundos para consultar os servidores ROOT ... no entanto, o cliente interpreta essa resposta como "o domínio não existe", em vez de um erro que pode ser corrigido ao tentar o próximo servidor. / p>     

por Craig Francis 13.07.2009 / 01:51

4 respostas

1

Obrigado Alnitak, duffbeer703, John Gardeniers, todos muito bons comentários.

A solução que usei para o meu problema é usar o launchd para detectar as alterações no /etc/resolv.conf e atualizar a lista de encaminhadores.

Criando o arquivo:

/Library/LaunchDaemons/myname.update.plist

Com o conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>myname.update</string>
    <key>ProgramArguments</key>
    <array>
        <string>[PATH]/update.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

E carregando isso com:

launchctl load /Library/LaunchDaemons/myname.update.plist
launchctl start myname.update

Um script em:

[PATH]/update.sh

Pode executar algo como:

DST="/var/named/forwarders.conf";

echo "forwarders {" > $DST

cat /etc/resolv.conf | \
    grep -v -E "(127.0.0.1|localhost)" | \
    awk '{ sub("^nameserver ", "\t"); sub("$", ";"); print }' >> $DST

echo "};" >> $DST

E, na configuração nomeada, pode usá-lo com:

options {
    directory "[PATH]/conf/";
    listen-on { 127.0.0.1; [IP_ADDRESS_HOST]; };
    include "/var/named/forwarders.conf";
    forward only;
};

Se você quiser ver ou usar a implementação completa, acesse minha página de configuração do BIND e use o formulário de download ... ele cria um pacote ZIP com um único script de instalação, portanto, é muito fácil configurar e usar.

    
por 13.07.2009 / 17:25
0

Por que não apenas adicionar uma entrada ao arquivo hosts e salvar tudo o que se incomoda?

    
por 13.07.2009 / 02:04
0

Você pode querer entrar em mais detalhes sobre o que você está tentando fazer - isso não faz muito sentido. Meu conselho é não ajustar os fundamentos do DNS - você está quebrando algo que simplesmente funciona.

Os servidores DNS primários e secundários estão na sua configuração de rede para disponibilidade. Se um servidor DNS não puder fornecer uma resposta, o cliente não irá para o servidor secundário - o pessoal que inventou o DNS implementou o conceito de "recursão" para resolver esse problema.

Se você estiver usando Macs, poderá descobrir que usar o Bonjour / mDNS é um caminho mais produtivo.

    
por 13.07.2009 / 06:09
0

Tente usar unbound em seu lugar.

Embora seja basicamente um servidor recursivo, acredito que ele tem a capacidade de fornecer a substituição de caractere curinga que você precisa, bem como encaminhar todo o restante para os servidores DNS upstream atuais aprendidos automaticamente de /etc/resolv.conf .

    
por 13.07.2009 / 09:30