问题介绍
我有一个如下图所示的网络拓扑。所有主机都运行不同的 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
),因为我认为可能有一些方法可以使网桥“私有化”。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 层上运行。