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