프록시(정방향 프록시)

프록시(정방향 프록시)

저는 네트워킹에 익숙하지 않아서 처음으로 시도해 봅니다. VPN 서버에 연결하는 openvpn docker를 만들었습니다. Docker 컨테이너 내에서 실행하면 wget -q -O - https://api.myip.comDocker의 네트워크가 VPN에 적절하게 연결되어 있고 IP가 VPN 서버의 IP인지 확인됩니다. 이제 Docker 컨테이너를 통해 호스트 트래픽을 라우팅하고 호스트 트래픽이 Docker의 VPN 연결을 사용하는 컨테이너 외부에서 동일한 결과를 얻으려고 합니다. docker 호스트 <-> 컨테이너 관계에서 이 작업을 수행하는 방법이 명확하지 않아서 docker의 포트 매핑 기능을 사용할 수 있고 http/https를 처리하기 위해 docker에 웹 프록시를 설정할 수도 있다고 생각했습니다. 요청.

따라서 동일한 도커 내부에 squid와 openvpn 서버를 설치하고 포트 3128을 노출했습니다(squid가 수신 대기하는 포트이기 때문). 호스트의 wget 명령은 다음과 같습니다. wget -q -O - https://api.myip.com -e use_proxy=yes -e http_proxy=localhost:12345

그러나 테스트 결과 트래픽이 Docker의 VPN 연결을 통과하지 않는 것으로 나타났습니다. 대신 결과는 통신이 호스트의 인터넷 연결을 통해 이루어졌음을 보여줍니다.

다음 Docker 실행 명령을 사용하여 컨테이너를 실행합니다.

docker run --rm --cap-add NET_ADMIN --device /dev/net/tun --name vpn -it --sysctl net.ipv6.conf.all.disable_ipv6=0 -p 12345:3128 vpn-image

위의 접근 방식이 잘못된 것인가요? 여러 Docker VPN 연결을 통해 호스트 트래픽을 라우팅하는 가장 좋은 방법은 무엇입니까?

다음 리소스는 가능함을 나타내지만 해당 사용 사례에 맞는 자체 솔루션을 제공합니다. 내 솔루션의 진행 상황을 디버그/테스트하는 데 도움이 될 수 있는 wget 또는 컬과 같은 Linux 네트워크 도구가 있으면 좋을 것입니다.

답변1

오래된 질문이지만 최근에 트래픽이 조금이라도 발생한 것 같아서 답변해 드리겠습니다.

수행하려는 작업에 따라 VPN을 통해 네트워킹을 연결하는 방법에는 2가지가 있으며, 라우팅하려는 대상에 따라 이를 수행하는 방법에는 3가지가 있습니다.

프록시(정방향 프록시)

이를 위해서는 VPN을 사용하려는 호스트 시스템이나 컨테이너가 VPN 컨테이너에서 실행 중인 프록시로 트래픽을 명시적으로 전달해야 합니다. VPN 컨테이너는 활성 VPN뿐만 아니라 프록시도 실행해야 합니다. 양방향 네트워크 전달을 매우 효과적으로 관리합니다.

이 기술을 사용하려면 VPN 컨테이너 내에서 수동으로 구성한 컨테이너 프록시 서버의 포트를 노출한 다음 localhost:port프록시로 사용하도록 호스트 시스템을 구성해야 합니다. 이것은 꽤 복잡하고 옵션이 많으므로 구체적으로 Google에 검색해야 합니다.

(호스트의) 네트워크 스택 직접 제어

일반적으로 VPN 컨테이너에는 별도의 네임스페이스에서 실행되는 별도의 네트워크 스택이 있지만 docker에 네트워크 네임스페이스를 분리하지 말고 호스트에서 기본적으로 실행되는 것처럼 전체 네트워크 스택 액세스 권한을 부여하도록 지시할 수 있습니다. 컨테이너화된 VPN을 호스트에 기본적으로 설치된 것처럼 사용하려는 경우 다음을 수행합니다. 그러나 호스트 네트워크 네임스페이스에 대한 제어는 단순히 공유하는 것과는 별도의 권한이므로 일부 기능도 추가해야 합니다. 3xact 기능은 VPN 소프트웨어에 따라 다르지만 일반적으로 CAP_NET, CAP_NET_RAW및 종종 입니다 CAP_ADMIN. 애플리케이션이 확실하지 않고 신뢰할 수 없다면 권한 모드를 사용하여 모든 기능(불필요한 기타 추가 기능 포함)을 부여할 수 있습니다. 따라서 이를 위해 실행 명령에 다음 두 가지 옵션을 추가합니다 --net=host --cap=CAP_NET,CAP_NET_RAW,CAP_NET_ADMIN.

(다른 컨테이너의) 직접 네트워크 스택 제어

이 옵션은 호스트의 직접 네트워크 스택 제어와 동일한 개념이지만 마치 해당 컨테이너 내에서 실행되는 것처럼 호스트 대신 다른 컨테이너에서 VPN을 사용할 수 있습니다. 이를 사용하려면 VPN 컨테이너가 아닌 컨테이너의 실행 명령에 라인을 추가하여 VPN 컨테이너와 네트워크 스택을 공유하도록 지시하면 됩니다.--net=container:vpn-container-name

관련 정보