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

Lecture de 6 minute(s)
0

Je souhaite éviter les échecs de résolution DNS avec les instances Linux Amazon Elastic Compute Cloud (Amazon EC2).

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.

Si vous utilisez un cache DNS pour interroger des ressources DNS externes, le cache répond localement à la plupart des requêtes DNS récurrentes. Lorsque le cache effectue cette opération, il n'interagit pas avec le résolveur DNS sur le réseau. Vous pouvez interroger des ressources DNS externes, comme :

  • 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 relative à votre distribution dans la liste suivante :

Résolution

Configuration d’un cache DNS local avec dnsmasq

Pour configurer un cache DNS local, utilisez dnsmasq (un serveur DHCP et un serveur de mise en cache DNS). Pour en savoir plus sur dnsmasq, consultez la documentation de dnsmasq.

1.    Installez le serveur dnsmasq :

sudo yum install -y dnsmasq

2.    Créez un utilisateur système dédié pour exécuter dnsmasq :

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

Remarque : dnsmasq s'exécute généralement en tant qu'utilisateur root, mais passe à un autre utilisateur après le démarrage (par défaut, l'utilisateur est « personne »). Les privilèges root sont alors supprimés.

3.    Créez une copie du fichier dnsmasq.conf :

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

4.    Ouvrez le fichier de configuration avec un éditeur de texte (par exemple, vim) :

sudo vim /etc/dnsmasq.conf

5.    Modifiez le fichier /etc/dnsmasq.conf de manière à ce qu'il ressemble à l'exemple suivant :

# 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

Remarque : l'option bogus-priv de dnsmasq entraîne l'échec d'une recherche DNS inversée pour les plages d'adresses IP privées qui ne figurent pas dans /etc/hosts ou dans le fichier des baux DHCP. Si vous souhaitez réussir une recherche inversée, vous devez commenter ou supprimer bogus-priv. Pour en savoir plus, consultez la section -b, --bogus-priv sur la page de manuel de dnsmasq.

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

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

Remarque : pour en savoir plus sur l'emplacement des serveurs DNS, consultez la section Qu'est-ce que le DHCP ?Dans certains cas, il peut être nécessaire d’ajuster le fichier /etc/resolv.dnsmasq pour utiliser le serveur de noms de ce réseau. Vous devez ajuster le fichier lorsque vous créez une AMI à partir d'une instance avec le cache dnsmasq pour la lancer dans un autre VPC avec un autre CIDR. Vous pouvez également ajuster le fichier lorsque vous spécifiez un serveur DNS personnalisé dans vos options DHCP.

7.    Redémarrez le serveur dnsmasq et configurez le service pour qu'il se lance au démarrage :

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 et Amazon Linux 2023

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

8.    Pour vérifier que dnsmasq fonctionne correctement, utilisez la commande dig :

dig aws.amazon.com @127.0.0.1

Si la réponse est similaire à l'exemple suivant, 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 résolveur DNS par défaut.

Remarque : vous devez supprimer le résolveur DNS par défaut fourni par DHCP. Pour cela, modifiez ou créez le fichier /etc/dhcp/dhclient.conf. Pour en savoir plus, consultez la page Mon instance Amazon EC2 privée exécute Amazon Linux, Ubuntu ou RHEL. Comment attribuer un serveur DNS statique à l'instance EC2 qui persiste lors du redémarrage ?

10.    Configurez le résolveur DNS par défaut comme option de secours :

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, redémarrez le service réseau ou redémarrez votre instance :

sudo dhclient

-ou-

sudo systemctl restart network

-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 qui répond est 127.0.0.1, 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 de dnsmasq

Pour automatiser l'installation et la configuration de dnsmasq en tant que résolveur DNS sur Amazon Linux, veuillez utiliser l'une des options suivantes :

Si vous souhaitez automatiser l'installation de dnsmasq sur d'autres distributions Linux, utilisez l'un ou l'autre des fichiers pour effectuer la personnalisation nécessaire.

Les deux fichiers peuvent être exécutés sur des instances VPC car ils utilisent l'adresse alternative du serveur Amazon DNS, soit 169.254.169.253.

Pour exécuter l'un des fichiers au moment du lancement, vous devez transmettre le contenu du fichier dans le champ des données utilisateur. Vous pouvez exécuter le script Bash en tant que script autonome ou à l'aide d'une commande d'exécution d'AWS Systems Manager pour effectuer les actions sur une instance.

Pour exécuter le script Bash en tant que script autonome, procédez comme suit :

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

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

2.    Exécutez la commande suivante en tant qu'utilisateur root ou utilisez sudo :

sudo ./AutomateDnsmasq.sh

Informations connexes

Adressage IP des instances Amazon EC2

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 9 mois