Linux

虛擬網橋:為什麼必須為其分配 IP 地址?

  • March 12, 2020

我正在設置一個 QEMU/KVM 虛擬機,並想為它使用橋接網路。在我讀過的每本手冊/教程中,都說要在物理網卡上禁用 DHCP 並在網橋上啟用它。我不明白的是,如果網橋的行為就像物理網橋/交換機一樣,為什麼它必須分配一個 IP 地址,而實際的物理網卡沒有?這個問題已經被問過幾次,但我仍然沒有找到答案,例如這裡的答案說虛擬機可以通過這種方式與網橋通信。但他們為什麼需要?使用實際的物理機器,網橋透明地工作,只轉發流量。所以,我的問題是:

  1. 為什麼虛擬網橋需要 IP 地址而物理網橋不需要?
  2. 當 NIC 沒有 IP 地址時,物理 NIC 如何知道使用虛擬網橋的 IP 地址?
  3. 為什麼虛擬機需要與網橋通信,而物理機實際上並不直接與物理網橋通信?

這裡有一些插圖可以更好地說明我的意思:

  1. 我如何想像帶有網路交換機的物理網路的工作原理:

我如何想像帶有網路交換機的物理網路的工作原理

  1. 我如何想像虛擬橋〜應該〜工作

我如何想像虛擬橋〜應該〜工作

  1. 我如何理解它實際上有效

我如何理解它實際上有效

  1. 為什麼虛擬網橋需要 IP 地址而物理網橋不需要?

虛擬網橋需要 IP 地址是一種誤解。它不需要它。

您實際上可以擁有一個沒有 IP 地址的虛擬網橋。但是,主機本身將根本無法通過該物理介面上的 IP 訪問:只有 VM 可以。

在企業虛擬化主機中,這可能很有用:您可能有一個需要連接到客戶虛擬機的客戶網路。您可能不想從這樣的網路授予對虛擬化主機本身的訪問權限,而只想授予相應的 VM。然後,您將擁有另一個物理上獨立的管理網路,用於管理您的虛擬化主機。該網路將通過一個單獨的 NIC 連接到主機,該 NIC不是任何虛擬網橋的成員。

  1. 當 NIC 沒有 IP 地址時,物理 NIC 如何知道使用虛擬網橋的 IP 地址?

除非物理 NIC 具有特定的 IPv4 加速功能,否則 IP 地址只是 NIC 的有效負載數據。基本物理網卡僅適用於第 2 層,即 MAC 地址。IP 協議是第 3 層,通常留給作業系統的網路驅動程序堆棧。ifconfig當您使用或將 IP 地址配置到 NIC 時ip addr,您不必對實際的物理硬體配置進行任何更改,而是對包含物理 NIC 和與網卡。

當物理網卡被配置為網橋的成員時,任何第 3 層加速功能都可能需要關閉:當作為網橋的一部分時,網卡需要接收所有傳入的數據包,無論目的 MAC 或 IP 地址,網橋程式碼將決定是否將數據包轉發到網橋的哪個成員。一個基本的網橋根本不應該關心 IP 地址。網橋中的任何第 3 層功能都超出了基本網橋功能,並且在虛擬網橋中是/應該是可選的。

如果物理 NIC 在配置為網橋的一部分時配置了 IP 地址,它將啟動該 NIC(+其驅動程序)上的 ARP 功能。但是來自該物理網卡的傳出 ARP 消息將無法到達虛擬機:要使用其 ARP 到達整個網段(如適當的第 2 層功能要求),網卡驅動程序必須生成 ARP 消息作為傳出& 傳入消息同時,NIC 驅動程序將沒有程式碼來執行此操作。

擁有帶有 VM 的虛擬網橋意味著網橋 IP 段的某些部分將在物理上位於主機之外,而其他部分則包含在位於主機內部的 VM 中。如果主機像往常一樣使用 NIC 來嘗試與其中一個 VM 通信,則數據包將不必要地從主機發送到主機所連接的物理交換機或路由器,並且從那裡他們必須返回主機,並通過網橋到達目標虛擬機。

這肯定是低效的,並且可能根本不起作用:帶有虛擬網橋的主機所連接的物理交換機通常沒有理由將源自該主機的任何數據包發送回主機本身。

相反,從主機到橋接網段的傳出數據包必須通過橋接程式碼發送,該程式碼首先查找橋接的哪個介面(虛擬或物理)將“最接近”目的地。如果網橋知道目的地,則將傳出數據包直接發送給它。對於主機和它的虛擬機之間的通信,這意味著通信完全發生在物理主機內部,根本不使用主機外部的物理網路頻寬。

如果網橋不知道目的 MAC 地址,則向外發送的數據包最初會發送到所有網橋成員介面:一旦收到應答,網橋就會獲知初始數據包的目標位置並可以返回到有效的操作方法(如上)。

當從包含網橋的主機發出 ARP 請求時,請求必須廣播到虛擬機物理網卡,這樣請求才會真正發送到整個網段:網橋程式碼可以做到這一點,單個物理網卡可以不。

我認為沒有要求 Linux 網橋應該是專門的物理或虛擬的:我不明白為什麼 Linux 網橋不能有多個物理介面與之關聯的任意數量的虛擬機。但是在企業環境中,您通常不會想要建構這樣的“無所不能的主機”。它很容易成為一個棘手的、關鍵的基礎設施,永遠不會有任何停機時間;換句話說,讓系統管理員頭疼。

  1. 為什麼虛擬機需要與網橋通信,而物理機實際上並不直接與物理網橋通信?

再次誤解:虛擬機不需要網橋上的 IP 地址來“與網橋通信”。

但是,如果您希望主機和虛擬機能夠在同一 IP 網段中相互通信,則為橋接設備分配 IP 地址是一種方法。

橋接設備上的 IP 地址主要用於滿足主機的通信需求,而不是虛擬機的通信需求- 但它可以允許主機通過 IP 有效地與虛擬機通信,而無需循環通過外部設備(如果這是您想要的)。

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