Frage Warum löscht das Entfernen einer nicht verwendeten IP-Adresse von einer Schnittstelle Verbindungen, die nicht mit dieser Adresse zusammenhängen


Gestern habe ich eine schnelle Neuinstallation eines (physischen) Servers im Rechenzentrum durchgeführt, und da ich wenig Zeit hatte und keinen einfachen Zugriff auf unsere Datenbank hatte, habe ich ihm gerade eine IP zugewiesen, von der ich wusste, dass sie verfügbar war die richtige Adresse und Weiterleitung von einem wärmeren Ort.

Heute habe ich mich am Server angemeldet (unter 172.16.130.10/22) und habe folgendes gemacht:

ip addr add 172.16.128.67/22 dev eth0

Von einem Terminal auf meiner lokalen Workstation habe ich überprüft, ob er auf die neue Adresse reagiert und sich über diese eingeloggt hat:

$ 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

Soweit so gut, ich war über die neue IP-Adresse verbunden und die alte war nicht mehr nötig. Ich ging voran und entfernte es:

ip addr del 172.16.130.10/22 dev eth0

Aber sobald ich getroffen habe Eingeben Meine SSH-Sitzung ist eingefroren und ich konnte keine Verbindung mehr herstellen. Ich musste einen Vor-Ort-Betreiber anfordern, um den Server für mich neu zu starten.

Was habe ich falsch gemacht? Warum würde die Entfernung dieser Adresse meine Verbindung zerstören?


34
2017-08-05 16:32


Ursprung


Zusätzlich zu Mathews ausgezeichnete Antwort: In vielen Unix- (und Unix-ähnlichen) Systemen wird jede Änderung der gebundenen IP-Adresse (n) alle offenen Sitzungen kurzzeitig von dieser Schnittstelle trennen (sogar von denjenigen, die eine andere Adresse verwenden). Das würde Sie aus Ihrer SSH-Sitzung herauswerfen, aber Sie können in diesem Fall sofort wieder verbinden. - Tonny
Ich glaube, dass dieses Problem nur mit IPv4 existiert. Ich glaube nicht, dass es passiert wäre, wenn Sie IPv6 verwendet hätten. - kasperd


Antworten:


In Linux haben IP-Adressen eine Vorstellung von "primären" und "sekundären" Adressen. Die primäre Adresse ist normalerweise die erste Adresse, die Sie dem System hinzufügen. Das Entfernen der primären Adresse hat den impliziten Vorgang, auch die gesamte Liste der sekundären Adressen zu löschen.

Sie können dieses Verhalten vermeiden, indem Sie sysctl festlegen net.ipv4.conf.all.promote_secondaries zu 1 so:

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

Dadurch wird das Verhalten so geändert, dass beim Entfernen einer primären IP-Adresse die verbleibenden Adressen nicht gelöscht werden und stattdessen eine neue IP-Adresse als primäre IP-Adresse bereitgestellt wird.


51
2017-08-05 16:44



Vielen Dank! Ich kam gerade über diese auch: 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