Comment enregistrer un grand nombre d'adresses IP avec Debian/Ubuntu ?
Un seul serveur a souvent besoin de plus d'une adresse IP. Ce guide décrit 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 les grandes plages ;
- directement dans netplan, recommandé lorsque les adresses doivent survivre à une reconfiguration du réseau et pas seulement à un redémarrage.
Les deux méthodes rendent la configuration persistante après les redémarrages. Lisez la note à la fin de chaque méthode pour choisir celle qui convient à votre cas.
Quand vous avez besoin de plusieurs adresses IP
Plusieurs charges de travail courantes sur un seul serveur nécessitent plus d'une adresse publique :
- Serveurs de messagerie qui utilisent des adresses distinctes et des enregistrements PTR pour isoler la réputation d'envoi de différents domaines.
- Serveurs web qui nécessitent des adresses dédiées pour des applications héritées, l'isolation des clients ou des règles de pare-feu spécifiques.
- Infrastructure proxy et VPN, où chaque instance proxy ou chaque point de terminaison VPN est lié à sa propre adresse publique.
- Conteneurs ou machines virtuelles utilisant des adresses IP routées.
Les forfaits VPS d'INTROSERV incluent par défaut deux adresses IPv4 et un sous-réseau IPv6 /112. Des adresses IPv4 supplémentaires sont disponibles dans de nombreux emplacements. Vérifiez la disponibilité pour votre région 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 modernes de Debian et Ubuntu n'utilisent plus l'ancien nom eth0, ne le présumez donc pas. Listez les interfaces avec leurs adresses actuelles et identifiez celle qui possède 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 sur elles. L'interface qui porte déjà votre IP principale est celle à utiliser dans les étapes ci-dessous. Les exemples ici utilisent ens3.
Avertissement : Ces étapes modifient la configuration réseau d'un serveur auquel vous accédez très probablement par SSH. Une erreur peut couper votre propre accès. Si possible, gardez une seconde voie d'entrée, comme la console du fournisseur ou IP-KVM, et préférez les options d'application sécurisée présentées ci-dessous.
Créer le script d'adresses
Un court script ajoute une plage d'adresses en une seule passe. Créez-le dans /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 est attribué. Les adresses ci-dessous utilisent la plage de documentation de RFC 5737 et sont des espaces réservés :
#!/bin/bash set -euo pipefail # Interface qui portera les adresses supplementaires. IFACE="ens3" # Prefixe commun ainsi que la premiere et la derniere valeur de l'octet d'hote. # Remplacez-les par le bloc qui vous est attribue. PREFIX="203.0.113" FIRST=10 LAST=60 # Arreter tot avec un message clair si le nom de l'interface est incorrect. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interface $IFACE introuvable. Verifiez le nom avec : ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done
Info : Les adresses utilisent un préfixe /32 à dessein. 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 utiliseip addr replaceplutôt queip addr addafin de pouvoir être réexécuté en toute sécurité sans signaler d'erreur pour les adresses qui existent déjà.
Rendez le script exécutable. Notez le chemin complet, qui était la partie manquante 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 n'ajoute les adresses que 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
Avertissement : Les adresses ajoutées par ce script ne font pas partie de la configuration de netplan ou de systemd-networkd. Unnetplan applyultérieur, unnetworkctl reconfigureou tout redémarrage du réseau peut les supprimer. Elles reviennent au prochain redémarrage, ou immédiatement si vous exécutezsystemctl restart extra-ips.service. Si les adresses doivent également rester en place après une reconfiguration du réseau, utilisez plutôt la méthode netplan décrite ci-dessous.
Alternative : définir les adresses dans netplan
Sous Ubuntu, où netplan est la solution 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 petite liste fixe. Pour une grande plage, le service systemd 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 se combiner de manière inattendue, ce qui peut écarter votre adresse principale et couper l'accès. Modifier le fichier de configuration existant est généralement plus sûr que de créer un autre fichier 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 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 avertissent si le fichier est lisible par d'autres utilisateurs. Restreignez les autorisations pour supprimer cet avertissement :
chmod 600 /etc/netplan/50-cloud-init.yaml
Testez la modification avec netplan try. Il applique la configuration et la rétablit automatiquement au bout de 120 secondes si vous ne confirmez pas, ce qui vous protège d'une perte d'accès distant :
netplan try
Si la connexion reste active et que tout semble correct, confirmez à l'invite, puis appliquez la configuration de façon permanente :
netplan apply
Vérifier le résultat
Listez les adresses actuellement lié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 rétablies automatiquement après chaque redémarrage.
Supprimer les adresses
Pour supprimer une seule adresse, retirez-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 l'attribution de 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
Confirmez les points suivants :
- le nom de l'interface dans le script correspond au nom réel donné par
ip -br addr show; - les adresses appartiennent au bloc qui vous est attribué ;
- le script est exécutable.
Si vous avez utilisé par erreur un préfixe /24 au lieu de /32, la table de routage montre le symptôme sous la forme de plusieurs routes de sous-réseau en double. Vérifiez-la avec :
ip route
Ce guide se concentre sur IPv4. Comme pour IPv4, les adresses IPv6 secondaires sont normalement ajoutées comme adresses d'hôte avec un préfixe /128, avec la même commande ip addr replace, par exemple ip addr replace 2001:db8::10/128 dev ens3.