Linux

FreeBSD會改變介面的mac地址嗎?

  • August 18, 2016

我正在使用 KVM 來託管訪客 VM。在我的主機 VM 上,我創建了 2 個網橋並將每個網橋分配給一個物理介面(也為它們分配了一個子網)。

路由一切正常,我可以在介面之間ping外部資源。

然後我將這 2 個網橋分配給執行 FreeBSD 的來賓 VM。當我登錄到 FreeBSD 來賓並查看網路配置時,我看到了這些 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

當我檢查主機 Ubuntu VM 上的所有介面時,我看到以下內容:

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

這非常令人困惑,因為我假設 FreeBSD 中的介面與關聯的 VNET 具有相同的 mac 地址。

FreeBSD 是否將 mac 地址從 更改fe52?或者 freeBSD 介面是否採用與關聯的 VNET 不同的 mac 地址?

更多相關的困惑:

1)如果2個帶有路由的網橋分配給來賓VM,是否為主機上的每個網橋創建了一個VNET?

  1. 如果創建了 2 個網橋,一個分配給 1 個 VM,另一個分配給另一個 VM。還會有 2 個 VNETS 嗎?

  2. 如果有 2 個網橋,則在主機 VM 上創建。但是,一個網橋分配給 1 個虛擬機,另一個網橋分配給 2 個虛擬機,是否會在主機虛擬機上創建 3 個 VNET?

進行此澄清的原因是因為我看到一大堆 VNET.. 我不知道它們來自哪裡(因為我似乎無法理解 MAC 地址)而且我似乎無法將它們取下來,因為它們不在ubuntu的network/interfaces文件。

使用 KVM 時,無論作業系統如何,主機端的介面 MAC 地址都不會與 VM 內部的 MAC 地址相同。這是 TUN/TAP 網路的結果。

例如,執行 CentOS 7 虛擬機:

$ 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

我們可以在 Solaris 11 VM 上看到類似情況:

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 

因此,VM OS 是什麼並不重要。在虛擬機內部看到的 MAC 地址總是與在主機端看到的不同。

現在您可以通過配置正常選擇主機端的介面名稱和客戶機端的 MAC 地址。我使用 libvirt 來管理我的虛擬機,所以在我的 guest.xml 文件中我有

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

這會在主機上創建一個名為“v-test1”的網路,並指定來賓內部的 MAC 地址。這與上面的第一個範例相匹配。

如果您為主機指定兩個網路適配器,那麼您可以選擇它們所在的主機上的網橋、主機上看到的網路介面名稱以及 MAC 地址。

例如

<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>

所以現在我定義了兩個介面,一個稱為 v-test2 並將其放在網橋“br0”上,另一個稱為 v-test2b 並將其放在網橋“內部”上

$ 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

在客人內部,我們看到了他們:

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

這使得準確定義每個 VM 具有的介面和 MAC 地址以及橋接成為可能。

引用自:https://unix.stackexchange.com/questions/304233