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 : 23/01/2020

Comment configurer une instance Amazon Elastic Compute Cloud (Amazon EC2) avec des entrées de serveur DNS statiques de sorte que celui-ci perdure lorsque l'instance est redémarrée ?

Brève description

Le comportement par défaut d'une instance Amazon EC2 associée à un Amazon Virtual Private Cloud (VPC) consiste à demander une adresse de serveur DNS au démarrage via le Dynamic Host Configuration Protocol (DHCP - Protocole de configuration d'hôte dynamique). Les adresses de serveur DNS transmises par une réponse via le DHCP sont écrites dans le fichier local /etc/resolv.conf. Les modifications apportées manuellement au fichier resolv.conf avec les adresses de serveur DNS personnalisées sont perdues lorsque l'instance est redémarrée. 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).

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). Modifier la configuration de mise en réseau pour 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 du compte AWS pour modifier ce fichier. Vous pouvez devenir un utilisateur racine avec la commande « sudo-i » ou en exécutant 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;

Avec cette modification, lorsque l'instance est redémarrée, le fichier resolv.conf est mis à jour de façon à contenir uniquement les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez la page dhclient.conf(5) – Linux man pag (dhclient.conf(5) – Page man – 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, le fichier suivant /etc/sysconfig/network-scripts/ifcfg-eth0 d'une instance Amazon Linux est 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 : si vous modifiez ce fichier, vous devez le faire avec les privilèges d'utilisateur racine. Vous pouvez devenir un utilisateur racine avec la commande « sudo-i » ou en exécutant 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;

Avec cette modification, lorsque l'instance est redémarrée, le fichier resolv.conf est mis à jour de façon à contenir uniquement les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez la page dhclient.conf(5) – Linux man pag (dhclient.conf(5) – Page man – Linux).

3.    Redémarrez l'instance.

Ubuntu 18.04

Sur Ubuntu 18.04, la configuration d'interface réseau est traitée par défaut par le package netplan.io et le service systemd-resolved est autorisé par défaut à traiter les demandes DNS à l'aide d'un 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 que la configuration par défaut d'Ubuntu 18.04 est personnalisée.

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 les adresses IP de serveur DNS prévues sont correctement récupérées :

systemd-resolve --status

RHEL 7.5

Par défaut, le fichier resolv.conf est géré par le service NetworkManager. Le service alimente ensuite le fichier avec des serveurs DNS fournis par le DHCP. Vous pouvez empêcher NetworkManager de gérer le fichier resolv.conf pour garantir que les serveurs DNS fournis par le DHCP sont ignorés.

Option 1

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

Remarque : si vous modifiez ce fichier, vous devez le faire avec les privilèges d'utilisateur racine. Vous pouvez devenir un utilisateur racine avec la commande « sudo-i » ou en exécutant 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;

Avec cette modification, lorsque l'instance est redémarrée, le fichier resolv.conf est mis à jour de façon à contenir uniquement les serveurs DNS que vous avez spécifiés dans le fichier dhclient. Pour plus d'informations sur la commande supersede, consultez la page dhclient.conf(5) – Linux man pag (dhclient.conf(5) – Page man – 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 ?

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


Vous avez besoin d'aide ?