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 ?

Lecture de 6 minute(s)
0

Comment puis-je configurer une instance Amazon Elastic Compute Cloud (Amazon EC2) avec des entrées de serveurs DNS statiques qui persiste 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 . Cette demande est envoyée via le 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 les ensembles d'options DHCP dans Amazon VPC.

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 appliquez 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-*).

À titre d'illustration, l'exemple suivant montre le fichier /etc/sysconfig/network-scripts/ifcfg-eth0 d'une instance Amazon Linux modifiée 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 appliquez 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'adresse IP du ré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 :

cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml
network:
  version: 2
  ethernets:
    ens5:
      nameservers:
        addresses: [1.1 .1 .1, 1.0 .0 .1]
      dhcp4-overrides:
        use-dns: false
        use-domains: false
EOF

Remarque : Dans l'exemple précédent, l'interface est spécifiée sous la forme ens5. Assurez-vous que le nom de l'interface correspond à celui de votre configuration. Pour voir le nom de votre interface, utilisez la commande ip a.

2.    Exécutez la commande suivante :

netplan generate

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

3.    Redémarrez l'instance.

4.    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 les serveurs DNS fournis par 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 appliquez 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/90-dns-none.conf avec le contenu suivant :

[main]
dns=none

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


Informations connexes

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

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