语境
我正在使用 Centos 7,并且我有一个eth0
配置了多个固定 IP 地址的网络接口(我只关心这里的 IPv4 地址,我不关心 IPV6 地址会发生什么):
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:bf:83:39 brd ff:ff:ff:ff:ff:ff
inet 192.168.220.92/24 scope global eth0:311
valid_lft forever preferred_lft forever
inet 192.168.220.82/24 scope global secondary eth0:312
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:febf:8339/64 scope link
valid_lft forever preferred_lft forever
这些地址会自动受到某些软件的影响,因此我无法掌握它们的 IP 值(192.168.220.92)、别名(eth0:311)或受影响的顺序(主/次)。
客观的
我想要的是一种暂时禁用 192.168.220.92 同时保持 192.168.220.82 正常运行的方法。
然后,我需要一种方法来让 192.168.220.92 重新上线,而不会干扰 192.168.220.82。
尝试
我到目前为止尝试过的方法(没有成功,否则我就不会在这里):
我尝试了几个
ifconfig
命令但没有成功,并且读到那些命令已经被弃用了,所以我把注意力集中在ip
命令上。使用 关闭虚拟接口
ip link set eth0:311 down
。这将删除此接口上的所有地址:
$ ip a
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:50:56:bf:83:39 brd ff:ff:ff:ff:ff:ff
- 仅使用 删除 IP
ip addr del 192.168.220.94/24 dev eth0:311
。这将删除此接口上的所有 IPv4 地址:
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:bf:83:39 brd ff:ff:ff:ff:ff:ff
inet6 fe80::250:56ff:febf:8339/64 scope link
valid_lft forever preferred_lft forever
- 仅使用方法 3) 删除 192.168.220.84 有效(保留 192.168.220.92),但这不是我需要的,所以我开始寻找交换主 IP 地址和辅助 IP 地址的方法,但找不到。我发现的最相关的帖子是这篇,结论是这是不可能的……
当主 IP 被删除时删除所有 IP 的设置是 Linux 中存在的设置,我不完全确定您为什么要这种行为,并且我假设从历史上看,它是为了模拟与旧 2.4.x 内核的一些向后兼容性。
上次我检查时,大多数现代发行版默认将其设置为 1。
sysctl
将值设置promote_secondaries
为 1。/etc/sysctl.conf
如果您想使更改永久生效,则应添加相关位。顺便说一句,EL7 是一个非常古老的发行版,如果您重视系统的整体完整性和安全性,您可能需要考虑升级。
根据@Matthew Ife的回答,以下是我为实现目标所做的事情:
更新系统设置,以便当主地址被删除时,辅助地址将成为主地址:
从接口中删除 IP 地址:
需要时再添加:
请注意,此操作之后,两个 IPv4 IP 的“主要”和“次要”影响现在与最初相比已经颠倒,但对我来说这不是问题。