Linux-Networking

Linux 伺服器作為非託管交換機

  • March 20, 2021

我有一個小型 Ubuntu x64 伺服器,它為我的家庭網路提供 dhcp、命名、文件和此類服務。它只需連接到旁邊的非託管 SOHO 交換機即可工作。但是,它在 PCIe 插槽中有未使用的 4xGbE i350 NIC 卡,我有使用這個 NIC 代替目前交換機的想法。如果它也像目前的專用設備一樣是普通的非託管交換機,它可能不會有任何優勢,但我想學習一些東西(我以後可能會將它變成託管交換機,也許實現一些 IPS/IDS 和其他東西)。我多麼驚訝地發現我不知道怎麼做。我當然做了我的搜尋,但這讓我更加困惑。首先,為什麼所有的howtos和articles都配置網橋來實現切換?對於非託管交換機,所有埠都是平等的,沒有 IP,其中一個通向網關。

使用橋接驅動程序。

網橋是第 2 層交換機的軟體實現,其中添加到網橋中的每個介面都是一個交換機埠。

假設您在橋接器中有 4 個 i350 埠並br0插入了另外兩台 PC:

[ Remote PC A - MAC aa:aa:aa:aa:aa ] ---- [ i350 #1 ] ---- .------------.
                                         [ i350 #2 ] ---- |  Linux PC  |
                                         [ i350 #3 ] ---- | bridge br0 |
[ Remote PC B - MAC bb:bb:bb:bb:bb ] ---- [ i350 #4 ] ---- '------------'

Remote PC A 嘗試訪問 Remote PC B。

ffPC A 將使用自己的源 MAC (all )向廣播目標 MAC 地址 (all ) 發送 ARP aa

網橋將收到該 ARP 請求並獲悉 MACaa已關閉 bridgeport i350 #1

然後,網橋將廣播轉發到所有其他 i350 埠,因為當交換機接收到廣播數據包時,這是正確的行為。

遠端 PC B 收到 ARP,並使用 PC A 的目標 MAC (all aa) 和它自己的源 MAC (all bb)生成回复給 PC A。

網橋將收到該 ARP 回复並獲悉 MACbb已關閉 bridgeport i350 #4

網橋看到目標 MAC 是aa,並且網橋知道 MACaa在埠可用i350 #1,因此將幀發送到該 NIC。

可以將 IP 地址添加到網橋並像正常網路介面一樣使用它,使用它進行路由,使用它進行 NAT 等,但您不必這樣做。

即使net.ipv4.ip_forward=0設置了核心可調,也會發生上述情況,因為網橋驅動程序沒有執行 IP 轉發或 IP 路由或 IP NAT,它正在執行第 2 層數據包交換,就像任何其他非託管第 2 層交換機一樣。

如果要將網橋連接到更大的網路,也可以在網橋上執行生成樹。

你說你使用的是 Ubuntu。以下應該適用於使用 NetworkManager 的 Ubuntu 20.04:

/etc/NetworkManager/system-connections/br0.nmconnection

[connection]
id=br0
type=bridge
interface-name=br0
permissions=

[bridge]
stp=false

[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=disabled
never-default=true

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=ignore
never-default=true

[proxy]

對每個名為 的 i350 重複此文件netX,使用每個 NIC 的正確 MAC 地址:

/etc/NetworkManager/system-connections/netX.nmconnection

[connection]
id=netX
type=ethernet
interface-name=netX
master=br0
metered=2
permissions=
slave-type=bridge

[ethernet]
mac-address=xx:xx:xx:xx:xx:xx
mac-address-blacklist=

[bridge-port]

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