Meu sistema Debian, usando o NetworkManager + dhclient, configura um temporizador no IP atribuído pelo dhclient (com a configuração inicial alterada pelo NetworkManager). Este temporizador é gerenciado diretamente pelo kernel. Depois de trazer a interface recentemente, veja como fica:
# 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
Se nada for atualizado, o IP será removido diretamente pelo kernel no 7150s. A renovação da concessão atualizará esse valor. O que certamente está relacionado com a configuração default-lease-time 7200;
do meu servidor DHCP.
Aqui está um exemplo simples, adicionando apenas 10s a um IP na interface 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
ao fazer no 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
O dhclient do Debian stretch não suporta valid_lft
(mas o NetworkManager adiciona). Em outros sistemas, por exemplo, o CentOS, valid_lft
é manipulado pelo dhclient, como visto em algumas linhas em /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
Portanto, se sua configuração específica tiver valid_lft
definido diferentemente de forever
, a resposta deve ser: o kernel fez isso.