두 IPv6 Docker 컨테이너의 나가는 IP 주소는 동일해야 합니다.

두 IPv6 Docker 컨테이너의 나가는 IP 주소는 동일해야 합니다.

서버에 /64 IPv6 서브넷이 있습니다. 기본 /80 부분을 사용하도록 docker를 구성했으며 2개의 종속 컨테이너로 구성된 애플리케이션이 있습니다. 이 두 컨테이너는 abcd:1::/80 네트워크 내에 있습니다. 잠재적으로 이 애플리케이션의 인스턴스가 100개 실행될 수 있습니다.

문제는 두 컨테이너 모두 동일한 IP를 가져야 한다는 것입니다. 적어도 나는 응용 프로그램이 그렇게 생각하도록 속일 필요가 있습니다. 이는 두 개의 포트로 구성되어 app있으며 monitor현재는 app두 개의 포트를 노출하고 있습니다. 그 중 하나는 monitor외부 소스에 의해 다른 하나 에 의해 호출됩니다 . monitor외부 소스와 통신하며 동일한 IP를 사용하여 통신해야 합니다.app

지금은 다음과 같이 구성되어 있습니다. 내가 해야 할 일은 공통 IP를 통해 모든 트래픽을 라우팅 하는 네트워크 브리지 를 사용하는 appabcd:1::2입니다 . 이 IP는 서브넷 중 하나일 수 있습니다. 내 생각에 가장 쉬운 방법은 로 경로를 지정하는 것 입니다 . 결국 전화해서monitorabcd:1::3docker network createabcd:1:3abcd:1:2

dig +short myip.opendns.com @resolver1.opendns.com

컨테이너에서 동일한 값을 반환해야 합니다. 브리지가 생성된 후 브리지를 수정하는 IP 테이블을 사용하여 이 작업을 어떻게든 수행할 수 있습니까? 현재 호스트 시스템은 debian입니다.

답변1

이것이 최선의 방법인지는 의심스럽습니다(대신 '모니터링'이 '앱'을 통해 요청을 프록시해야 할 수도 있음). 그러나 IPv4에서와 같이 호스트에서 일반 ip6tables SNAT를 사용할 가능성이 높습니다.

-A PREROUTING -s abcd:1::3 -j SNAT --to-source abcd:1::2

NETMAP모든 주소에 대해 SNAT를 자동화하는 데 사용을 사용하는 것이 가능할 수 있습니다 .

-A PREROUTING -s abcd:1::/80 -j NETMAP --to ::2/::f

관련 정보