Como posso executar um resolvedor DNS de cache local no Ubuntu 14.04?

1

Eu executo instâncias do Ubuntu 14.04 no AWS EC2 em um VPC. Estes usam o servidor de nomes fornecido pelo nosso VPC. Cada pesquisa de DNS por um processo é enviada para o servidor de nomes VPC. Nossos processos realizam muitas pesquisas e alguns falham, resultando em processos bloqueados.

Desejo corrigir isso instalando um resolvedor DNS de cache local em todas as máquinas. Este resolvedor irá escutar 127.0.0.1:53 , servindo processos locais. O resolvedor será listado em /etc/resolv.conf , ou seja, eu terei nameserver 127.0.0.1 em vez do servidor de nomes VPC fornecido dinamicamente via DHCP.

Existem muitos programas alternativos para isso: bind9 , nscd , dnsmasq , dnscache , etc. Mas parece haver muitas maneiras de gerenciar manualmente /etc/resolv.conf , por exemplo. marcando o arquivo como somente leitura ou editando /etc/network/interfaces ou editando /etc/dhcp/dhclient.conf . Qual é recomendado?

Eu tenho mais um requisito: o resolvedor local encaminhará pesquisas para o servidor de nomes VPC, nossa autoridade confiável para informações de DNS. No entanto, os programas listados não parecem se comportar dessa maneira. Em vez disso, eles encaminham suas pesquisas para servidores de nomes raiz pré-configurados.

Teoricamente, eu poderia fazer isso funcionar personalizando dhclient-script , resolvconf ou algo assim. Gostaria de adicionar um gancho que leva o IP do servidor de nomes fornecido pelo DHCP, injeta-o na configuração do meu resolvedor de DNS local, em seguida, reinicie o daemon de resolução de DNS local. Mas isso é bem cabeludo, e eu quero evitar fazer isso. (Os scripts padrão no Ubuntu 14.04 parecem ter algum conhecimento inerente de nscd e dnscache , e, possivelmente, fazer o que eu quero, mas é muito claro.)

Qual é a maneira "abençoada" de executar um resolvedor DNS de cache local no Ubuntu 14.04? Em particular, como faço o resolvedor local encaminhar para o servidor de nomes DHCP padrão?

    
por jameshfisher 02.02.2018 / 17:37

1 resposta

1

A maneira mais fácil é provavelmente nscd.

Instale o nscd, usando a configuração padrão.

Atualize /etc/nsswitch.conf e adicione cache antes de dns à linha de hosts. (Edit: esta parte não é aplicável ao glibc como é usado na maioria das distribuições do Linux, mas é necessária no fbsd)

hosts: files cache dns

Teste

tcpdump -v -n 'port 53'
getent hosts superuser.com

Você não precisa manipular o /etc/resolve.conf ou mesmo capturar o resolvedor dhcp para atualizar o upstream do nscd. O nsswitch roteará corretamente as chamadas gethost * através do servidor de cache, já que ele faz parte da glibc.

    
por 02.02.2018 / 17:56