Eu mesmo consegui encontrar a solução. Demorei muito, porque quando eu testei em um KVM virtual, não funcionou por algum motivo.
Suponha que:
- IP1 - IP principal do meu servidor
- IP2 - IP extra usado para o certificado SSL do meu site
- IP3 - IP extra usado para minha máquina virtual
- eno1 é minha interface física de ethernet
No host - 3 arquivos:
# /etc/systemd/network/10-virbr1.netdev
[NetDev]
Name=virbr1
Kind=bridge
MACAddress=00:1e:67:ad:8d:12
[Bridge]
STP=false
# /etc/systemd/network/20-eno1.network
[Match]
Name=eno1
[Network]
Bridge=virbr1
# /etc/systemd/network/30-virbr1.network
[Match]
Name=virbr1
[Network]
Gateway=IP_GATEWAY
[Address]
Address=IP1
Peer=IP_GATEWAY/32
[Address]
Address=IP2
Peer=IP_GATEWAY/32
Na máquina virtual (algum Ubuntu mais antigo - não usa systemd):
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address IP3
netmask 255.255.255.255
gateway IP_GATEWAY
pointopoint IP_GATEWAY
dns-nameservers 8.8.8.8 1.1.1.1
Alguma explicação extra: MACAddress = 00: 1e: 67: ad: 8d: 12 foi necessário porque minha empresa de hospedagem (Hetzner) faz uma filtragem de MAC para que a ponte tenha que ter o MAC da placa de rede física.
Pela mesma razão, a VM precisa ter algum endereço MAC específico que você possa gerar no painel de controle do servidor do Hetzner. Então, no meu caso, a saída de "virsh dumpxml my-vm" é assim:
...
<interface type='bridge'>
<mac address='00:50:56:00:53:E1'/>
<source bridge='virbr1'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...