Comment puis-je éviter les échecs de résolution DNS avec une instance Linux Amazon EC2 ?

Dernière mise à jour : 23/06/2020

Comment puis-je éviter les échecs de résolution DNS avec Amazon Elastic Compute Cloud (Amazon EC2) Linux ?

Brève description

Appliquez un cache DNS pour réduire l'utilisation du processeur et du réseau et éviter les échecs de résolution DNS.

Lorsque vous utilisez un cache DNS pour interroger des ressources DNS externes, telles que l'une des applications AWS suivantes, le cache répond à la plupart des requêtes DNS récurrentes localement sans interagir avec le résolveur DNS sur le réseau :

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

La procédure suivante s'applique à toutes les versions d'Amazon Linux. Si vous utilisez une autre distribution, sélectionnez la documentation de votre distribution dans la liste suivante :

Résolution

Configurez un cache DNS local à l'aide de dnsmasq (un serveur DHCP et un serveur de mise en cache DNS). Pour obtenir un aperçu de dnsmasq, consultez la documentation dnsmasq.

1.     Installez le serveur dnsmasq en exécutant la commande suivante :

sudo yum install -y dnsmasq

2.     Créez un utilisateur système dédié pour exécuter dnsmasq à l'aide des commandes suivantes :

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

Remarque : dnsmasq s'exécute généralement en tant qu'utilisateur racine, mais supprime les privilèges racine après le démarrage en devenant un autre utilisateur (par défaut, l'utilisateur est « personne »).

3.     Créez une copie du fichier dnsmasq.conf à l'aide de la commande suivante :

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

4.     Ouvrez le fichier de configuration à l'aide d'un éditeur de texte (par exemple, vim) :

sudo vim /etc/dnsmasq.conf

5.     Modifiez le fichier /etc/dnsmasq.conf afin qu'il soit semblable à ce qui suit :

# Server Configuration
listen-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

6.     Créez le fichier /etc/resolv.dnsmasq puis définissez le serveur DNS d'Amazon ou les serveurs de noms de domaine personnalisés que vous avez spécifiés dans les jeux d'options DHCP.

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

Remarque : pour EC2-Classic, le serveur DNS d'Amazon se trouve à l'adresse 172.16.0.23. Pour EC2-VPC, vous trouverez plus d'informations sur les emplacements des serveurs DNS dans Jeux d'options DHCP. Si vous créez une AMI à partir d'une instance avec le cache dnsmasq à lancer dans un autre VPC avec un CIDR différent, ou si vous avez un serveur DNS personnalisé spécifié dans vos options DHCP, ajustez le fichier /etc/resolv.dnsmasq pour utiliser le serveur de noms pour ce réseau.

7.     Redémarrez le serveur dnsmasq et définissez le service de sorte pour qu'il se lance au démarrage à l'aide des commandes suivantes :

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2

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

8.     Vérifiez que dnsmasq fonctionne correctement à l'aide de la commande dig :

dig aws.amazon.com @127.0.0.1

Si la réponse est semblable à la suivante, c'est que le cache dnsmasq fonctionne correctement :

; <<>> 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.     Définissez le cache DNS dnsmasq comme le résolveur DNS par défaut.

Remarque : vous devez supprimer le résolveur DNS par défaut fourni par DHCP en modifiant ou en créant le fichier /etc/dhcp/dhclient.conf. Pour plus d'informations, consultez la section Mon instance Amazon EC2 privée exécute Amazon Linux, Ubuntu ou RHEL. Comment puis-je attribuer à l'instance EC2 un serveur DNS statique qui est conservé pendant le redémarrage ?

10.    Configurez le résolveur DNS par défaut comme option de secours à l'aide des commandes suivantes :

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

11.    Pour appliquer la modification, exécutez la commande dhclient ou redémarrez votre instance :

sudo dhclient

- ou -

sudo reboot

Pour vérifier que votre instance utilise le cache DNS, exécutez la commande dig :

dig aws.amazon.com

Si la réponse indique que le serveur répondant à votre demande DNS est 127.0.0.1, cela signifie que le cache DNS fonctionne correctement :

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

Automatisation

Vous pouvez utiliser l'une des méthodes suivantes pour automatiser l'installation et la configuration de dnsmasq comme résolveur DNS sur Amazon Linux :

Si vous souhaitez automatiser l'installation dnsmasq sur d'autres distributions Linux, vous pouvez utiliser l'un ou l'autre des fichiers pour effectuer les personnalisations nécessaires.

Les deux fichiers peuvent être exécutés sur des instances VPC ou EC2-Classic, car ils utilisent l'adresse alternative du serveur DNS d'Amazon qui est 169.254.169.253 pour VPC et 172.16.0.23 pour EC2-Classic.

Vous pouvez exécuter l'un ou l'autre fichier au moment du lancement en passant le contenu du fichier dans le champ des données utilisateur. Vous pouvez exécuter le script Bash comme script autonome ou avec une fonctionnalité AWS Systems Manager Run Command pour effectuer les actions sur une instance existante.

Pour exécuter le script Bash comme script autonome :

1.    Téléchargez le script sur l'instance et rendez-le exécutable.

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

2.    Exécutez la commande suivante comme utilisateur racine ou utilisez sudo.

sudo ./AutomateDnsmasq.sh

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?