Debian Buster dhclient usa aleatoriamente seu endereço MAC ou um DUID-LLT gerado como seu ID de cliente DHCP.
Posso forçá-lo a sempre usar o endereço MAC em vez do DUID-LLT gerado?
Conheço a opção send dhcp-client-identifier = xx:xx:xx:xx:xx:xx;
, mas ela me obriga a configurar cada interface manualmente com seu próprio endereço MAC, algo que prefiro evitar se possível.
Como eu disse antes, ele já está fazendo isso, mas aleatoriamente.
Pode ser forçado a fazê-lo sempre?
A solução é simples, mas não documentada (
dhclient.conf
pelo menos não na página de manual). Você pode definir a opçãosend dhcp-client-identifier = hardware
em vez de codificar um endereço MAC específico.Exemplo completo:
Ele configura
dhclient
para enviar endereço de hardware como identificador de cliente, remove concessões anteriores e reinicia interfaces com novas configurações. Após esta alteração ele passará a utilizar o endereço MAC como client ID de cada interface, automaticamente.Desde esta mudança https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906894 ifupdown foi adicionando o parâmetro -i ao dhclient.
Mas aqui está uma correção: esta alteração https://salsa.debian.org/debian/ifupdown/-/commit/40eb51499fe71e4fb20c27beea23045c62e9ba07 foi para ifupdown 0.8.36 e torna a opção -i opcional. Isso é documentado na página de manual (nova o suficiente) para /etc/network/interfaces: man interfaces / INET ADDRESS FAMILY / "The dhcp Method" / Options / client
Então, para o meu caso, a solução prática foi adicionar "client no" ao meu /etc/network/interfaces, como
que traz o comportamento antigo, que é: ifup chama dhclient sem "-i", como visto aqui: https://salsa.debian.org/debian/ifupdown/-/blob/40eb51499fe71e4fb20c27beea23045c62e9ba07/inet.defn#L101 Para registro , vejo os parâmetros da linha de comando para confirmação:
ps aux | grep dhclient
(A propósito, para ver os logs pode-se ir assim:
sudo journalctl | grep -i dhcp | less
)Dessa forma, ele pode se comunicar com um servidor DHCP que tem medo de RFC 4361.
Isso vem com algumas letras miúdas: para o Debian 10, tive que fazer o backport do pacote ifupdown. Eu segui https://unix.stackexchange.com/a/112160/203082 para obter localmente um
ifupdown_0.8.36~bpo10+1_amd64.deb
pacote. Após a instalação, não consegui reiniciar minha rede corretamente (provavelmente devido a algumas complexidades relacionadas ao systemd).Então eu tive que reiniciar, infelizmente. Em seguida, foi possível obter o endereço IP conforme o esperado.