Docker 컨테이너가 특정 IP 주소에만 연결되도록 허용

Docker 컨테이너가 특정 IP 주소에만 연결되도록 허용

목표는 특정 IP 주소(호스트가 속한 로컬 네트워크와 인터넷 모두)에만 연결할 수 있는 도커 컨테이너를 만드는 것입니다.

컨테이너 자체에는 직접 액세스하거나 노출할 수 있는 포트가 필요하지 않습니다.

예:

  1. 도커 호스트 192.168.1.100
  2. IP 카메라와 같은 192.168.1.150의 일부 장치
  3. <static_ip>의 일부 클라우드 VPS

— <static_ip>에 ​​SSH로 연결하고 장치 192.168.1.150에 연결할 수 있지만 다른 것에는 연결할 수 없는 컨테이너를 생성해야 합니다(특히 호스트에 다른 컨테이너가 없고 192.168.1.0 네트워크에 다른 컨테이너가 없으며 아마도 아무것도) VPS가 아닌 인터넷에서).

다양한 서비스가 포함된 다른 컨테이너가 호스트 시스템에서 실행되고 있으므로 이러한 컨테이너가 방해를 받아서는 안 됩니다.

몇 가지 조사 끝에 다음과 같은 사용자 정의 브리지 네트워크를 만들어야 한다는 것을 알아냈습니다.

docker network create --driver bridge \
-o "com.docker.network.bridge.enable_icc"="false" \
my-restricted-network

그런 다음 해당 네트워크에서 컨테이너를 실행합니다.

docker run --name my-restricted-container \
--network my-restricted-network \
-d image_name /entrypoint.sh

그럼 내가 무엇을 해야 합니까? 호스트에 my-restricted-network제어 전용 iptables 규칙을 추가하고 싶습니다. 정확히 어떻게요?

답변1

글쎄, RTFM 30분 후에 해결책을 찾았습니다.

Docker 호스트의 모든 항목:

  1. my-restricted-network의 인터페이스 ID를 찾으십시오.
docker network ls | grep my-restricted-network
38d3c24a48ad   my-restricted-network   bridge    local
  1. 다음 규칙을 삽입합니다.
iptables -I DOCKER-USER -i br-38d3c24a48ad -j DROP
iptables -I DOCKER-USER -i br-38d3c24a48ad -d 192.168.1.150 -j ACCEPT
iptables -I DOCKER-USER -i br-38d3c24a48ad -d <static_ip> -j ACCEPT

관련 정보