O FreeBSD Altera os endereços mac das interfaces?

0

Estou usando o KVM para hospedar uma VM guest. Na minha máquina virtual host, criei duas pontes e as atribui a uma interface física (também atribui uma sub-rede a elas).

O roteamento funciona muito bem, eu posso pingar recursos externos para e das interfaces.

Eu então atribuí essas 2 pontes à VM guest, que está executando o FreeBSD. Quando eu faço o login no FreeBSD Guest e vejo a configuração de rede, vejo esses 2 curr medias :

root@VM% ifconfig -a | grep "curr media"
        curr media: i802 52:53:f:6f:e2:b2
        curr media: i802 52:53:f:3b:24:22

Quando eu verifico todas as interfaces na minha VM Host Ubuntu, vejo o seguinte:

vnet1     Link encap:Ethernet  HWaddr fe:53:0f:6f:e2:b2
vnet2     Link encap:Ethernet  HWaddr fe:53:0f:3b:24:22

Isso é extremamente confuso, pois eu diria que a interface no FreeBSD teria o mesmo endereço MAC que o VNET associado.

O FreeBSD altera os endereços mac de fe para 52 ? Ou a interface freeBSD assume um endereço mac diferente do VNET associado?

Mais confusões relacionadas:
1) Se duas pontes, com roteamento, são atribuídas a uma VM guest, existe uma VNET criada para cada ponte no host?
2) Se duas pontes forem criadas, uma atribuída a 1 VM e outra atribuída a outra VM. Haveria ainda 2 VNETS?
3) Se 2 pontes forem criadas em uma VM host. No entanto, uma ponte é atribuída a 1 VM e outra ponte é atribuída a 2 VMs. Haveria 3 VNETs criados na VM host?

A razão para este esclarecimento é porque eu vejo um monte de VNETs ... e eu não tenho idéia de onde eles vêm (como eu não consigo entender os endereços MAC) e eu não consigo tirá-los porque eles não estão no arquivo network/interfaces do ubuntu.

    
por user2883071 18.08.2016 / 15:17

1 resposta

2

Ao usar o KVM, o endereço MAC da interface no lado do host nunca é o mesmo que o endereço MAC dentro da VM, independentemente do sistema operacional. É uma consequência da rede TUN / TAP.

Por exemplo, com uma VM do CentOS 7 em execução:

$ ip link show v-test1
64: v-test1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:0c:d8:88 brd ff:ff:ff:ff:ff:ff

$ ssh test1 /sbin/ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:0c:d8:88 brd ff:ff:ff:ff:ff:ff

Podemos ver semelhante com uma VM do Solaris 11:

55: v-solaris: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:94:47:6d brd ff:ff:ff:ff:ff:ff

$ ssh solaris ifconfig -a
....
net0: flags=100001004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4,PHYSRUNNING> mtu 1500 index 2
        inet 10.0.0.157 netmask ffffff00 broadcast 10.0.0.255
        ether 52:54:0:94:47:6d 

Portanto, não importa qual seja o sistema operacional da VM; o endereço MAC visto dentro da VM sempre será diferente daquele visto no lado do host.

Agora, você pode escolher normalmente o nome da interface no lado do host e o endereço MAC no lado do convidado por meio da configuração. Eu uso libvirt para gerenciar minhas VMs e assim no meu arquivo guest.xml eu tenho

<interface type='bridge'>
  <mac address='52:54:00:0c:d8:88'/>
  <source bridge='br0'/>
  <target dev='v-test1'/>
  <model type='virtio'/>
</interface>

Isso cria uma rede chamada "v-test1" no host e o endereço MAC dentro do convidado é especificado. Isso corresponde ao primeiro exemplo acima.

Se você especificar dois adaptadores de rede para um host, poderá escolher em qual ponte do host eles estão, o nome da interface de rede como visto no host e os endereços MAC de forma independente.

por exemplo

<interface type='bridge'>
  <mac address='52:54:00:0c:44:5d'/>
  <source bridge='br0'/>
  <target dev='v-test2'/>
  <model type='virtio'/>
</interface>
<interface type='bridge'>
  <mac address='52:54:00:0c:44:5e'/>
  <source bridge='internal'/>
  <target dev='v-test2b'/>
  <model type='virtio'/>
</interface>

Então agora eu defini duas interfaces, chamei um v-test2 e coloquei na bridge "br0" e outra chamada v-test2b e coloquei na bridge "internal"

$ ip addr show v-test2
68: v-test2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:0c:44:5d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe0c:445d/64 scope link 
       valid_lft forever preferred_lft forever

$ ip addr show v-test2b
69: v-test2b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:0c:44:5e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe0c:445e/64 scope link 
       valid_lft forever preferred_lft forever

$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.0025222613c0       no              eth0
....
                                                        v-test2

internal                8000.fe54000c445e       no              v-test2b

E dentro do convidado nós os vemos:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:0c:44:5d brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:0c:44:5e brd ff:ff:ff:ff:ff:ff

Isso torna possível definir exatamente quais interfaces e endereços MAC e pontes cada VM possui.

    
por 18.08.2016 / 15:34