为什么从接口中删除未使用的 IP 地址会终止与该地址无关的连接

为什么从接口中删除未使用的 IP 地址会终止与该地址无关的连接

昨天,我在数据中心快速重新安装了一台(物理)服务器,由于时间紧迫,无法轻松访问我们的数据库,所以我只是给它分配了一个我知道可用的 IP,这样我以后就可以访问分配正确的地址并继续从更温暖的地方进行配置。

今天我登录了服务器(172.16.130.10/22)并执行以下操作:

ip addr add 172.16.128.67/22 dev eth0

我从本地工作站上的终端检查它对新地址的 ping 做出响应并通过它登录:

$ 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

到目前为止一切顺利,我通过新的 IP 地址连接,旧的 IP 地址不再需要。我继续删除它:

ip addr del 172.16.130.10/22 dev eth0

但当我点击它时,Enter我的 SSH 会话就冻结了,我再也无法连接。我不得不请求现场操作员帮我重启服务器。

我哪里做错了?为什么删除该地址会导致我的连接中断?

答案1

在 Linux 中,IP 地址有“主”和“次”地址的概念。主地址通常是您添加到系统的第一个地址。删除主地址也隐含着刷新整个次地址列表的操作。

您可以通过将 sysctl 设置net.ipv4.conf.all.promote_secondaries为 1 来避免此行为,如下所示:

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

这会改变行为,当主 IP 被删除时,它不会刷新剩余地址,而是将新的 IP 地址提升为主 IP 地址。

相关内容