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

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:

  1. Para instalar o servidor dnsmasq, execute o seguinte comando:

    sudo yum install -y dnsmasq
  2. 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.

  3. 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
  4. 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.

  5. 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.

  6. 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
  7. 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)
    ...
  8. 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"
  9. 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:

  1. 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
  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á 6 meses