如何在邏輯上分離主機上的介面?

如何在邏輯上分離主機上的介面?

問題介紹

我有一個如下圖所示的網路拓撲。所有主機都運行不同的 Linux 發行版,我的所有配置都應該(希望)在主機 A(即 RHEL7)上完成。

網路拓撲圖

使用此路由表:

Destination     Gateway         Genmask         Flags Metric Ref    Use 

Iface
default         fw.gatename.    0.0.0.0         UG    100    0        0 enp34s0
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 enp9s0
10.0.1.2        0.0.0.0         255.255.255.255 UH    0      0        0 bridge1
10.12.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp2s0f1
10.14.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp2s0f0
10.17.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp7s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.2      0.0.0.0         255.255.255.255 UH    0      0        0 bridge2
172.18.0.3      0.0.0.0         255.255.255.255 UH    0      0        0 bridge0
172.18.0.4      0.0.0.0         255.255.255.255 UH    0      0        0 bridge1
192.168.3.0     0.0.0.0         255.255.255.0   U     100    0        0 enp34s0
192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 enp35s0
192.168.30.91   0.0.0.0         255.255.255.255 UH    0      0        0 bridge2
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

我的主要目標是讓Host A的每個實體介面映射到一個Docker容器,這樣流量就可以自由流動僅有的在此映射的兩端之間(並且沒有進出此映射之外的介面的流量)。

例如,Container1 應該能夠(僅)與主機 B 通訊(沿著圖中的紅色連結),而 Container2 應該能夠(僅)與主機 C 通訊(沿著圖中的綠色連結)。

初步嘗試

預設情況下,docker 會建立一個橋接器br-97707d67f97c(例如),我已將其刪除(因為它將所有容器相互連接)。我創建了三座橋(bridge0bridge1bridge2),因為我認為可能有希望透過某種方式使橋變得「私有」。

就目前而言,我可以從任何容器 ping 到主機 A、B 或 C 上的任何介面;我無法從一個容器 ping 到另一個容器,我認為這是因為它們位於同一子網路上並且混淆了網橋。

問題

如何在邏輯上分離主機上的接口,以便它們只能與我希望它們交互的接口交互?

答案1

我能夠透過從頭開始,然後按子網路分隔介面來解決此錯誤。

以我的問題中的圖表為例,我將 Container2 的 IP 位址改為 10.0.0.0/24 子網路內,例如 10.0.1.100。我將 Container1 的位址更改為 192.168.30/24 子網路。

enp35s0我還刪除了和中的 IP 位址enp9s0,因為我認為這些是不必要的,因為我的範例中的網橋只能在 OSI 第 2 層上運行。

相關內容