Se você não deseja fazer nenhuma configuração dentro do convidado, a única opção é um servidor DHCP que entregue endereços IP estáticos. Se você usar o bridge
modo, provavelmente será um servidor DHCP externo. Consulte o manual para descobrir como atender a concessões estáticas.
Mas pelo menos nos modos de encaminhamento nat
ou route
, você pode usar o libvirt embutido dnsmasqd
(versões mais recentes do libvirtd suportam a opção "dhcp-hostsfile" do dnsmasq). Aqui está como:
Primeiro, descubra os endereços MAC das VMs que você deseja atribuir endereços IP estáticos:
virsh dumpxml $VM_NAME | grep 'mac address'
Depois edite a rede
virsh net-list
virsh net-edit $NETWORK_NAME # Probably "default"
Encontre a <dhcp>
seção, restrinja o intervalo dinâmico e adicione entradas de host para suas VMs
<dhcp>
<range start='192.168.122.100' end='192.168.122.254'/>
<host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
<host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
<host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>
Em seguida, reinicie sua VM (ou reinicie o cliente DHCP, por exemplo ifdown eth0; ifup eth0
)
Atualização: vejo que há relatos de que a alteração pode não entrar em vigor após o "virsh net-edit". Nesse caso, tente isso após a edição:
virsh net-destroy $NETWORK_NAME
virsh net-start $NETWORK_NAME
... e reinicie o cliente DHCP da VM.
Se isso ainda não funcionar, você pode precisar
- interrompa o serviço libvirtd
- matar todos os processos dnsmasq que ainda estão vivos
- inicie o serviço libvirtd
Nota: Não há como o host KVM forçar uma VM com sistema operacional desconhecido e configuração desconhecida a usar uma determinada configuração de rede. Mas se você souber que a VM usa um determinado protocolo de configuração de rede - por exemplo, DHCP - você pode usá-lo. Isto é o que este post assume.
Alguns sistemas operacionais (por exemplo, algumas distribuições Linux) também permitem passar opções de configuração de rede para o convidado, por exemplo, através da linha de comando do kernel. Mas isso é muito específico para o sistema operacional e não vejo vantagem sobre o método DHCP.