Tại sao xóa địa chỉ IP không sử dụng khỏi giao diện sẽ giết các kết nối không liên quan đến địa chỉ đó


35

Hôm qua tôi đã cài đặt lại nhanh chóng một máy chủ (vật lý) trong trung tâm dữ liệu và vì tôi không có thời gian và không có quyền truy cập dễ dàng vào cơ sở dữ liệu của chúng tôi, tôi chỉ gán cho nó một IP mà tôi biết là có sẵn và sau đó sẽ cho phép tôi truy cập để gán địa chỉ chính xác và tiếp tục cung cấp từ một nơi ấm áp hơn.

Hôm nay tôi đã đăng nhập vào máy chủ (tại 172.16.130.10/22) và đã làm như sau:

ip addr add 172.16.128.67/22 dev eth0

Từ một thiết bị đầu cuối trên máy trạm cục bộ của tôi, tôi đã kiểm tra nó phản hồi ping trên địa chỉ mới và đăng nhập thông qua nó:

$ 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

Cho đến nay, tôi đã kết nối thông qua địa chỉ IP mới và địa chỉ cũ không còn cần thiết nữa. Tôi đã đi trước và loại bỏ nó:

ip addr del 172.16.130.10/22 dev eth0

Nhưng ngay khi tôi nhấn Enterphiên SSH bị đóng băng và tôi không thể kết nối được nữa. Tôi đã phải yêu cầu một nhà điều hành tại chỗ để khởi động lại máy chủ cho tôi.

Tôi đã đi sai ở đâu? Tại sao xóa địa chỉ đó sẽ giết kết nối của tôi?


2
Ngoài câu trả lời tuyệt vời của Mathews: Trong nhiều hệ thống Unix (và giống Unix), mọi thay đổi đối với (các) địa chỉ IP bị ràng buộc sẽ ngắt kết nối nhanh chóng tất cả các phiên mở với giao diện đó (ngay cả các phiên sử dụng địa chỉ khác). Vì vậy, điều đó sẽ ném bạn ra khỏi phiên SSH, nhưng bạn có thể kết nối lại ngay lập tức trong trường hợp đó.
Tonny

Tôi tin rằng vấn đề này chỉ tồn tại với IPv4. Tôi không nghĩ nó sẽ xảy ra nếu bạn sử dụng IPv6.
kasperd

Câu trả lời:


53

Trong linux, địa chỉ IP có khái niệm địa chỉ 'chính' và 'phụ'. Địa chỉ chính thường là địa chỉ đầu tiên bạn thêm vào hệ thống. Xóa địa chỉ chính cũng có thao tác ngầm là xóa toàn bộ danh sách các địa chỉ phụ.

Bạn có thể tránh hành vi này bằng cách đặt sysctl net.ipv4.conf.all.promote_secondariesthành 1 như vậy:

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

Điều này thay đổi hành vi sao cho khi một IP chính bị xóa, nó sẽ không xóa các địa chỉ còn lại và thay vào đó sẽ quảng bá một địa chỉ IP mới làm địa chỉ chính.


6
Cảm ơn! Tôi cũng vừa đi qua điều này :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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.