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

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

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

Вопрос

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

1 ответ1

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .