Dhcp

如果 dhclient 已經被殺死,哪個程序正在釋放 Linux 的動態 IP 地址?

  • November 19, 2018

dhclient被殺後,短期內沒有看到動態IP失去。然後,過了一個週末,動態 IP 地址就消失了。

只是想知道哪個程序發布了它。

我的 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;配置有關。

這是一個簡單的例子,在lo介面上添加一個 IP 只需 10 秒:

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

在第 2 學期做時:

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,答案應該是:核心做到了。

引用自:https://unix.stackexchange.com/questions/482815