Perché la rimozione di un indirizzo IP inutilizzato da un'interfaccia uccide le connessioni non correlate a quell'indirizzo


35

Ieri ho eseguito una rapida reinstallazione di un server (fisico) nel datacenter e, dato che ero a corto di tempo e senza un facile accesso al nostro database, gli ho appena assegnato un indirizzo IP che sapevo fosse disponibile e che mi avrebbe consentito in seguito di assegnare l'indirizzo corretto e continuare il provisioning da un luogo più caldo.

Oggi ho effettuato l'accesso al server (al 172.16.130.10/22) e ho fatto quanto segue:

ip addr add 172.16.128.67/22 dev eth0

Da un terminale sulla mia postazione di lavoro locale ho verificato che rispondesse al ping sul nuovo indirizzo e ho effettuato l'accesso:

$ ping 172.16.128.67
PING 172.16.128.67 (172.16.128.67) 56(84) bytes of data.
64 bytes from 172.16.128.67: icmp_req=2 ttl=62 time=3.61 ms
64 bytes from 172.16.128.67: icmp_req=3 ttl=62 time=4.87 ms
^C
$ ssh 172.16.128.67

Fin qui tutto bene, ero collegato tramite il nuovo indirizzo IP e quello vecchio non era più necessario. Sono andato avanti e l'ho rimosso:

ip addr del 172.16.130.10/22 dev eth0

Ma non appena ho colpito la Entermia sessione SSH si è bloccato e non sono più riuscito a connettermi. Ho dovuto richiedere a un operatore in loco di riavviare il server per me.

Dove ho sbagliato? Perché la rimozione di quell'indirizzo ucciderebbe la mia connessione?


2
Oltre alla risposta eccellente di Mathews: in molti sistemi Unix (e Unix-like) qualsiasi modifica agli indirizzi IP associati determinerà una breve disconnessione di tutte le sessioni aperte a quell'interfaccia (anche quelle che usano un altro indirizzo). In questo modo ti eliminerebbe dalla sessione SSH, ma puoi riconnetterti immediatamente in quel caso.
Tonny,

Credo che questo problema esista solo con IPv4. Non penso che sarebbe successo se si stesse usando IPv6.
Kasperd,

Risposte:


53

In Linux, gli indirizzi IP hanno una nozione di indirizzi "primario" e "secondario". Il primario è in genere il primo indirizzo che aggiungi al sistema. La rimozione dell'indirizzo primario ha l'operazione implicita di svuotare anche l'intero elenco di indirizzi secondari.

Puoi evitare questo comportamento impostando sysctl net.ipv4.conf.all.promote_secondariessu 1 in questo modo:

sysctl -w net.ipv4.conf.all.promote_secondaries=1

Ciò modifica il comportamento in modo tale che quando un IP primario viene rimosso, non cancellerà gli indirizzi rimanenti e promuoverà invece un nuovo indirizzo IP come primario.


6
Grazie! Mi sono appena imbattuto anche in questo :An IP address becomes secondary if another address within the same prefix (network) already exists. The first address within the prefix is primary and is the tag address for the group of all the secondary addresses. When the primary address is deleted all of the secondaries are purged too.
GnP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.