Como evitar falhas na resolução de DNS em uma instância de Linux do Amazon EC2?
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:
- Para Debian, consulte Cache local no site debian.org.
- Para Ubuntu, consulte Cache DNS local no site do Ubuntu.
- Para RHEL, consulte How to configure DNS caching server with dnsmasq in RHEL (Como configurar o servidor de cache DNS com dnsmasq no RHEL) no portal do cliente da Red Hat.
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:
- Script bash AutomateDnsmasq.sh
- Diretivas AutomateDnsmasq.cloudinit
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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há um ano