Как логически разделить интерфейсы на хосте?

Как логически разделить интерфейсы на хосте?

Введение в проблему

У меня есть топология сети, которая выглядит как на схеме ниже. Все хосты работают под управлением разных дистрибутивов 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, чтобы трафик мог свободно проходить.толькомежду обоими концами этого сопоставления (и никакого трафика к или от интерфейсов за пределами этого сопоставления).

Например, Контейнер1 должен иметь возможность (только) взаимодействовать с Хостом B (по красным связям на схеме), а Контейнер2 должен иметь возможность (только) взаимодействовать с Хостом C (по зеленым связям на схеме).

Первая попытка

По умолчанию docker создает мост br-97707d67f97c(например), который я удалил (потому что он соединяет все контейнеры друг с другом). Я создал три моста ( bridge0, bridge1, bridge2), потому что я думал, что есть надежда на какой-то способ сделать мост «частным».

На данный момент я могу выполнить ping из любого контейнера на любой интерфейс на хосте A, B или C; я не могу выполнить ping из одного контейнера в другой, что, как я предполагаю, связано с тем, что они находятся в одной подсети и путают мост.

Вопрос

Как можно логически разделить интерфейсы на хосте, чтобы они могли взаимодействовать только с тем(и) интерфейсом(ами), с которыми(и) я хочу?

решение1

Мне удалось устранить эту ошибку, начав с нуля, а затем разделив интерфейсы по подсетям.

Чтобы использовать диаграмму в моем вопросе в качестве примера, я изменил IP-адрес для Container2, чтобы он был в подсети 10.0.0.0/24, например, 10.0.1.100. Я изменил адрес для Container1, чтобы он был в подсети 192.168.30/24.

Я также удалил IP-адреса из enp35s0и enp9s0, поскольку посчитал их ненужными, поскольку мосты в моем примере должны работать только на уровне OSI 2.

Связанный контент