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?
Jawaban:
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_secondaries
ke 1 seperti:Ini mengubah perilaku sehingga ketika IP primer dihapus, itu tidak akan menyiram alamat yang tersisa dan sebaliknya akan mempromosikan alamat IP baru sebagai primer.
sumber
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.