Que programa está liberando o endereço IP dinâmico do Linux, se o dhclient já foi morto?

1

Depois que o dhclient foi morto, no curto prazo, não vi o IP dinâmico perdido. Então, depois de um fim de semana, o endereço IP dinâmico desapareceu.

Apenas imagine qual programa o divulgou.

    
por Fang Dong 19.11.2018 / 19:06

2 respostas

3

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.

    
por 19.11.2018 / 22:27
2

Ao usar o DHCP, você não "possui" o endereço IP, você o "aluga".

Como metáfora, imagine que você aluga um carro. O contrato é por algum período de tempo, talvez 12 meses. Depois que o tempo expirar, você precisará voltar e assinar alguns papéis para um novo contrato, se quiser continuar dirigindo o carro. Se você decidir ignorar a assinatura da papelada, não conseguirá continuar dirigindo o carro: se o contrato de aluguel expirar e você não o renovar, o dono do carro poderá levá-lo de volta. Se você não fizer nada, você não consegue magicamente um carro novo. Em vez disso, você simplesmente não tem carro algum.

Da mesma forma, desativar dhclient não permite manter o endereço IP. Significa apenas que você pare de voltar para mais papelada. Então, quando (não se!) O endereço IP expirar, você não terá um novo. Você acabou de não obter nenhum endereço IP.

    
por 19.11.2018 / 23:38

Tags