문제 소개
아래 다이어그램과 같은 네트워크 토폴로지가 있습니다. 모든 호스트는 서로 다른 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에서만 작동해야 하므로 이러한 주소는 불필요하다고 생각했기 때문입니다.