FreeBSD會改變介面的mac地址嗎?
我正在使用 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 地址從 更改
fe
為52
?或者 freeBSD 介面是否採用與關聯的 VNET 不同的 mac 地址?更多相關的困惑:
1)如果2個帶有路由的網橋分配給來賓VM,是否為主機上的每個網橋創建了一個VNET?
如果創建了 2 個網橋,一個分配給 1 個 VM,另一個分配給另一個 VM。還會有 2 個 VNETS 嗎?
如果有 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 地址以及橋接成為可能。