Comment enregistrer un grand nombre d'adresses IP avec Debian/Ubuntu ?
Un seul serveur a souvent besoin de plusieurs adresses IP. Ce guide explique deux façons d'attribuer plusieurs adresses IPv4 à une seule interface réseau sous Debian et Ubuntu :
- automatiquement, avec un script shell et un service systemd, recommandé pour de larges plages;
- directement dans netplan, recommandé lorsque les adresses doivent survivre à la fois à une reconfiguration réseau et à un redémarrage.
Les deux méthodes rendent la configuration persistante après un redémarrage. Lisez la remarque à la fin de chaque méthode pour choisir celle qui convient à votre cas.
Quand avez-vous besoin de plusieurs adresses IP
Plusieurs charges de travail courantes sur un seul serveur nécessitent plus d'une adresse publique :
- Les serveurs de messagerie qui utilisent des adresses et des enregistrements PTR distincts pour isoler la réputation d'envoi de différents domaines.
- Les serveurs web qui nécessitent des adresses dédiées pour des applications héritées, l'isolation des clients ou des politiques de pare-feu spécifiques.
- L'infrastructure de proxy et de VPN, où chaque instance de proxy ou point de terminaison VPN est liée à sa propre adresse publique.
- Les conteneurs ou machines virtuelles qui utilisent des adresses IP routées.
Les offres VPS INTROSERV incluent par défaut deux adresses IPv4 et un sous-réseau IPv6 /112. Des adresses IPv4 supplémentaires sont disponibles dans de nombreuses localisations. Vérifiez la disponibilité pour la région choisie dans le configurateur de commande.
Avant de commencer
Vous avez besoin d'un accès root et du nom de l'interface qui portera les adresses supplémentaires. Les versions récentes de Debian et Ubuntu n'utilisent plus l'ancien nom eth0, ne le présupposez donc pas. Listez les interfaces avec leurs adresses actuelles et identifiez celle qui porte déjà votre adresse principale :
ip -br addr show
La sortie affiche des entrées telles que ens3, enp1s0 ou eth0 à côté des adresses déjà configurées dessus. L'interface qui porte déjà votre IP principale est celle à utiliser dans les étapes ci-dessous. Les exemples ici utilisent ens3.
Ces étapes modifient la configuration réseau sur un serveur auquel vous accédez très probablement par SSH. Une erreur peut couper votre propre accès. Gardez un second moyen d'accès si vous en avez un, comme la console du fournisseur ou l'IP-KVM, et privilégiez les options d'application sécurisée présentées ci-dessous.
Création du script d'adresses
Un court script ajoute une plage d'adresses en une seule passe. Créez-le sous /usr/local/sbin :
nano /usr/local/sbin/extra-ips.sh
Collez le script suivant. Remplacez le nom de l'interface, le préfixe et la plage par le bloc qui vous a été attribué. Les adresses ci-dessous utilisent la plage de documentation de la RFC 5737 et ne sont que des exemples génériques :
#!/bin/bash set -euo pipefail # Interface that will carry the additional addresses. IFACE="ens3" # Common prefix and the first and last value of the host octet. # Replace these with the block assigned to you. PREFIX="203.0.113" FIRST=10 LAST=60 # Stop early with a clear message if the interface name is wrong. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interface $IFACE not found. Check the name with: ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done
Les adresses utilisent délibérément un préfixe /32. L'interface principale possède déjà la route de son sous-réseau, de sorte que chaque adresse secondaire n'a besoin que d'une route d'hôte locale. Un préfixe /32 empêche le noyau d'ajouter une route de sous-réseau en double et garde la table de routage propre. Le script utilise ip addr replace plutôt que ip addr add afin de pouvoir être relancé en toute sécurité sans échouer sur des adresses déjà existantes.
Rendez le script exécutable. Notez le chemin complet, qui était l'élément manquant dans la version précédente de ce guide :
chmod +x /usr/local/sbin/extra-ips.sh
Rendre les adresses persistantes avec un service systemd
Exécuter le script à la main ajoute les adresses seulement jusqu'au prochain redémarrage. Pour les appliquer automatiquement au démarrage, créez un service systemd qui exécute le script pendant le démarrage. Cette méthode fonctionne de la même manière que le système utilise netplan, systemd-networkd ou l'ancienne pile ifupdown.
Créez le fichier d'unité :
nano /etc/systemd/system/extra-ips.service
Ajoutez ce qui suit :
[Unit] Description=Assign additional IP addresses After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/extra-ips.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
Rechargez systemd et activez le service pour qu'il s'exécute maintenant et à chaque démarrage :
systemctl daemon-reload systemctl enable --now extra-ips.service
Confirmez que le service a démarré correctement :
systemctl status --no-pager extra-ips.service
Les adresses ajoutées par ce script ne font pas partie de la configuration netplan ou systemd-networkd. Un netplan apply ultérieur, un networkctl reconfigure, ou tout redémarrage réseau peut les supprimer. Elles reviennent au redémarrage suivant, ou immédiatement si vous exécutez systemctl restart extra-ips.service. Si les adresses doivent également rester en place lors d'une reconfiguration réseau, utilisez plutôt la méthode netplan ci-dessous.
Alternative : définir les adresses dans netplan
Sous Ubuntu, où netplan est le système par défaut, les adresses peuvent être déclarées directement dans netplan. La pile réseau les traite alors comme des adresses gérées, de sorte qu'elles survivent à une reconfiguration. Cela convient à une liste petite et fixe. Pour une large plage, le service systemd décrit ci-dessus s'adapte mieux, car netplan nécessite une ligne par adresse.
Lorsque plusieurs fichiers netplan définissent la même interface, leurs paramètres peuvent se remplacer ou fusionner de manière inattendue, ce qui peut supprimer votre adresse principale et couper l'accès. Modifier le fichier de configuration existant est généralement plus sûr que d'en créer un autre pour la même interface. Ouvrez le fichier qui configure déjà votre interface, généralement /etc/netplan/50-cloud-init.yaml ou /etc/netplan/00-installer-config.yaml :
ls /etc/netplan/ nano /etc/netplan/50-cloud-init.yaml
Conservez tous les paramètres existants de l'interface, tels que dhcp4, l'adresse principale, la passerelle et les serveurs de noms. Ajoutez les adresses supplémentaires sous une liste addresses sur la même interface. L'exemple ci-dessous conserve le DHCP pour l'adresse principale et ajoute trois adresses secondaires :
network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32
Les versions récentes de netplan émettent un avertissement si le fichier est lisible par d'autres utilisateurs. Restreignez les permissions pour lever cet avertissement :
chmod 600 /etc/netplan/50-cloud-init.yaml
Testez la modification avec netplan try. Cette commande applique la configuration et l'annule automatiquement après 120 secondes sauf confirmation de votre part, ce qui vous protège d'une perte d'accès à distance :
netplan try
Si la connexion reste active et que tout semble correct, confirmez lorsque vous y êtes invité, puis appliquez la configuration de façon permanente :
netplan apply
Vérification du résultat
Listez les adresses actuellement associées à l'interface et confirmez que les nouvelles sont présentes :
ip -br addr show ens3
Les adresses supplémentaires devraient maintenant apparaître dans la sortie et seront restaurées automatiquement après chaque redémarrage.
Suppression des adresses
Pour supprimer une seule adresse, supprimez-la de l'interface :
ip addr del 203.0.113.10/32 dev ens3
Si vous avez utilisé le script et le service, arrêtez d'attribuer toute la plage au démarrage en désactivant et en supprimant le service :
systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload
Si vous avez utilisé netplan, supprimez les lignes supplémentaires de la liste addresses dans le fichier netplan, puis exécutez netplan apply.
Dépannage
Si le service ne démarre pas, vérifiez son état et ses journaux :
systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service
Vérifiez les points suivants :
- le nom de l'interface dans le script correspond au nom réel obtenu avec
ip -br addr show; - les adresses appartiennent au bloc qui vous a été attribué;
- le script est exécutable.
Si vous avez utilisé par erreur un préfixe /24 au lieu de /32, la table de routage affiche le symptôme sous la forme de plusieurs routes de sous-réseau en double. Vérifiez-le avec :
ip route
Ce guide se concentre sur IPv4. Comme pour IPv4, les adresses IPv6 secondaires sont normalement ajoutées en tant qu'adresses d'hôte avec un préfixe /128, en utilisant la même commande ip addr replace, par exemple ip addr replace 2001:db8::10/128 dev ens3.