Kvm-Virtualization

Linux Bridge - 多個 VLAN 進入預設 VLAN

  • October 11, 2016

我有一個執行 2 個 KVM 實例的 CentOS 6 Box(核心 2.6.32-642.6.1.el6.x86_64)。

我從數據中心獲得了兩個 VLAN。不幸的是,他們不會將兩個 VLAN 合併到一個 VLAN 中。我需要在同一個 KVM 來賓上同時使用兩個 VLAN。

預設 VLAN 未標記,第二個 VLAN 標記為 id 471。

目前,我是這樣做的:

bridge name     bridge id               STP enabled     interfaces
br0             8000.0cc47a7fed0a       no              eth1
                                                       kvm1100.0
br1             8000.0cc47a7fed0a       no              eth1.471
                                                       kvm1101.0

這是按預期工作的。我可以在 KVM 實例 1100 上使用未標記的 VLAN,在 KVM 實例 1101 上使用 VLAN 471。

現在我希望 KVM 1101 可以使用來自未標記 VLAN 和 VLAN 471 的 IP 地址。

所以我將 eth1.471 添加到 br0,然後將 kvm1101.0 也添加到 br0。

bridge name     bridge id               STP enabled     interfaces
br0             8000.0cc47a7fed0a       no              eth1
                                                       eth1.471
                                                       kvm1100.0
                                                       kvm1101.0

這是有效的,我可以在兩個實例上訪問兩個 VLAN。它可以按我的意願工作。

但是當 eth1.471 被添加到 br0 時,我看到整個網路都有丟包。不僅在這台伺服器上,它會影響一切。當我從 br0 中刪除 eth.471 時,封包遺失停止。

看來這不是正確的方法。我嘗試了各種各樣的事情,但我總是得到相同的結果。

我錯過了什麼?如前所述,數據中心不願意將兩個 VLAN 合併為一個。

不能將 VLAN 傳遞給 KVM 實例並在那裡配置 VLAN + IP 地址。KVM 實例應該能夠使用兩個 vlan 而無需額外配置。

當您將 eth1 與 eth1.174 橋接時,您實際上在介面上的數據中心網路中創建了一個拓撲循環,因此會出現封包遺失和其他問題。

您的問題的可能解決方案是向 kvm1101 引入第二個介面,並將KVM 介面添加到 br0,將 br0 和 br1 作為單獨的網橋綁定到物理適配器上各自的 VLAN。

如果要在 VM 的不同 IP 子網中使用兩個不同的 IP 地址,則需要 VM 中的兩個不同介面。根本沒有其他辦法,因為這就是 IP 的工作方式。規則是您不能在同一個 L2 廣播域中配置兩個不同的 IP 子網。這也是數據中心拒絕將它們合二為一的原因。

因此,您需要為您的 VM 分配兩個虛擬網路適配器 (kvm1100.0和)。kvm1101.0

但是,如果您的 VM 需要偵聽標記 VLAN 中 IP 地址上的某些特定埠,則可以使用 NAT:

主機作業系統已在您標記的 vlan 中配置了一個地址(br1或者eth1.471,此處實際上不需要網橋)。然後,主機作業系統配置了埠轉發,以便將任何到eth1.471介面 IP 地址埠 X 的傳入連接轉發到網路中的來賓 VM IP 地址eth1

如果您希望某些目標將 NAT 用作eth1.471傳出介面,您還可以將 NAT 用於來自來賓 ​​VM 的傳出流量。

引用自:https://serverfault.com/questions/808350