Antes de iniciar uma VM do meu script, preciso descobrir qual endereço IP ela obterá.
Então eu fiz:
dhclient <interface>
E isso funciona, porque dhclient
usa o endereço MAC da macvtap
interface especificada e me retorna o endereço IP do servidor DHCP.
Essa não é uma solução infalível, pois pode haver algumas pessoas que tenham um roteador em casa que nem sempre retorna o mesmo IP para o mesmo MAC. Mas todos os roteadores que já tive funcionaram, então, se funcionar em 99% dos casos, é bom o suficiente para mim.
Mas o problema é que dhclient
também faz alterações na configuração local porque acha que realmente quero usar esse endereço no host. Existe um -n
sinalizador que deve impedir isso, mas não é suportado pelo Debian ou pela maioria das outras distribuições.
Então, qual é a melhor maneira de perguntar a um servidor DHCP qual IP ele está planejando servir para um determinado endereço MAC, sem realmente modificar nenhuma configuração no host?
dhcp
não altera a configuração local diretamente, ele chama um script assim que obtém a concessão (por padrão/sbin/dhclient-script
no Debian).Você pode especificar seu próprio script
-sf
e usar o$new_ip_address
para descobrir o IP alugado. Existe uma página de manual dedicada para este tipo de script.dhcp
continuará funcionando assim que conseguir o aluguel, então você precisa pará-lo. Por padrão, o pid é armazenado,/var/run/dhclient.pid
mas você pode alterá-lo com-pf
.Um exemplo de roteiro:
Então, se você executar:
Você receberá o valor.
Certifique-se de evitar a interação com outros processos do cliente DHCP (
dhclient
,NetworkManager
, ...) pois, nesse caso, os resultados podem ser diferentes.Você não pode perguntar a um servidor DHCP qual endereço IP ele emitirá e, em seguida, confiar nisso daqui para frente. Pelo menos, não a menos que o servidor possa atualizar seu banco de dados de configuração para que ele "lembre" qual endereço forneceu a você.
Ou ele emitiu o endereço, caso em que deve registrar o fato, ou não forneceu o endereço e está disponível para outro dispositivo reivindicar.