Como evitar falhas na resolução de DNS em uma instância de Linux do Amazon EC2?

6 minuto de leitura
0

Quero evitar falhas na resolução de DNS em instâncias de Linux do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

Para diminuir o uso de CPU e de rede e evitar falhas na resolução de DNS, aplique um cache DNS.

Se você usar um cache DNS para consultar recursos DNS externos, o cache responderá à maioria das consultas de DNS recorrentes localmente. Quando o cache faz isso, ele não interage com o resolvedor de DNS pela rede. Você pode consultar recursos de DNS externos, como os exemplos a seguir:

  • Amazon Relational Database Service (Amazon RDS)
  • Amazon ElastiCache
  • Amazon Simple Storage Service (Amazon S3)

O procedimento a seguir se aplica a todas as versões do Amazon Linux. Se você usa outra distribuição, selecione a documentação da sua distribuição na lista a seguir:

Resolução

Configure um cache DNS local com dnsmasq

Para configurar um cache DNS local, use dnsmasq (um servidor DHCP e DNS em cache). Para obter uma visão geral do dnsmasq, consulte a documentação do dnsmasq.

1.    Instale o servidor dnsmasq:

sudo yum install -y dnsmasq

2.    Crie um usuário de sistema dedicado para executar o dnsmasq:

sudo groupadd -r dnsmasqsudo useradd -r -g dnsmasq dnsmasq

Observação: o dnsmasq normalmente é executado como usuário raiz, mas muda para outro usuário após a inicialização (por padrão, o usuário é ninguém). Isso elimina os privilégios de raiz.

3.    Crie uma cópia do arquivo dnsmasq.conf:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.    Abra o arquivo de configuração com um editor de texto (por exemplo, vim):

sudo vim /etc/dnsmasq.conf

5.    Edite o arquivo /etc/dnsmasq.conf para que ele seja semelhante ao seguinte exemplo:

# Server Configurationlisten-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid

# Name resolution options
resolv-file=/etc/resolv.dnsmasq
cache-size=500
neg-ttl=60
domain-needed
bogus-priv

Observação: a opção bogus-priv no dnsmasq faz com que uma pesquisa reversa de DNS falhe para intervalos de IP privados que não estejam em /etc/hosts ou no arquivo de concessões de DHCP. Se você quiser realizar uma pesquisa reversa bem-sucedida, comente ou remova bogus-priv. Para obter mais informações, consulte**\ -b, --bogus-priv** na página de manual do dnsmasq.

6.    Crie o arquivo /etc/resolv.dnsmasq e, em seguida, defina o servidor Amazon DNS ou os servidores de nomes de domínio personalizados que você especificou nos conjuntos de opções de DHCP:

sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"

Observação: para obter mais informações sobre localizações de servidores DNS, consulte O que é DHCP? Em alguns casos, é preciso ajustar o arquivo /etc/resolv.dnsmasq para usar o servidor de nomes dessa rede. Ajuste o arquivo ao criar uma AMI a partir de uma instância com o cache dnsmasq para iniciar em outra VPC com um CIDR diferente. Ou ajuste o arquivo ao especificar um servidor DNS personalizado nas opções de DHCP.

7.    Reinicie o servidor dnsmasq e configure o serviço para iniciar na inicialização:

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 e Amazon Linux 2023

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

8.    Para verificar se o dnsmasq funciona corretamente, use o comando dig:

dig aws.amazon.com @127.0.0.1

Se a resposta for semelhante ao exemplo a seguir, o cache do dnsmasq funciona corretamente:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        41    IN    A    54.239.31.69

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

9.    Defina o cache DNS dnsmasq como o resolvedor de DNS padrão.

Observação: você deve suprimir o resolvedor de DNS padrão fornecido pelo DHCP. Para fazer isso, altere ou crie o arquivo /etc/dhcp/dhclient.conf. Para obter mais informações, consulte Minha instância privada do Amazon EC2 está executando Amazon Linux, Ubuntu ou RHEL. Como atribuo um servidor DNS estático à instância do EC2 que persiste durante a reinicialização?

10.    Configure o resolvedor de DNS padrão como uma opção alternativa:

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"

11.    Para aplicar a alteração, execute o comando dhclient, reinicie o serviço de rede ou reinicialize sua instância:

sudo dhclient

-ou-

sudo systemctl restart network

-ou-

sudo reboot

Para verificar se sua instância usa o cache DNS, execute o comando dig:

dig aws.amazon.com

Se a resposta indicar que o servidor de resposta é 127.0.0.1, o cache DNS está funcionando corretamente:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        55    IN    A    54.239.31.69

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) <<<-------
...

Automatize dnsmasq

Para automatizar a instalação e a configuração do dnsmasq como um resolvedor de DNS no Amazon Linux, use uma destas opções:

Se quiser automatizar a instalação do dnsmasq em outras distribuições Linux, use qualquer um dos arquivos para fazer a personalização necessária.

Ambos os arquivos podem ser executados em instâncias VPC porque usam o endereço alternativo do servidor DNS da Amazon 169.254.169.253.

Para executar qualquer arquivo no momento da inicialização passe o conteúdo do arquivo no campo de dados do usuário. Você pode executar o script Bash como um script independente ou com um comando de execução do AWS Systems Manager para realizar as ações sobre uma instância.

Para executar o script Bash como um script autônomo, conclua as seguintes etapas:

1.    Baixe o script em sua instância e torne-o executável:

wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh

2.    Execute o comando a seguir como usuário raiz ou use sudo:

sudo ./AutomateDnsmasq.sh

Informações relacionadas

Endereçamento IP de instâncias do Amazon EC2

AWS OFICIAL
AWS OFICIALAtualizada há 9 meses