我使用netlink API rtnl_addr_delete
删除Linux中接口上配置的ipv4地址。属于同一子网的两个IP配置为接口。
当我删除第一个配置的IP时,两个IP都被删除,这是意外的。但反之亦然,当我删除第二个配置的IP时,第一个没有被删除,这是预期的。
假设没有看到属于不同子网的2个IP。也就是说,如果我先删除,那么只有第一个删除。
任何想法天气这是rtnl_addr_delete
行为的原因,还是可以通过任何解决方案来解决这个问题?
答案 0 :(得分:2)
从一个子网(“主要”地址)删除第一个添加的IP地址时,将删除所有子网。这是某些发行版中的默认内核行为。要更改它,您必须在使用的接口上设置sysctl:
s = b'\x005\x003\x00.\x000\x005\x006\x00'
float(s.replace(b'\x00',b''))
说,你想在eth0上改变它:
$ sysctl -a | grep promote_secondaries
使用$ sudo sysctl -w net.ipv4.conf.eth0.promote_secondaries=1
,子网的其余部分将不会被删除,而是其中一个地址将被提升为新的主要地址。
文档:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt