Kako registrirati veliko število naslovov IP z Debianom/Ubuntujem
En sam strežnik pogosto potrebuje več kot en naslov IP. Ta vodnik pojasnjuje dva načina za dodelitev več naslovov IPv4 enemu omrežnemu vmesniku v distribucijah Debian in Ubuntu:
- samodejno, z lupinskim skriptom in storitvijo systemd, priporočeno za velike obsege;
- neposredno v netplan, priporočeno, kadar morajo naslovi preživeti tako ponovno konfiguracijo omrežja kot vnovični zagon.
Obe metodi omogočata, da konfiguracija ostane trajna tudi po vnovičnem zagonu. Preberite opombo na koncu vsake metode, da izberete tisto, ki ustreza vašemu primeru.
Kdaj potrebujete več naslovov IP
Več pogostih obremenitev na enem strežniku zahteva več kot en javni naslov:
- Poštni strežniki, ki uporabljajo ločene naslove in zapise PTR za ločevanje ugleda pošiljanja različnih domen.
- Spletni strežniki, ki potrebujejo namenske naslove za starejše aplikacije, izolacijo strank ali posebne politike požarnega zidu.
- Proxy in VPN infrastruktura, kjer je vsaka instanca proxyja ali končna točka VPN vezana na svoj lastni javni naslov.
- Vsebniki ali navidezni stroji, ki uporabljajo usmerjene naslove IP.
Paketi VPS INTROSERV privzeto vključujejo dva naslova IPv4 in podomrežje IPv6 /112. Dodatni naslovi IPv4 so na voljo v številnih lokacijah. Preverite razpoložljivost za izbrano regijo v konfiguratorju naročila.
Preden začnete
Potrebujete dostop root ter ime vmesnika, ki bo nosil dodatne naslove. Sodobne različice Debiana in Ubuntuja ne uporabljajo več starega imena eth0, zato tega ne predvidevajte. Prikažite seznam vmesnikov skupaj z njihovimi trenutnimi naslovi in prepoznajte tistega, ki že vsebuje vaš primarni naslov:
ip -br addr show
Izpis prikaže vnose, kot so ens3, enp1s0 ali eth0, poleg naslovov, ki so na njih že konfigurirani. Vmesnik, ki že nosi vaš glavni IP, je tisti, ki ga uporabite v naslednjih korakih. Primeri tukaj uporabljajo ens3.
Ti koraki spremenijo omrežno konfiguracijo na strežniku, do katerega najverjetneje dostopate prek SSH. Napaka lahko prekine vaš lastni dostop. Poskrbite za drug način dostopa, če ga imate, na primer konzolo ponudnika ali IP-KVM, in dajte prednost varnim možnostim uveljavitve, prikazanim spodaj.
Ustvarjanje skripta za naslove
Kratek skript v enem koraku doda razpon naslovov. Ustvarite ga v /usr/local/sbin:
nano /usr/local/sbin/extra-ips.sh
Prilepite naslednji skript. Zamenjajte ime vmesnika, predpono in razpon z blokom, ki vam je dodeljen. Spodnji naslovi uporabljajo dokumentacijski razpon iz RFC 5737 in so zgolj nadomestni zapisi:
#!/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
Naslovi namerno uporabljajo predpono /32. Primarni vmesnik že ima pot za svoje podomrežje, zato vsak sekundarni naslov potrebuje le lokalno gostiteljsko pot. Predpona /32 preprečuje, da bi jedro dodalo podvojeno pot podomrežja, in ohranja preglednost usmerjevalne tabele. Skript uporablja ip addr replace namesto ip addr add, tako da ga je mogoče varno znova zagnati, ne da bi prišlo do napake pri naslovih, ki že obstajajo.
Skriptu omogočite izvajanje. Bodite pozorni na celotno pot, ki je bila manjkajoči del v prejšnji različici tega vodnika:
chmod +x /usr/local/sbin/extra-ips.sh
Zagotavljanje trajnosti naslovov s storitvijo systemd
Ročni zagon skripta doda naslove le do naslednjega vnovičnega zagona. Da bi jih uveljavili samodejno ob zagonu, ustvarite storitev systemd, ki skript zažene med zagonom sistema. Ta metoda deluje enako ne glede na to, ali sistem uporablja netplan, systemd-networkd ali starejši sklad ifupdown.
Ustvarite datoteko enote:
nano /etc/systemd/system/extra-ips.service
Dodajte naslednje:
[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
Znova naložite systemd in omogočite storitev, da se zažene zdaj in ob vsakem zagonu:
systemctl daemon-reload systemctl enable --now extra-ips.service
Preverite, ali se je storitev pravilno zagnala:
systemctl status --no-pager extra-ips.service
Naslovi, ki jih doda ta skript, niso del konfiguracije netplan ali systemd-networkd. Poznejši netplan apply, networkctl reconfigure ali kateri koli ponovni zagon omrežja jih lahko odstrani. Vrnejo se ob naslednjem vnovičnem zagonu ali takoj, če zaženete systemctl restart extra-ips.service. Če morajo naslovi ostati na mestu tudi ob ponovni konfiguraciji omrežja, namesto tega uporabite spodaj opisano metodo netplan.
Alternativa: definiranje naslovov v netplan
V Ubuntuju, kjer je netplan privzet, je naslove mogoče deklarirati neposredno v netplan. Omrežni sklad jih nato obravnava kot upravljane naslove, zato preživijo ponovno konfiguracijo. To je primerno za majhen, fiksen seznam. Za velik razpon se zgoraj opisana storitev systemd bolje prilagaja, saj netplan zahteva eno vrstico na naslov.
Kadar več datotek netplan definira isti vmesnik, se lahko njihove nastavitve nepričakovano prepišejo ali združijo, kar lahko odstrani vaš primarni naslov in prekine dostop. Urejanje obstoječe konfiguracijske datoteke je običajno varnejše kot ustvarjanje nove datoteke za isti vmesnik. Odprite datoteko, ki že konfigurira vaš vmesnik, običajno /etc/netplan/50-cloud-init.yaml ali /etc/netplan/00-installer-config.yaml:
ls /etc/netplan/ nano /etc/netplan/50-cloud-init.yaml
Ohranite vse obstoječe nastavitve vmesnika, kot so dhcp4, primarni naslov, prehod (gateway) in imenski strežniki. Dodatne naslove dodajte pod seznam addresses na istem vmesniku. Spodnji primer ohrani DHCP za primarni naslov in doda tri sekundarne naslove:
network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32
Novejše različice netplan opozorijo, če je datoteka berljiva za druge uporabnike. Omejite dovoljenja, da odpravite to opozorilo:
chmod 600 /etc/netplan/50-cloud-init.yaml
Preizkusite spremembo z ukazom netplan try. Ta uveljavi konfiguracijo in jo samodejno povrne po 120 sekundah, razen če je ne potrdite, kar vas ščiti pred izgubo oddaljenega dostopa:
netplan try
Če povezava ostane vzpostavljena in je vse videti pravilno, ob pozivu potrdite spremembo, nato pa konfiguracijo uveljavite trajno:
netplan apply
Preverjanje rezultata
Prikažite seznam naslovov, trenutno povezanih z vmesnikom, in preverite, ali so novi naslovi prisotni:
ip -br addr show ens3
Dodatni naslovi bi se zdaj morali prikazati v izpisu in se bodo samodejno obnovili po vsakem ponovnem zagonu.
Odstranjevanje naslovov
Če želite odstraniti posamezen naslov, ga izbrišite z vmesnika:
ip addr del 203.0.113.10/32 dev ens3
Če ste uporabili skript in storitev, prenehajte dodeljevati celoten razpon ob zagonu tako, da storitev onemogočite in odstranite:
systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload
Če ste uporabili netplan, odstranite dodatne vrstice s seznama addresses v datoteki netplan, nato pa zaženite netplan apply.
Odpravljanje težav
Če se storitev ne zažene, preverite njeno stanje in dnevnike:
systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service
Preverite naslednje:
- ime vmesnika v skriptu se ujema z dejanskim imenom iz
ip -br addr show; - naslovi pripadajo bloku, ki vam je bil dodeljen;
- skript ima dovoljenje za izvajanje.
Če ste po pomoti uporabili predpono /24 namesto /32, se to v usmerjevalni tabeli kaže kot več podvojenih poti podomrežja. Preverite z ukazom:
ip route
Ta vodnik se osredotoča na IPv4. Tako kot pri IPv4 se sekundarni naslovi IPv6 običajno dodajo kot gostiteljski naslovi s predpono /128 z istim ukazom ip addr replace, na primer ip addr replace 2001:db8::10/128 dev ens3.