swarm의 도커 서비스에서 VPN (OpenVPN)에 연결


11

개인 IP 주소를 노출시키는 OpenVPN 서버가 있는데 도커 스웜 서비스가 해당 주소에 액세스하기를 원합니다.

이상적으로는 VPN이 필요하지 않은 환경에 이미지가 배포 될 것으로 예상되므로 컨테이너에 "내부"OpenVPN 클라이언트가 없습니다.

내가 지금까지 시도한 것

dperson / openvpn-client 이미지를 사용 하여 컨테이너를 VPN에 성공적으로 연결했습니다 .

--net=container:my-vpn-client플래그를 사용하여 해당 컨테이너를 네트워크로 사용하여 다른 컨테이너를 성공적으로 시작했습니다 .

이제 개인 IP 주소에 액세스 하는 도커 서비스 를 설정하려고하는데 내가 찾은 것은 다음과 같습니다.

  • openVPN 클라이언트를 서비스에서 실행할 수 없으므로 실행할 수 없습니다 cap-add: NET_ADMIN. Docker에는이 문제를 논의하는 공개 문제가 있지만 여전히 열려 있습니다.
  • 나는 openVPN 클라이언트 컨테이너가 swarm 클러스터를 "옆으로"실행할 수 있다고 생각했지만 network_mode: "container:my-vpn-client"지원 되지 않으므로 사용할 수 없으며 임의의 컨테이너를 모든 노드에 강제로 배치 할 수 없기 때문에 의미가 없습니다. 그것이 서비스 자체가 아닌 떼.
  • 나는 연결 가능한 네트워크 (브리지 / 오버레이)를 만들려고 노력했고 OpenVPN 클라이언트 컨테이너를 그 안에 넣고 마술로 그 네트워크의 다른 구성원이 그 파이프를 통과 할 것으로 기대합니다 ... 그리고 실망했습니다.

그래서 나는 여기에, 어떤 생각입니까?

PS 도움이 될 수 있다면, 이는 주로 swarm init> stack deploy> run tests> swarm leave와 같이 swarm 모드에서 단일 docker 시스템에서 서비스를 실행하는 일부 자동 테스트를 설정하는 것입니다. 그래서 "해킹" 있다면 관심 있을 것입니다.)

답변:


1

openvpn docker 클라이언트에서 NAT를 구성해야합니다.

iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -o tun0 -j SNAT --to-source 10.8.0.10
iptables -t nat -A POSTROUTING -d 172.18.0.50/32 -o eth1 -j SNAT --to-source 172.18.0.100

나를 위해 부팅시 iptables-restore를 통해 실행되도록 설정했습니다.

도커 호스트에서 다음을 / etc / network / interfaces에 추가하십시오.

post-up ip rule add from 172.18.0.0/16 table 200
post-up ip route add 192.168.11.222 via 172.18.0.100 table 200

NB 이것은 당신이 어디에 사용

  • 172.18.0.0은 도커 네트워크입니다
  • 172.18.0.50은 도커 컨테이너 중 하나입니다.
  • 172.18.0.100은 docker openvpn 클라이언트입니다
  • 192.168.11.222는 도커 클라이언트가 액세스 할 수있는 개인 IP입니다.
  • tun0은 도커 클라이언트의 OpenVPN 인터페이스입니다.
  • eth1은 openvpn docker 클라이언트의 172.18.0.0 네트워크 인터페이스입니다.

탁월한 응답 ... ... upvoted. 이 공지 얼마나 (1) 트래픽이 적절한 위치로 라우팅하고, 도커 환경에서 실행되는 소프트웨어가 경로가 존재 함을 알고 있다는 보장 (2)되는 것을 보장 : 처리해야 할 문제. 로컬 네트워크를 처리하는 것처럼 파일을 사용하여 트래픽을 라우팅하는 방법을 OpenVPN에 알려 주어야 할 수도ccr 있습니다. 모든 TCP / IP 라우팅과 마찬가지로 "와 마찬가지로 traceroute가장 친한 친구 tcpdump입니다."
Mike Robinson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.