BIND/Nomeado: recursão desabilitada, cliente deve usar servidores alternativos

BIND/Nomeado: recursão desabilitada, cliente deve usar servidores alternativos

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

Seu objetivo é resolver todas as solicitações de "*.laptop.example.com" para "192.168.2.2" - que é o endereço IP atribuído manualmente (nã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 (eth0 mudará seu endereço IP quando conectado a redes diferentes) e também para garantir que esteja sempre disponível (eth0 está desabilitado/indisponível quando um cabo de rede não está conectado).

Tenho usado a seguinte configuração:

options {

  ...

  forwarders {
    192.168.1.1;
  };
  forward only;

};

No entanto, isso exige 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 eliminar esse requisito para que, se o BIND/Named não reconhecer o nome de domínio (ou seja, não for um subdomínio de "laptop.example.com"), ele retorne um erro para que o laptop possa tentar o segundo Endereço DNS registrado (um que foi obtido do DHCP).

Uma possibilidade é usar:

options {

  ...

  forwarders {
  };
  forward only;

  recursion no;

};

O que impede que ele gaste mais de 3 segundos consultando 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 tentando o próximo servidor.

Responder1

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

A solução que usei para o meu problema é usar o launchd para detectar as alterações em /etc/resolv.conf e, em seguida, 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 então na configuração nomeada, ele 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, vá paraminha página de configuração do BINDe use o formulário de download... ele cria um pacote ZIP com um único script de instalação, então espero que seja bastante simples de configurar e usar.

Responder2

Por que não apenas adicionar uma entrada ao arquivo hosts e salvar todo esse incômodo?

Responder3

Você pode querer entrar em mais detalhes sobre o que 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ário e secundário estão na configuração da sua rede para disponibilidade. Se um servidor DNS não puder fornecer uma resposta, o cliente não irá para o servidor secundário – as pessoas que inventaram o DNS implementaram o conceito de “recursão” para resolver esse problema.

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

Responder4

Tente usarunboundem vez de.

Embora seja principalmente um servidor recursivo, acredito que ele tenha a capacidade de fornecer a substituição de curinga necessária, bem como encaminhar todo o resto para oatualservidores DNS upstream, conforme aprendido automaticamente em /etc/resolv.conf.

informação relacionada