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 obter informações sobre o Debian, consulte Cache local no site debian.org.
- Para obter informações sobre o Ubuntu, consulte Cache DNS local no site do Ubuntu.
- Para obter informações sobre o Red Hat Enterprise Linux (RHEL), consulte Como configurar o servidor de cache DNS com dnsmasq no RHEL no portal do cliente Red Hat.
Resolução
Configurar um cache DNS local com dnsmasq
Para configurar um cache DNS local, use dnsmasq. Para obter mais informações, consulte dnsmasq no site thekelleys.org.uk.
Conclua as seguintes etapas:
-
Para instalar o servidor dnsmasq, execute o seguinte comando:
sudo yum install -y dnsmasq
-
Para criar um usuário de sistema dedicado para executar o dnsmasq, execute os comandos a seguir:
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 é nobody. Quando dnsmasq muda para outro usuário, os privilégios de raiz são eliminados.
-
Para criar uma cópia do arquivo dnsmasq.conf, execute o comando a seguir:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
Para abrir o arquivo de configuração com um editor de texto, execute o seguinte comando:
sudo vim /etc/dnsmasq.conf
-
Para editar o arquivo /etc/dnsmasq.conf, execute o seguinte comando de 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. Essa opção também pode fazer com que a pesquisa reversa de DNS falhe para o arquivo de leasing do Dynamic Host Configuration Protocol (DHCP). Se você quiser realizar uma pesquisa reversa bem-sucedida, comente ou remova bogus-priv.
-
Criar o arquivo /etc/resolv.dnsmasq. Em seguida, para definir o servidor Amazon DNS ou os servidores de nomes de domínio personalizados que você especificou nos conjuntos de opções de DHCP, execute o seguinte comando:
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.
-
Para reiniciar o servidor dnsmasq e configurar o serviço para iniciar na inicialização, execute uma das seguintes ações.
Para iniciar o Amazon Linux 1 na inicialização, execute o seguinte comando:sudo service dnsmasq restart sudo chkconfig dnsmasq on
Para iniciar o Amazon Linux 2 e o Amazon Linux 2023 na reinicialização, execute o seguinte comando:
sudo systemctl restart dnsmasq.service sudo systemctl enable dnsmasq.service
-
Para verificar se o dnsmasq funciona corretamente, use o seguinte comando dig:
dig aws.amazon.com @127.0.0.1
Se a resposta for semelhante à resposta no 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) ...
-
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 Como atribuo um servidor DNS estático a uma instância do Amazon EC2 que persiste quando eu reinicializo?Em seguida, para configurar o resolvedor de DNS padrão como uma opção alternativa, execute os seguintes comandos:
sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
-
Para aplicar a alteração, execute uma das ações a seguir. Execute o seguinte comando dhclient:
sudo dhclient
-ou-
Para reiniciar o serviço de rede, execute o seguinte comando:sudo systemctl restart network
-ou-
Para reinicializar sua instância, execute o seguinte comando:sudo reboot
**Observação:**para o Amazon Linux 2023, execute
sudo systemctl restart systemd-networkd.service
em vez do dhclient.
Para verificar se sua instância usa o cache DNS, execute o seguinte 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:
Exemplo de resposta:; <<>> 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) <<<------- ...
Automatizar 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
Para obter mais informações sobre o script bash AutomateDnsmasq.sh, consulte #! /bin/bash no site do GithHub.
Para obter mais informações sobre as diretivas AutomateDnsmasq.cloudinit, consulte #cloud-config no site do GithHub.
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 usam o endereço alternativo do servidor DNS da Amazon de 169.254.169.253, os arquivos podem ser executados em instâncias VPC.
Para executar qualquer arquivo no momento da inicialização passe o conteúdo do arquivo no campo de dados do usuário. Para realizar as ações em uma instância, você pode executar o script Bash como um script independente ou usar um comando de execução do AWS Systems Manager.
Para executar o script Bash como um script autônomo, conclua as seguintes etapas:
-
Para baixar o script em sua instância e torná-lo executável, execute o seguinte comando:
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh
-
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á um ano
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano