Linux

如何連接 2 個虛擬網橋以使流量從一個到另一個?

  • August 13, 2018

Debian 系統,目前情況,通過 etc/network/interfaces 配置

網橋“br0”有 2 個物理乙太網介面 eth0(WAN 端,連接到 ISP 調製解調器/路由器) eth1(LAN 端連接到物理交換機)

eth0 和 eth1 之間的流量通過 IPtables 防火牆和 Suricata 作為 IPS。此設置目前工作正常。

現在我想通過 Linux 容器將“pi-hole”添加到這個設置中。linux 容器需要一個虛擬網橋來添加它的虛擬乙太網介面。

所以我想實現以下目標:

虛擬網橋“br0” - 帶有 eth0 (WAN)

<–>

連接到虛擬網橋“lanbr0” - 帶有 eth1(LAN) - 帶有 veth0(LXC 的虛擬乙太網介面)

這樣,如果將來需要,我可以向“lanbr0”網橋添加更多介面。

編輯 我能夠通過以下命令執行此操作 ip link add veth0 type veth peer name veth1

然後將 veth0 添加到 br0 並將 veth1 添加到 lanbr0 + 在啟動所有介面後將 eth1 從 br0 移動到 lanbr0

但是,我如何通過 /etc/network/interfaces 執行此操作(所以它在啟動期間像這樣載入?

沒有專門處理虛擬雙介面的規定type veth。因此,主要通過使用該pre-up選項進行一些修補。我保留了veth0and veth1,但你真的應該考慮選擇任何其他名稱(例如veth-br0veth-lanbr0),因為如果沒有提供這些名稱(例如:ip link add type veth),它們是預設選擇的名稱,它們可能會發生衝突。

對於veth介面:

iface veth0 inet manual
       pre-up ip link add veth0 type veth peer name veth1 || :
       hwaddress 02:00:00:01:00:00

iface veth1 inet manual
       pre-up ip link add veth1 type veth peer name veth0 || :
       hwaddress 02:00:00:01:00:01

這會在調出其中任何一個界面時啟用這兩個界面。此處不會失敗,|| :因為對等介面已由“其他”介面設置。請注意,為了ifup’s 的內部狀態,最後都應該提出來,即使提出一個會使另一個出現。對於預期用途,這hwaddress可能是可選的,並且無論如何都可以設置為任何其他正確的值。網橋採用第一個從屬介面的 MAC 地址。

現在在橋樑中使用它們。我不會把你所有的設置(因為你沒有真正給它),只是veth相關的部分。您將不得不調整我無法猜測的內容以及我在哪裡留下了一些XXXX...(例如,是inet XXXX inet manual inet staticinet dhcp?)

auto br0
iface br0 inet XXXX
   pre-up ifup veth0
   bridge_ports eth0 veth0        
   ...

auto lanbr0
iface lanbr0 inet XXXX
   pre-up ifup veth1
   bridge_ports veth1 eth1
   address xx.xx.xx.xx
   netmask 255.255.255.0
   ...

注意我ifup vethX在裡面添加了一個命令,否則它會抱怨介面不存在,會在沒有這個介面的情況下啟動橋並認為它已經完成。我不必在|| :這裡使用,因為調出已經在邏輯上(意思ifupdown是狀態)的界面不是錯誤。

完成缺少的部分後,將它們放在單獨的(或不)配置文件中/etc/network/interfaces.d(或什/etc/network/interfaces至),這應該可以工作。

如果它一開始不起作用,請嘗試在邏輯上關閉所有介面(邏輯上我的意思是使用ifdown)並重試:那將是因為錯誤的邏輯狀態導致某些介面無法正確(重新)配置。

另請注意,可能會與其他網路管理器進行互動,例如… NetworkManager。可能有一些選項可以讓他們忽略某些介面,但這超出了這個答案的範圍。

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