Docker 컨테이너로 트래픽 전달

Docker 컨테이너로 트래픽 전달

호스트 A(88.12.0.1)와 호스트 B(193.11.8.1)가 SSH를 통해서만 연결되는 다음과 같은 시스템 시나리오가 있습니다. 호스트 B(+172.17.0.2)에는 IP 172.17.0.3으로 실행되는 Docker 컨테이너가 있습니다.

이제 호스트 B(포트 22222)의 애플리케이션 및 컨테이너(포트 22223)의 애플리케이션과 통신해야 하는 호스트 A의 애플리케이션이 있습니다.

호스트 A(포트 8081)의 다른 애플리케이션이 서버로 실행 중이고 Docker 컨테이너 애플리케이션이 이 애플리케이션에 접속해야 합니다.

지금까지 호스트 A에서 다음 규칙을 설정하여 호스트 A에서 B로만 트래픽을 성공적으로 전달했습니다.

ssh -NL 22222:193.11.8.1:22222 [email protected] -v
ssh -NL 22223:193.11.8.1:22223 [email protected] -v

호스트 A와 호스트 B 사이의 포트로는 SSH만 사용할 수 있습니다.

위의 첫 번째 규칙은 호스트 A의 애플리케이션이 호스트 B의 애플리케이션에 연결되는 첫 번째 경우를 다루기 때문에 그대로 작동합니다. 두 번째 규칙은 도커 컨테이너에 대한 트래픽을 호스트 A에서 호스트 B로 전달하는 것입니다(그러나 거기에서 도커 컨테이너로 전달해야 함).

호스트 B의 매핑은 대상 포트 22223으로 들어오는 트래픽이 Docker 컨테이너(172.17.03:22223)로 전달되어야 한다는 것입니다. Docker 컨테이너가 8081로 트래픽을 보낼 때 트래픽은 컨테이너를 실행하는 호스트 B, 호스트 A와 B를 호스트 A에서 실행되는 서버 애플리케이션 및 포트 8081에 연결하는 SSH 터널을 통해 포트 8081의 호스트 A로 전달되어야 합니다.

답변1

나는 당신이 원하는 것이 무엇인지 잘 이해하지 못하지만 질문에 대한 편집 내용을 iptables규칙으로 변환하고 있습니다.

하지만 먼저 컨테이너를 실행할 때 포트를 매핑해 보는 것은 어떨까요?

 docker run -d -p 22223:22223 yourimage

이는 포트의 호스트 IP에 있는 모든 패킷을 22223컨테이너로 전달하는 훌륭한 작업을 수행합니다.

사용 iptables대상 B host:

iptables -t nat -A PREROUTING -p tcp -d 193.11.8.1 --dport 22223 -j DNAT --to 172.17.0.3:22223

193.11.8.1:22223위의 명령은 패킷의 대상을 변경합니다172.17.0.3:22223

iptables -t nat -A PREROUTING -p tcp -s 172.17.0.3 --dport 8081 -j DNAT --to 88.12.0.1

위의 명령은 패킷의 대상을 변경하며 172.17.0.3대상 포트 8081는 다음과 같습니다.88.12.0.1:8081

관련 정보