Come registrare un gran numero di indirizzi IP con Debian/Ubuntu
Un singolo server ha spesso bisogno di più di un indirizzo IP. Questa guida illustra due modi per assegnare più indirizzi IPv4 a una singola interfaccia di rete su Debian e Ubuntu:
- automaticamente, con uno script di shell e un servizio systemd, consigliato per intervalli ampi;
- direttamente in netplan, consigliato quando gli indirizzi devono sopravvivere a una riconfigurazione della rete oltre che a un riavvio.
Entrambi i metodi rendono la configurazione persistente ai riavvii. Leggete la nota al termine di ciascun metodo per scegliere quello adatto al vostro caso.
Quando servono più indirizzi IP
Diversi carichi di lavoro comuni su un singolo server richiedono più di un indirizzo pubblico:
- Server di posta che usano indirizzi separati e record PTR per isolare la reputazione di invio di domini diversi.
- Server web che richiedono indirizzi dedicati per applicazioni legacy, isolamento dei clienti o specifiche policy del firewall.
- Infrastruttura proxy e VPN, in cui ogni istanza proxy o ogni endpoint VPN è associato al proprio indirizzo pubblico.
- Container o macchine virtuali che usano indirizzi IP instradati.
I piani VPS di INTROSERV includono due indirizzi IPv4 e una subnet IPv6 /112 in modo predefinito. Ulteriori indirizzi IPv4 sono disponibili in molte località. Verificate la disponibilità per la vostra regione nel configuratore d'ordine.
Prima di iniziare
Servono l'accesso root e il nome dell'interfaccia che ospiterà gli indirizzi aggiuntivi. Le versioni moderne di Debian e Ubuntu non usano più il vecchio nome eth0, quindi non datelo per scontato. Elencate le interfacce insieme ai loro indirizzi attuali e individuate quella che già possiede il vostro indirizzo principale:
ip -br addr show
L'output mostra voci come ens3, enp1s0 o eth0 accanto agli indirizzi già configurati su di esse. L'interfaccia che già ospita il vostro IP principale è quella da usare nei passaggi seguenti. Gli esempi qui usano ens3.
Attenzione: Questi passaggi modificano la configurazione di rete su un server a cui con ogni probabilità accedete via SSH. Un errore può tagliarvi fuori dal vostro stesso accesso. Tenete a disposizione una seconda via d'accesso se ne avete una, come la console del provider o IP-KVM, e preferite le opzioni di applicazione sicura mostrate di seguito.
Creare lo script degli indirizzi
Un breve script aggiunge un intervallo di indirizzi in un'unica passata. Createlo in /usr/local/sbin:
nano /usr/local/sbin/extra-ips.sh
Incollate lo script seguente. Sostituite il nome dell'interfaccia, il prefisso e l'intervallo con il blocco assegnato a voi. Gli indirizzi sottostanti usano l'intervallo di documentazione di RFC 5737 e sono segnaposto:
#!/bin/bash set -euo pipefail # Interfaccia che ospiterà gli indirizzi aggiuntivi. IFACE="ens3" # Prefisso comune e il primo e l'ultimo valore dell'ottetto host. # Sostituiteli con il blocco assegnato a voi. PREFIX="203.0.113" FIRST=10 LAST=60 # Interrompi subito con un messaggio chiaro se il nome dell'interfaccia e errato. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interfaccia $IFACE non trovata. Verificare il nome con: 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: Gli indirizzi usano un prefisso /32 di proposito. L'interfaccia principale possiede già la rotta per la sua subnet, quindi ogni indirizzo secondario necessita solo di una rotta host locale. Un prefisso /32 impedisce al kernel di aggiungere una rotta di subnet duplicata e mantiene pulita la tabella di routing. Lo script usaip addr replaceanzichéip addr addin modo da poter essere rieseguito in sicurezza senza segnalare un errore per gli indirizzi già esistenti.
Rendete lo script eseguibile. Notate il percorso completo, che era la parte mancante nella versione precedente di questa guida:
chmod +x /usr/local/sbin/extra-ips.sh
Rendere persistenti gli indirizzi con un servizio systemd
Eseguire lo script a mano aggiunge gli indirizzi solo fino al riavvio successivo. Per applicarli automaticamente all'avvio, create un servizio systemd che esegua lo script durante il boot. Questo metodo funziona allo stesso modo sia che il sistema usi netplan, systemd-networkd o il vecchio stack ifupdown.
Create il file di unità:
nano /etc/systemd/system/extra-ips.service
Aggiungete quanto segue:
[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
Ricaricate systemd e abilitate il servizio in modo che venga eseguito subito e a ogni avvio:
systemctl daemon-reload systemctl enable --now extra-ips.service
Confermate che il servizio sia stato avviato correttamente:
systemctl status --no-pager extra-ips.service
Attenzione: Gli indirizzi aggiunti da questo script non fanno parte della configurazione di netplan o systemd-networkd. Un successivonetplan apply, unnetworkctl reconfigureo qualsiasi riavvio della rete può rimuoverli. Ritornano al riavvio successivo, o immediatamente se eseguitesystemctl restart extra-ips.service. Se gli indirizzi devono rimanere validi anche attraverso una riconfigurazione della rete, usate invece il metodo netplan descritto di seguito.
Alternativa: definire gli indirizzi in netplan
Su Ubuntu, dove netplan e la soluzione predefinita, gli indirizzi possono essere dichiarati direttamente in netplan. Lo stack di rete li tratta allora come indirizzi gestiti, quindi sopravvivono a una riconfigurazione. Questo si adatta a un elenco piccolo e fisso. Per un intervallo ampio il servizio systemd visto sopra scala meglio, perché netplan richiede una riga per indirizzo.
Quando più file netplan definiscono la stessa interfaccia, le loro impostazioni possono sovrascriversi o combinarsi in modi inattesi, con il rischio di eliminare il vostro indirizzo principale e tagliare l'accesso. Modificare il file di configurazione esistente e di solito piu sicuro che creare un altro file per la stessa interfaccia. Aprite il file che già configura la vostra interfaccia, di norma /etc/netplan/50-cloud-init.yaml o /etc/netplan/00-installer-config.yaml:
ls /etc/netplan/ nano /etc/netplan/50-cloud-init.yaml
Mantenete tutte le impostazioni esistenti dell'interfaccia, come dhcp4, l'indirizzo principale, il gateway e i nameserver. Aggiungete gli indirizzi aggiuntivi sotto un elenco addresses sulla stessa interfaccia. L'esempio sottostante mantiene DHCP per l'indirizzo principale e aggiunge tre indirizzi secondari:
network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32
Le versioni recenti di netplan avvisano se il file e leggibile da altri utenti. Limitate i permessi per eliminare tale avviso:
chmod 600 /etc/netplan/50-cloud-init.yaml
Provate la modifica con netplan try. Applica la configurazione e la ripristina automaticamente dopo 120 secondi a meno che non la confermiate, il che vi protegge dalla perdita dell'accesso remoto:
netplan try
Se la connessione rimane attiva e tutto appare corretto, confermate quando richiesto, poi applicate la configurazione in modo permanente:
netplan apply
Verificare il risultato
Elencate gli indirizzi attualmente associati all'interfaccia e confermate che i nuovi siano presenti:
ip -br addr show ens3
Gli indirizzi aggiuntivi dovrebbero ora comparire nell'output e verranno ripristinati automaticamente dopo ogni riavvio.
Rimuovere gli indirizzi
Per rimuovere un singolo indirizzo, eliminatelo dall'interfaccia:
ip addr del 203.0.113.10/32 dev ens3
Se avete usato lo script e il servizio, interrompete l'assegnazione dell'intero intervallo all'avvio disabilitando e rimuovendo il servizio:
systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload
Se avete usato netplan, rimuovete le righe aggiuntive dall'elenco addresses nel file netplan, poi eseguite netplan apply.
Risoluzione dei problemi
Se il servizio non si avvia, controllate il suo stato e i log:
systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service
Confermate quanto segue:
- il nome dell'interfaccia nello script corrisponde al nome reale fornito da
ip -br addr show; - gli indirizzi appartengono al blocco assegnato a voi;
- lo script e eseguibile.
Se avete usato per errore un prefisso /24 invece di /32, la tabella di routing mostra il sintomo sotto forma di varie rotte di subnet duplicate. Verificatela con:
ip route
Questa guida si concentra su IPv4. Come per IPv4, gli indirizzi IPv6 secondari vengono normalmente aggiunti come indirizzi host con un prefisso /128, usando lo stesso comando ip addr replace, ad esempio ip addr replace 2001:db8::10/128 dev ens3.