問題介紹
我有一個如下圖所示的網路拓撲。所有主機都運行不同的 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
(例如),我已將其刪除(因為它將所有容器相互連接)。我創建了三座橋(bridge0
、bridge1
、bridge2
),因為我認為可能有希望透過某種方式使橋變得「私有」。
就目前而言,我可以從任何容器 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 層上運行。