Mengapa menghapus alamat IP yang tidak digunakan dari antarmuka membunuh koneksi yang tidak terkait dengan alamat itu

35

Kemarin saya melakukan instal ulang cepat server (fisik) di pusat data, dan karena saya kekurangan waktu dan tanpa akses mudah ke basis data kami, saya hanya memberinya IP yang saya tahu tersedia dan akan memungkinkan saya nantinya mengakses untuk menetapkan alamat yang benar dan melanjutkan penyediaan dari tempat yang lebih hangat.

Hari ini saya masuk ke server (pukul 172.16.130.10/22) dan melakukan yang berikut:

ip addr add 172.16.128.67/22 dev eth0

Dari terminal di workstation lokal saya, saya memeriksanya merespons untuk melakukan ping ke alamat baru dan login melaluinya:

$ 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

Sejauh ini bagus, saya terhubung melalui alamat IP baru dan yang lama tidak lagi diperlukan. Saya melanjutkan dan menghapusnya:

ip addr del 172.16.130.10/22 dev eth0

Tetapi begitu saya menekan Entersesi SSH saya membeku dan saya tidak lagi dapat terhubung. Saya harus meminta operator di tempat untuk me-reboot server untuk saya.

Di mana saya salah? Mengapa menghapus alamat itu akan mematikan koneksi saya?

GnP
sumber
2
Selain jawaban Mathews yang sangat baik: Dalam banyak sistem Unix (dan mirip Unix) setiap perubahan pada alamat IP terikat akan secara singkat memutuskan semua sesi terbuka ke antarmuka itu (bahkan yang menggunakan alamat lain). Sehingga itu akan membuat Anda keluar dari sesi SSH Anda, tetapi Anda dapat terhubung kembali segera dalam kasus itu.
Tonny
Saya percaya masalah ini hanya ada pada IPv4. Saya tidak berpikir itu akan terjadi jika Anda menggunakan IPv6.
kasperd

Jawaban:

53

Di linux, alamat IP memiliki gagasan tentang alamat 'primer' dan 'sekunder'. Alamat primer biasanya adalah alamat pertama yang Anda tambahkan ke sistem. Menghapus alamat primer memiliki operasi implisit pembilasan seluruh daftar alamat sekunder juga.

Anda dapat menghindari perilaku ini dengan mengatur sysctl net.ipv4.conf.all.promote_secondarieske 1 seperti:

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

Ini mengubah perilaku sehingga ketika IP primer dihapus, itu tidak akan menyiram alamat yang tersisa dan sebaliknya akan mempromosikan alamat IP baru sebagai primer.

Matthew Ife
sumber
6
Terima kasih! Saya baru saja menemukan ini juga: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