¿Cómo puedo evitar errores de resolución de DNS con una instancia de Linux de Amazon EC2?
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 su distribución en la siguiente lista:
- Para obtener información sobre Debian, consulte Local caching en el sitio web debian.org.
- Para obtener información sobre Ubuntu, consulte Local DNS cache en el sitio web de Ubuntu.
- Para obtener información sobre Red Hat Enterprise Linux (RHEL), consulte How to configure DNS caching server with dnsmasq in RHEL en el portal para clientes de Red Hat.
Resolución
Configurar una caché local de DNS con dnsmasq
Para configurar una memoria caché DNS local, utilice dnsmasq. Para obtener más información, consulte dnsmasq en el sitio web thekelleys.org.uk.
Siga estos pasos:
-
Para instalar el servidor dnsmasq, ejecute el siguiente comando:
sudo yum install -y dnsmasq
-
Para crear un usuario de sistema dedicado para ejecutar dnsmasq, ejecute el siguiente comando:
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. Cuando dnsmasq cambia a otro usuario, se anulan los privilegios del usuario raíz.
-
Para crear una copia del archivo dnsmasq.conf, ejecute el siguiente comando:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
Para abrir el archivo de configuración con un editor de texto, ejecute el siguiente comando:
sudo vim /etc/dnsmasq.conf
-
Para editar el archivo /etc/dnsmasq.conf, ejecute el siguiente comando de 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. Esta opción también puede provocar un error en la búsqueda de DNS inversa para el archivo de concesiones del protocolo de configuración dinámica de host (DHCP). Si desea realizar una búsqueda inversa satisfactoria, comente o elimine bogus-priv.
-
Cree el archivo /etc/resolv.dnsmasq. A continuación, para configurar el servidor DNS de Amazon o los servidores de nombres de dominio personalizados que especificó en los conjuntos de opciones de DHCP, ejecute el siguiente comando:
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, se debe 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.
-
Para reiniciar el servidor dnsmasq y configurar el servicio para que se inicie al arrancar, realice una de las siguientes acciones.
Para iniciar Amazon Linux 1 al arrancar, ejecute el siguiente comando:sudo service dnsmasq restart sudo chkconfig dnsmasq on
Para iniciar Amazon Linux 2 y Amazon Linux 2023 al reiniciar, ejecute el siguiente comando:
sudo systemctl restart dnsmasq.service sudo systemctl enable dnsmasq.service
-
Para comprobar que dnsmasq funcione correctamente, utilice el siguiente 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) ...
-
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 ¿Cómo puedo asignar a la instancia de EC2 un servidor DNS estático que persista durante el reinicio?A continuación, para configurar el solucionador de DNS predeterminado como opción alternativa, ejecute el siguiente comando:
sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
-
Para aplicar el cambio, realice una de las siguientes acciones. Ejecute el siguiente comando ** dhclient**:
sudo dhclient
Alternativa:
Para reiniciar el servicio de red, ejecute el siguiente comando:sudo systemctl restart network
Alternativa:
Para reiniciar la instancia, ejecute el siguiente comando:sudo reboot
Nota: Para Amazon Linux 2023, ejecute
sudo systemctl restart systemd-networkd.service
en lugar de dhclient.
Para comprobar si la instancia utiliza la caché de DNS, ejecute el siguiente 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.
Ejemplo de respuesta:; <<>> 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:
- Script de Bash AutomateDnsmasq.sh
- Directivas AutomateDnsmasq.cloudinit
Para obtener más información sobre el script deBash ** AutomateDnsmasq.sh**, consulte #! /bin/bash en el sitio web de GitHub.
Para obtener más información sobre las directivas ** AutomatedNSMASQ.CloudInit**, consulte #cloud -config en el sitio web de GitHub.
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.
Cuando ambos archivos utilizan la dirección alternativa del servidor DNS de Amazon, que es 169.254.169.253, los archivos pueden ejecutar instancias de VPC.
Para ejecutar cualquiera de los archivos durante el lanzamiento, transfiera el contenido del archivo en el campo de los datos de usuario. Para realizar las acciones en una instancia, puede ejecutar el script de Bash como script independiente o utilizar un comando de ejecución de AWS Systems Manager.
Para ejecutar el script de Bash como script independiente, siga estos pasos:
-
Para descargar el script en su instancia y hacerlo ejecutable, ejecute el siguiente comando:
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh
-
Ejecute el siguiente comando como usuario raíz o utilice sudo:
sudo ./AutomateDnsmasq.sh
Información relacionada
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 4 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 10 meses