Conéctese a una VPN (OpenVPN) desde un servicio acoplable en enjambre

11

Tengo un servidor OpenVPN ejecutándose que expone algunas direcciones IP privadas, me gustaría que mis servicios de enjambre Docker accedan a esas direcciones.

Idealmente, no habría un cliente OpenVPN "dentro" de los contenedores, ya que se espera que las imágenes se implementen en un entorno donde no será necesaria una VPN.

Lo que probé hasta ahora

Conecté con éxito un contenedor a mi VPN con la imagen dperson / openvpn-client .

Lancé con éxito otro contenedor usando ese contenedor como su red usando la --net=container:my-vpn-clientbandera.

Ahora estoy tratando de configurar un servicio acoplable que accederá a mis direcciones IP privadas y lo que encontré es:

  • No puedo ejecutar el cliente openVPN en un servicio ya que no se puede proporcionar cap-add: NET_ADMIN. Hay problemas abiertos con Docker discutiendo este asunto, pero aún están abiertos.
  • Pensé que podría hacer que el contenedor del cliente openVPN se ejecute "al lado" del clúster de enjambre, pero no puedo usarlo network_mode: "container:my-vpn-client"ya que no es compatible y tiene sentido ya que no podría forzar la presencia de un contenedor arbitrario en cada nodo del enjambre sin que sea un servicio en sí mismo.
  • Intenté crear una red conectable (puente / superposición) y simplemente pegué mi contenedor de cliente OpenVPN y espero que mágicamente otros miembros de esa red atraviesen esa tubería ... y me decepcionó.

Así que aquí estoy, ¿alguna idea?

PD: si puede ayudar, esto es principalmente para configurar algunas pruebas automatizadas que ejecutarán los servicios en una sola máquina acoplable en modo enjambre, como en swarm init> despliegue de pila> ejecutar pruebas> dejar enjambre. Entonces, si hay un "truco" para eso ... podría estar interesado;)


fuente

Respuestas:

1

Hago exactamente lo mismo, en su cliente de docker openvpn necesitará configurar 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

Para mí, configuré esto para ejecutarse en el arranque a través de una restauración de iptables

En su host docker, agregue lo siguiente a / 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 Esto es lo que usas donde

  • 172.18.0.0 es su red de acopladores
  • 172.18.0.50 es uno de sus contenedores acoplables
  • 172.18.0.100 es su cliente docker openvpn
  • 192.168.11.222 es la IP privada a la que desea que sus clientes de Docker puedan acceder
  • tun0 es la interfaz OpenVPN de su cliente docker
  • eth1 es la interfaz de red 172.18.0.0 de su cliente docker openvpn
chispas
fuente
Una excelente respuesta ... votada. Observe cómo hay dos cuestiones que deben abordarse: (1) asegurarse de que el tráfico se enruta al lugar adecuado y (2) asegurarse de que el software que se ejecuta en el entorno Docker sabe que la ruta existe. Es posible que también tenga que decirle OpenVPN cómo encaminar el tráfico, el uso de un ccrarchivo como si se tratara de una red local. Como con todo el enrutamiento TCP / IP, " traceroutees su mejor amigo, tal como está tcpdumpo WireShark".
Mike Robinson el