在Linux中使用ip命令删除IP


12

如果我添加两个这样的IP:

ip addr add 1.1.1.1/24 dev eth2
ip addr add 1.1.1.2/24 dev eth2

然后我尝试删除这样的一个:

ip addr del 1.1.1.2/24 dev eth2

这两个IP都将被删除,我不知道如何处理。

有人知道如何解决吗?


您的要求不清楚。你能告诉我这里的预期输出是多少?
大师

我需要说的IP只删除一个IP而不是两个都
哈米德JML

请添加ip addr show输出
Gevial

Answers:


10

默认情况下,从接口删除主IP地址将删除同一子网上的所有其他地址。

这是对用户lain报告的REHL错误1136733的答复,该用户在13年3月12日提供了答案...

您要在同一子网中添加多个地址,因此第二个及后续的地址将成为第二个。这可以在“ ip addr show”输出中看到,请注意那些地址旁边的关键字“ secondary”。

默认情况下,删除主地址时,内核也会删除所有相应的辅助地址。

如果要在辅助删除中将其中一个辅助升级为新的辅助,则设置net.ipv4.conf.eth9.promote_secondaries系统。


sudo systemctl net.ipv4.conf.eth0.promote_secondaries未知操作net.ipv4.conf.eth0.promote_secondaries。
Laryx Decidua '18

@LaryxDecidua systemctl是与sysctl
yahol

7

发生这种情况是因为删除时使用了/ 24网络掩码。它适用于您输入的地址。请尝试以下操作:

ip addr del 1.1.1.2/32 dev eth2

/ 32掩码仅定义一个主机。


这不起作用,因为我给了系统/ 24网络掩码而不是/ 32。
Hamed JML

尝试完全不使用网络掩码:ip addr del 1.1.1.2 dev eth2
Gevial

再次删除两个IP!
Hamed JML

奇怪。在我的测试中,没有网络掩码的CentOS框删除成功。尽管使用/ 24删除也仅影响一个地址。您正在使用什么发行版?
Gevial

1
我正在使用Ubuntu 12.04
Hamed JML 2013年

2

我没有eth2可以检查它,但是它可以在eth0上正常工作,我看不出eth2应该是神奇的原因。我想您正在使用,ip addr show dev eth2因为ifconfig eth2似乎没有显示ip添加的其他地址。

我注意到的一件事是,您创建/删除地址的顺序很重要。如果删除主要地址,则将删除在同一网络中添加的第二个及后续地址。考虑...

    inet 1.1.1.1/24 scope global eth0
    inet 1.1.2.3/24 scope global eth0
    inet 1.1.1.2/24 scope global secondary eth0
    inet 1.1.1.3/24 scope global secondary eth0

如果删除1.1.1.1,则1.2和1.3地址也将被删除。如果删除任何其他地址,则只会删除该地址。


那么,如何删除第一个地址而不删除其他地址?
Hamed JML 2013年

0

我会尝试以下方法:

ip addr del 1.1.1.2 dev eth2


0

@bvs答案指出了问题的正确方向,并为我解决了问题。这里是一些关于精确命令的细节。对于许多默认接口eth0,我在以下命令中采用了该接口,eth2对于原始问题,该接口必须替换为。

对于临时解决方案(直到重新启动),请使用

sudo sysctl -w net.ipv4.conf.eth0.promote_secondaries=1

对于永久解决方案,该解决方案在重新启动后仍然存在,请创建一个包含以下内容的文件/etc/sysctl.d/ip-promote.conf(或其他以结尾的文件名.conf):

# The following makes that a second IP on the eth0 interface
# is promoted as primary IP instead of being removed.
net.ipv4.conf.eth0.promote_secondaries=1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.