If
virbr0
is a bridge, then how can it also function as a NAT?
Bem, isso não acontece. Mas o sistema em si tem uma porta na ponte, e se houver um endereço IP configurado na ponte, ele poderá fazer o encaminhamento / encaminhamento / NAT entre a ponte e alguma outra interface.
Portanto, supondo que você tenha, digamos eth0
como o uplink e virbr0
vinculando as VMs, que aparecem como vmnic0
e assim por diante. Então você teria algo assim:
^
|
eth0 (192.0.2.111 - your external IP)
|
[[ routing / NAT ]]
|
virbr0 (10.0.1.1 - this system on the VM bridge)
|
+--+-----+-----+-------+ (the bridging part)
| | ... | |
vmnic0 vmnicN
Aqui, eth0
não faz parte da ponte. Se fosse, as VMs seriam conectadas à rede externa sem roteamento. (O vmnic
s pode ser nomeado de alguma outra forma, não consigo lembrar as convenções de nomenclatura usadas ...)
ifconfig
ou ip addr
deve poder mostrar o IP da bridge, e você precisa de iptables -t nat -vL
para ver as regras NAT do iptables.
Agora, o virbr0-nic
do seu exemplo é aparentemente um dispositivo fictício criado para fornecer à bridge um endereço MAC imutável. De acordo com uma explicação na lista de discussão libvirt-users
:
It's a workaround for kernel bug/feature. The bridge's MAC is copied from the first NIC attached. So if one detach all interfaces from a bridge and then attach just one, the bridge will lost previous MAC and gain a new one - just the same as the attached interface has.
So if libvirt has to ensure a MAC for virtual bridge - it creates this dummy device (no traffic is routed through though) and just attach it to the virtual bridge.