如果我为一个接口分配了 2 个 IP,我该如何仅释放特定的 IP?

如果我为一个接口分配了 2 个 IP,我该如何仅释放特定的 IP?

我当时正在做一些 dhcp 任务作为家庭作业,在一次练习中,我需要在一个客户端上释放 IP,然后在服务器上使用 tcpdump 捕获描述整个 DHCP 通信的数据包。
当然,这很有效,问题是我的客户端被分配了 2 个 IP,一个旧的,一个新的。

对于我的任务来说,我实际上不需要知道这一点,但我只是好奇为什么一个接口可以有双重 IP,以及我怎样才能只发布其中一个。

我将向您展示ip a客户端的输出以获取更多信息

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:8d:c0:4d brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 81584sec preferred_lft 81584sec
    inet6 fe80::a00:27ff:fe8d:c04d/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:e8:5c:2a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 brd 192.168.100.255 scope global dynamic eth1
       valid_lft 16802sec preferred_lft 16802sec
    inet 192.168.100.11/24 brd 192.168.100.255 scope global secondary dynamic eth1
       valid_lft 19310sec preferred_lft 19310sec
    inet6 fe80::a00:27ff:fee8:5c2a/64 scope link 
       valid_lft forever preferred_lft forever

附言

我想知道旧 IP 现在是否无法使用,也许ip a只是显示一种“历史记录”,但两个 IP 都可以使用。但我仍然不知道为什么允许这样做。

答案1

我只是好奇为什么一个接口可以有双 IP

接口可以具有任何所需的 IP 地址数量,从零到数百。

虽然 DHCP 客户端很少会占用多个租约。也许您同时运行两个 DHCP 客户端?(例如,systemd-networkd 和 NetworkManager?)

或者,也许您运行了两次 DHCP 客户端并在两次运行之间删除了其租约文件?

我怎么才能释放其中一个呢?

如上所述,您可能有两个 DHCP 客户端,每个客户端管理自己的地址。如果是这种情况,则仅停止一个客户端。

最后,你可以简单地删除地址而不释放 DHCP 租约,使用ip addr del。但如果分配该地址的 DHCP 客户端仍在运行,这将无济于事,当然也不会在 DHCP 服务器上释放该地址:

ip addr del 192.168.100.11/24 dev eth1

相关内容