¿Cómo puedo evitar errores de resolución de DNS con una instancia de Linux de Amazon EC2?

6 minutos de lectura
0

Quiero evitar errores de resolución de DNS con las instancias de Linux de Amazon Elastic Compute Cloud (Amazon EC2).

Breve descripción

Para reducir el uso de la CPU y la red, además de evitar errores de resolución de DNS, aplique una caché de DNS.

Si utiliza una caché de DNS para consultar recursos externos de DNS, la caché responderá a la mayoría de las consultas de DNS recurrentes de forma local. Al hacerlo, la caché no interactúa con el solucionador de DNS a través de la red. Puede consultar recursos de DNS externos como los de estos ejemplos:

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

El siguiente procedimiento se aplica a todas las versiones de Amazon Linux. Si utiliza otra distribución, seleccione la documentación de la distribución en la siguiente lista:

Resolución

Configurar una caché local de DNS con dnsmasq

Configure una caché local de DNS mediante dnsmasq (un servidor de caché de DNS y DHCP). Para obtener una descripción general de dnsmasq, consulte la documentación de dnsmasq.

1.    Instale el servidor dnsmasq:

sudo yum install -y dnsmasq

2.    Cree un usuario de sistema exclusivamente para ejecutar dnsmasq:

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

Nota: dnsmasq se suele ejecutar como usuario raíz, pero cambia a otro usuario tras el startup (de manera predeterminada, el usuario es nadie). De este modo se anulan los privilegios del usuario raíz.

3.    Cree una copia del archivo dnsmasq.conf:

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

4.    Abra el archivo de configuración con un editor de texto (por ejemplo, vim):

sudo vim /etc/dnsmasq.conf

5.    Edite el archivo /etc/dnsmasq.conf de modo que se parezca al ejemplo:

# 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

Nota: La opción bogus-priv en dnsmasq provoca el fallo de una búsqueda inversa de DNS en el caso de los intervalos de IP privados no incluidos en /etc/hosts ni en el archivo de concesiones de DHCP. Si desea realizar una búsqueda inversa satisfactoria, comente o elimine bogus-priv. Para obtener más información, consulte -b, --bogus-priv en la página dnsmasq man.

6.    Cree el archivo /etc/resolv.dnsmasq y, a continuación, configure el servidor DNS de Amazon o los servidores de nombres de dominio personalizados que especificó en los conjuntos de opciones de DHCP:

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

Nota: Para obtener más información sobre las ubicaciones de los servidores DNS, consulte ¿Qué es DHCP? En algunos casos, es necesario ajustar el archivo /etc/resolv.dnsmasq para usar el servidor de nombres para esa red. Ajuste el archivo al crear una AMI a partir de una instancia con la caché dnsmasq para lanzarla en otra VPC con un CIDR diferente. También puede ajustar el archivo cuando especifique un servidor DNS personalizado en las opciones de DHCP.

7.    Reinicie el servidor dnsmasq y establezca el servicio para que se inicie con el arranque:

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 y Amazon Linux 2023

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

8.    Para comprobar que dnsmasq funcione correctamente, utilice el comando dig:

dig aws.amazon.com @127.0.0.1

Si la respuesta es parecida a la del siguiente ejemplo, la caché dnsmasq funciona correctamente:

; <<>> 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.    Configure la caché de DNS dnsmasq como solucionador de DNS predeterminado.

Nota: Debe suprimir el solucionador de DNS predeterminado que proporciona DHCP. Para ello, modifique o cree el archivo /etc/dhcp/dhclient.conf. Para obtener más información, consulte Mi instancia privada de Amazon EC2 ejecuta Amazon Linux, Ubuntu o RHEL. ¿Cómo puedo asignar un servidor DNS estático a la instancia de EC2 que persiste durante el reinicio?

10.    Configure el solucionador de DNS predeterminado como opción de reserva:

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

11.    Para aplicar el cambio, ejecute el comando dhclient, reinicie el servicio de red o reinicie la instancia:

sudo dhclient

-o-

sudo systemctl restart network

-o-

sudo reboot

Para comprobar si la instancia utiliza la caché de DNS, ejecute el comando dig:

dig aws.amazon.com

Si la respuesta indica que el servidor que responde es 127.0.0.1, la caché de DNS funciona correctamente:

; <<>> 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) <<<-------
...

Automatización de dnsmasq

Puede utilizar una de las siguientes opciones para automatizar la instalación y la configuración de dnsmasq como solucionador de DNS en Amazon Linux:

Si desea automatizar la instalación de dnsmasq en otras distribuciones de Linux, puede utilizar cualquiera de los archivos para realizar la personalización necesaria.

Ambos archivos se pueden ejecutar en instancias de VPC porque utilizan la dirección alternativa del servidor DNS de Amazon, que es 169.254.169.253.

Para ejecutar cualquiera de los archivos durante el lanzamiento, transfiera el contenido del archivo en el campo de los datos de usuario. Puede ejecutar el script de Bash como script independiente o con un comando de ejecución de AWS Systems Manager para realizar las acciones en una instancia.

Para ejecutar el script de Bash como script independiente, siga estos pasos:

1.    Descargue el script en su instancia y haga que sea ejecutable:

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

2.    Ejecute el siguiente comando como usuario raíz o utilice sudo:

sudo ./AutomateDnsmasq.sh

Información relacionada

Direccionamiento IP de instancias Amazon EC2

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 9 meses