Eu executo instâncias do Ubuntu 14.04 no AWS EC2 em um VPC. Eles usam o servidor de nomes fornecido pelo nosso VPC. Cada pesquisa de DNS por um processo é enviada ao servidor de nomes da VPC. Nossos processos fazem muitas pesquisas e algumas falham, resultando em processos bloqueados.
Desejo corrigir isso instalando um resolvedor DNS de cache local em cada máquina. Este resolvedor irá escutar 127.0.0.1:53
, servindo processos locais. O resolvedor será listado em /etc/resolv.conf
, ou seja, nameserver 127.0.0.1
em vez do servidor de nomes VPC, fornecerei 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?
Tenho mais um requisito: o resolvedor local encaminhará as 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 parecido. Eu adicionaria um gancho que pega o IP do servidor de nomes fornecido pelo DHCP, injeta-o na configuração do meu resolvedor de DNS local e, em seguida, reinicia o daemon do resolvedor de DNS local. Mas isso é muito complicado e quero evitar fazer isso. (Os scripts padrão no Ubuntu 14.04 parecem ter algum conhecimento embutido de nscd
and dnscache
e, possivelmente, fazem o que eu quero, mas não está claro.)
Qual é a maneira "abençoada" de executar um resolvedor DNS de cache local no Ubuntu 14.04? Em particular, como faço para que o resolvedor local encaminhe para o servidor de nomes DHCP padrão?
Responder1
A maneira mais fácil é provavelmente o nscd.
Instale o nscd, usando a configuração padrão.
Atualize /etc/nsswitch.conf e adicione cache
antes dns
à linha de hosts.(Editar: esta parte não é aplicável ao glibc usado na maioria das distribuições Linux, mas é necessário no fbsd)
hosts: files cache dns
Teste
tcpdump -v -n 'port 53'
getent hosts superuser.com
Você não deve precisar alterar 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, uma vez que faz parte da glibc.