昨天我在数据中心做了一个快速重新安装(物理)服务器,由于时间不够,并且没有方便的访问我们的数据库,我只给它分配了一个我知道可用的IP,并允许我稍后访问分配正确的地址,并从一个温暖的地方继续供应。
今天我login到服务器(在172.16.130.10/22)并做了以下工作:
ip addr add 172.16.128.67/22 dev eth0
从我的本地工作站上的一个terminal,我检查了它响应新地址的ping并通过它login:
$ 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 addr del 172.16.130.10/22 dev eth0
但是,一旦我input我的SSH会话冻结,我不能再连接。 我不得不请求现场操作员为我重新启动服务器。
我哪里做错了? 为什么要删除该地址杀死我的连接?
在Linux中,IP地址具有“主要”和“次要”地址的概念。 主要通常是您添加到系统的第一个地址。 删除主地址也有隐式的操作,即刷新整个次地址列表。
您可以通过将sysctl net.ipv4.conf.all.promote_secondaries
设置为1来避免此行为:
sysctl -w net.ipv4.conf.all.promote_secondaries=1
这改变了这样的行为,当一个主IP被删除时,它不会刷新剩余的地址,而是将一个新的IP地址作为主要地址。