Mon instance Amazon EC2 privée exécute Amazon Linux, Ubuntu ou RHEL. Comment puis-je attribuer un serveur DNS statique à l’instance EC2 qui persiste lors du redémarrage ?

Lecture de 8 minute(s)
0

Je souhaite configurer une instance Amazon Elastic Compute Cloud (Amazon EC2) avec des entrées de serveur DNS statiques qui persistent lors du redémarrage.

Brève description

Par défaut, les instances EC2 associées à un Amazon Virtual Private Cloud (Amazon VPC) demandent une adresse de serveur DNS au démarrage. Cette demande est envoyée à l’aide du protocole de configuration d’hôte dynamique (DHCP). La réponse DHCP renvoie les adresses des serveurs DNS écrites dans le fichier local /etc/resolv.conf. Les modifications manuelles apportées au fichier resolv.conf contenant 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 en savoir plus sur les VPC et les serveurs DNS, consultez les ensembles d’options DHCP dans Amazon VPC.

Résolution

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

Amazon Linux 2023

Amazon Linux 2023 utilise systemd-resolved. Pour en savoir plus, consultez la section resolved.conf(5) sur le site Web archlinux.org.

Configuration du résolveur

Modifiez le fichier /etc/systemd/resolved.conf, puis modifiez les options DNS et Domaine :

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Vous pouvez également créer une adresse de dépôt. Par exemple, /etc/systemd/resolved.conf.d/dns_servers.conf.

#/etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Remarque : gardez les points suivants à l’esprit lorsque vous définissez l’option Domains=~. dans resolved.conf(5) :

  • Si l’option Domains=~. n’est pas définie, alors systemd-resolved doit utiliser les serveurs DNS par lien définis dans la configuration par lien.
  • L’option Domains=~. n’affecte pas les requêtes de noms de domaine qui correspondent aux domaines de recherche les plus spécifiques spécifiés dans les configurations par lien. Les noms de domaine sont toujours résolus à l’aide de leurs serveurs DNS par lien respectifs.

Pour en savoir plus sur la configuration par lien, consultez les fichiers systemd-networkd#network sur le site Web archlinux.org.

Modifier l’emplacement vers lequel /etc/resolv.conf pointe

Par défaut, /etc/resolv.conf pointe vers le résolveur de stub de l’hôte local. Pour changer cela, recréez le fichier avec un contenu différent ou pointez vers un autre endroit que le résolveur de stub de l’hôte local. Par exemple, vous pouvez pointer vers /run/systemd/resolve/resolv.conf, qui contient une liste aplatie des serveurs utilisés par systemd-resolved.

Vous pouvez tester votre configuration à l’aide de la commande resolvectl status, et par exemple, resolvectl query amazonaws.com et consulter le résultat.

Amazon Linux, Amazon Linux 2

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

Pour que l’une ou l’autre option fonctionne, la valeur du paramètre PEERDNS dans le fichier ifcfg-eth0 doit être définie sur oui. La définition du paramètre PEERDNS sur 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 implémentez toutes les commandes avec sudo.

2.     Ajoutez la commande supersede au fichier pour remplacer les serveurs de noms de domaine. 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 est mis à 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 en savoir plus sur la commande supersede, consultez la section dhclient.conf(5) sur la page de manuel Linux.

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

4.    Redémarrez l’instance EC2.

Option 2 :

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

Par exemple, l’exemple suivant montre le fichier /etc/sysconfig/network-scripts/ifcfg-eth0 provenant d’une instance Amazon Linux modifiée pour 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 oui dans vos fichiers de configuration par 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 implémentez toutes les commandes avec sudo.

2.    Ajoutez la commande supersede au fichier pour remplacer les serveurs de noms de domaine. 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 est mis à 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 en savoir plus sur la commande supersede, consultez la section 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 /etc/resolv.conf.

À son tour, le fichier /etc/resolv.conf est un lien symbolique vers le fichier /run/systemd/resolve/stub-resolv.conf. L’instruction de remplacement dans /etc/dhcp/dhclient.conf risque de ne pas fonctionner comme prévu si l’une des conditions suivantes est vraie pour le fichier /etc/resolv.conf :

  • Le fichier n’est pas un lien symbolique sur votre instance.
  • Le fichier est un lien symbolique pointant vers un autre fichier, tel que /run/systemd/resolve/resolv.conf.

L’une ou l’autre 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 du serveur DNS :

1.    Netplan stocke généralement les fichiers de configuration dans le répertoire /etc/netplan. Créez un fichier nommé /etc/netplan/99-custom-dns.yaml, puis remplissez-le avec les lignes suivantes. Assurez-vous de remplacer les adresses IP de serveur DNS d’espace réservé par vos adresses préférées :

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 comme 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

Après ces modifications, vous pouvez toujours voir l’adresse IP du résolveur stub dans /etc/resolv.conf. C’est ce qui est prévu. 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 vérifier que le système récupère correctement les adresses IP souhaitées des serveurs DNS :

systemd-resolve --status

RHEL 7.5

Par défaut, le service NetworkManager gère le fichier resolv.conf. Le service remplit ensuite le fichier avec des 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 implémentez toutes les commandes avec sudo.

2.     Ajoutez la commande supersede au fichier pour remplacer les serveurs de noms de domaine. 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 est mis à 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 en savoir plus sur la commande supersede, consultez la section dhclient.conf(5) sur la page de manuel Linux.

3.    Définissez le paramètre PEERDNS sur oui dans vos fichiers de configuration par 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 renseignez le fichier /etc/resolv.conf manuellement.

Informations connexes

networkmanager.conf(5) (page de manuel Linux)

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an