Mon instance Amazon EC2 privée exécute Amazon Linux, Ubuntu ou RHEL. Comment attribuer un serveur DNS statique à l'instance EC2 qui persiste pendant le redémarrage ?

Date de la dernière mise à jour : 07/12/2020

Comment puis-je configurer une instance Amazon Elastic Compute Cloud (Amazon EC2) avec des entrées de serveur DNS statiques qui persistent pendant le redémarrage ?

Brève description

Par défaut, une instance Amazon EC2 associée à Amazon Virtual Private Cloud (Amazon VPC) demande une adresse de serveur DNS au démarrage à l'aide du protocole DHCP (Dynamic Host Configuration Protocol). La réponse DHCP renvoie les adresses de serveur DNS écrites dans le fichier local /etc/resolv.conf. Les modifications manuelles apportées au fichier resolv.conf avec des adresses de serveur DNS personnalisées sont perdues lorsque vous redémarrez l'instance. La méthode que vous utilisez pour résoudre ce problème dépend de votre distribution Linux. Pour plus d'informations sur les VPC et les serveurs DNS, consultez la section Amazon DNS Server (Serveur Amazon DNS).

Résolution

Important : avant de modifier votre instance Amazon EC2, créez une sauvegarde à l'aide d'un instantané Amazon Machine Image (AMI) ou Amazon Elastic Block Store (Amazon EBS). La modification des configurations réseau d'une instance peut rendre l'instance inaccessible.

Amazon Linux, Amazon Linux 2

Utilisez l'une des options suivantes pour configurer votre instance Amazon EC2. Si vous utilisez les deux options, les serveurs DNS spécifiés dans le fichier ifcfg-eth0 seront prioritaires (option 2).

Pour que les deux options fonctionnent, la valeur du paramètre PEERDNS dans le fichier ifcfg-eth0 doit être définie sur yes (oui). La définition du paramètre PEERDNS sur no (non) signifie que les serveurs DNS spécifiés dans les fichiers ifcfg-* ou fournis par DHCP sont ignorés.

Option 1 :

1.    Modifiez ou créez le fichier /etc/dhcp/dhclient.conf.

Remarque : vous devez disposer des privilèges d'utilisateur racine pour modifier ce fichier. Devenez utilisateur racine avec sudo -i ou exécutez toutes les commandes avec sudo.

2.    Ajoutez la commande supersede au fichier pour remplacer la commande domain-name-servers. Dans l'exemple suivant, remplacez xxx.xxx.xxx.xxx par l'adresse IP du ou des serveurs DNS que vous souhaitez que l'instance utilise :

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Après la modification précédente, le fichier resolv.conf se met à jour au redémarrage de l'instance pour ne contenir que les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez dhclient.conf (5) sur la page de manuel Linux.

3.    Définissez le paramètre PEERDNS sur yes dans les fichiers de configuration de chaque interface (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Redémarrez l'instance EC2.

Option 2 :

1.    Pour remplacer les valeurs de serveur DNS dans le fichier /etc/dhcp/dhclient.conf, spécifiez les serveurs DNS personnalisés dans les fichiers de configuration de chaque interface (/etc/sysconfig/network-scripts/ifcfg-*).

Par exemple, l'exemple suivant montre le fichier /etc/sysconfig/network-scripts/ifcfg-eth0 d'une instance Amazon Linux modifié de façon à inclure deux serveurs DNS personnalisés (DNS1 et DNS2) :

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
MTU="9001"
DNS1=8.8.8.8
DNS2=8.8.4.4

2.    Définissez le paramètre PEERDNS sur yes dans les fichiers de configuration de chaque interface (/etc/sysconfig/network-scripts/ifcfg-*).

Ubuntu 16.04

1.    Modifiez ou créez le fichier /etc/dhcp/dhclient.conf.

Remarque : vous devez disposer des privilèges d'utilisateur racine pour modifier ce fichier. Devenez utilisateur racine avec sudo -i ou exécutez toutes les commandes avec sudo.

2.    Ajoutez la commande supersede au fichier pour remplacer la commande domain-name-servers. Dans l'exemple suivant, remplacez xxx.xxx.xxx.xxx par l'adresse IP du ou des serveurs DNS que vous souhaitez que l'instance utilise :

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Après cette modification, le fichier resolv.conf se met à jour au redémarrage de l'instance pour ne contenir que les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez dhclient.conf (5) sur la page de manuel Linux.

3.    Redémarrez l'instance.

Ubuntu 18.04

Par défaut sur Ubuntu 18.04, le package netplan.io gère la configuration de l'interface réseau, et le service systemd-resolved gère les requêtes DNS à l'aide d'un résolveur stub. L'IP du solveur stub se trouve dans le fichier /etc/resolv.conf.

Le fichier /etc/resolv.conf est à son tour un lien symbolique vers le fichier /run/systemd/resolve/stub-resolv.conf. L'instruction supersede dans le fichier /etc/dhcp/dhclient.conf peut ne pas fonctionner comme prévu si l'une des conditions suivantes est vérifiée pour le fichier /etc/resolv.conf :

  • Le fichier n'est pas un lien symbolique vers l'instance.
  • Le fichier est un lien symbolique vers un autre fichier, comme le fichier /run/systemd/resolve/resolv.conf.

Chacune de ces conditions indique la personnalisation de la configuration par défaut d'Ubuntu 18.04.

Exécutez les étapes suivantes pour remplacer les valeurs de serveur DNS :

1.    Netplan stocke généralement les fichiers de configuration dans le répertoire /etc/netplan. Créez un fichier et nommez-le /etc/netplan/99-custom-dns.yaml, puis alimentez-le avec les lignes suivantes. Assurez-vous de remplacer les emplacements des adresses IP du serveur DNS par les adresses de votre choix :

network:
    version: 2
    ethernets:
        eth0:         
            nameservers:
                    addresses: [1.2.3.4, 5.6.7.8]
            dhcp4-overrides:
                    use-dns: false

Une fois ces modifications effectuées, l'IP du solveur stub est toujours dans le fichier /etc/resolv.conf. Cela est normal. L'IP du solveur stub se trouve au niveau du système d'exploitation, et en arrière-plan, le solveur stub utilise les serveurs DNS que vous avez spécifiés dans le fichier précédent 99-custom-dns.yaml.

2.    Redémarrez l'instance.

3.    Exécutez la commande systemd-resolve pour confirmer que le système récupère correctement les adresses IP du serveur DNS prévues :

systemd-resolve --status

RHEL 7.5

Par défaut, le service NetworkManager gère le fichier resolv.conf. Le service alimente ensuite le fichier avec des serveurs DNS fournis par le DHCP. Empêchez NetworkManager de gérer le fichier resolv.conf afin que le fichier resolv.conf ignore les serveurs DNS fournis par DHCP.

Option 1 :

1.    Modifiez ou créez le fichier /etc/dhcp/dhclient.conf.

Remarque : vous devez disposer des privilèges d'utilisateur racine pour modifier ce fichier. Devenez utilisateur racine avec sudo -i ou exécutez toutes les commandes avec sudo.

2.    Ajoutez la commande supersede au fichier pour remplacer la commande domain-name-servers. Dans l'exemple suivant, remplacez xxx.xxx.xxx.xxx par l'adresse IP du ou des serveurs DNS que vous souhaitez que l'instance utilise :

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Après cette modification, le fichier resolv.conf se met à jour au redémarrage de l'instance pour ne contenir que les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez dhclient.conf (5) sur la page de manuel Linux.

3.    Définissez le paramètre PEERDNS sur yes dans les fichiers de configuration de chaque interface (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Redémarrez l'instance.

Option 2 :

1.    Créez le fichier /etc/NetworkManager/conf.d/disable-resolve.conf-managing.conf avec le contenu suivant :

[main]
dns=none

2.    Redémarrez l'instance, puis remplissez le fichier /etc/resolv.conf manuellement.


networkmanager.conf(5) - Linux man page (networkmanager.conf (5) - page man - Linux)

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


Besoin d'aide pour une question technique ou de facturation ?