如果 dhclient 已经被杀死,哪个程序正在释放 Linux 的动态 IP 地址?

如果 dhclient 已经被杀死,哪个程序正在释放 Linux 的动态 IP 地址?

dhclient被杀死后,短期内我没有看到动态IP丢失。然后,一个周末后,动态 IP 地址就消失了。

只是想知道哪个程序发布了它。

答案1

我的 Debian 系统使用 NetworkManager + dhclient 在 dhclient 分配的 IP 上设置计时器(初始配置由 NetworkManager 更改)。该定时器由内核直接管理。最近调出界面后,它的外观如下:

# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.6.0.122/24 brd 10.6.0.255 scope global dynamic noprefixroute eth0
       valid_lft 7150sec preferred_lft 7150sec

如果没有任何刷新,该IP将在7150s内被内核直接删除。续租将刷新该值。这肯定与我的DHCP服务器的default-lease-time 7200;配置有关。

这是一个在接口上仅添加 10 秒 IP 的简单示例lo

term1# ip -4 -o monitor addr|while read -r l; do printf '%s\n' "$l" | sed "s/^/$(date --iso-8601=s) /"; done
2018-11-19T21:10:18+00:00 1: lo    inet 10.1.1.1/32 scope global dynamic lo\       valid_lft 10sec preferred_lft 5sec
2018-11-19T21:10:23+00:00 1: lo    inet 10.1.1.1/32 scope global deprecated dynamic lo\       valid_lft 5sec preferred_lft 0sec
2018-11-19T21:10:28+00:00 Deleted 1: lo    inet 10.1.1.1/32 scope global deprecated dynamic lo\       valid_lft 0sec preferred_lft 0sec

在 term2 上做时:

term2# ip addr add dev lo 10.1.1.1 preferred_lft 5 valid_lft 10
term2# ip -4 -br a  show dev lo
lo               UNKNOWN        127.0.0.1/8 10.1.1.1/32 
term2# ip -4 -br a  show dev lo
lo               UNKNOWN        127.0.0.1/8 

Debian Stretch 的 dhclient 不处理valid_lft(但 NetworkManager 确实添加了它)。在其他系统上,例如 CentOS,valid_lft由 dhclient 处理,如以下几行所示/sbin/dhclient-script

351     # replace = add if it doesn't exist or override (update lifetimes) if it's there
352     ip -4 addr replace ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \
353        valid_lft ${new_dhcp_lease_time} preferred_lft ${new_dhcp_lease_time} >/dev/null 2>&1

因此,如果您的具体设置valid_lft与 不同forever,答案应该是:内核做到了。

答案2

使用 DHCP 时,您并不是“拥有”IP 地址,而是“租用”它。

作为一个比喻,想象一下您租了一辆车。租约为期一段时间,也许是 12 个月。期限到期后,如果您想继续驾驶汽车,则需要返回并签署一些新租约的文件。如果您决定跳过签署文件,您就无法继续驾驶汽车:如果您的租约到期并且您不续签,则车主可以将其收回。如果你什么都不做,你就不会神奇地得到一辆新车。相反,你根本就没有车。

同样,关闭dhclient也不会让您保留 IP 地址。这只是意味着您不再需要回去做更多的文书工作。因此,当(不是如果!)IP 地址过期时,您将无法获得新的地址。你根本就得不到IP地址。

相关内容