호스트에서 인터페이스를 논리적으로 분리하려면 어떻게 해야 합니까?

호스트에서 인터페이스를 논리적으로 분리하려면 어떻게 해야 합니까?

문제 소개

아래 다이어그램과 같은 네트워크 토폴로지가 있습니다. 모든 호스트는 서로 다른 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의 모든 인터페이스로 ping을 수행할 수 있습니다. 한 컨테이너에서 다른 컨테이너로 핑을 보낼 수 없습니다. 이는 동일한 서브넷에 있고 브리지를 혼란스럽게 하기 때문이라고 생각합니다.

질문

호스트의 인터페이스를 내가 원하는 인터페이스하고만 상호 작용할 수 있도록 논리적으로 분리하려면 어떻게 해야 합니까?

답변1

처음부터 시작한 다음 인터페이스를 서브넷별로 분리하여 이 오류를 해결할 수 있었습니다.

내 질문의 다이어그램을 예로 사용하기 위해 Container2의 IP 주소를 10.0.0.0/24 서브넷 내에 있도록 변경했습니다(예: 10.0.1.100). Container1의 주소를 192.168.30/24 서브넷에 있도록 변경했습니다.

enp35s0또한 및 에서 IP 주소를 제거했습니다 enp9s0. 제 예의 브리지는 OSI 레이어 2에서만 작동해야 하므로 이러한 주소는 불필요하다고 생각했기 때문입니다.

관련 정보