如何在逻辑上分离主机上的接口?

如何在逻辑上分离主机上的接口?

问题介绍

我有一个如下图所示的网络拓扑。所有主机都运行不同的 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

我的主要目标是让主机 A 的每个物理接口映射到 Docker 容器,以便流量可以自由流动仅有的此映射的两端之间(并且没有往返于此映射之外的接口的流量)。

例如,Container1 应该能够(仅)与主机 B 通信(沿图的红色链接),而 Container2 应该能够(仅)与主机 C 通信(沿图的绿色链接)。

初步尝试

默认情况下,docker 会创建一个网桥br-97707d67f97c(例如),我已将其删除(因为它将所有容器相互连接)。我创建了三座网桥(、、bridge0),因为我认为可能有一些方法可以使网桥“私有化”。bridge1bridge2

就目前情况而言,我可以从任何容器 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 层上运行。

相关内容