¿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 la distribución en la siguiente lista:
- En el caso de Debian, consulte Local caching en el sitio web debian.org.
- En el caso de Ubuntu, consulte Local DNS cache en el sitio web de Ubuntu.
- En el caso de 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
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:
- Script de Bash AutomateDnsmasq.sh
- Directivas AutomateDnsmasq.cloudinit
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
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 8 meses
- OFICIAL DE AWSActualizada hace 5 años
- OFICIAL DE AWSActualizada hace 2 años