tag hub docker debian openvpn docker-networking

hub - Cómo hacer que openvpn funcione con docker



docker tag (5)

Solución (TL; DR;)

Cree el script /etc/openvpn/fix-routes.sh con el siguiente contenido:

#!/bin/sh echo "Adding default route to $route_vpn_gateway with /0 mask..." ip route add default via $route_vpn_gateway echo "Removing /1 routes..." ip route del 0.0.0.0/1 via $route_vpn_gateway ip route del 128.0.0.0/1 via $route_vpn_gateway

Agregue un bit ejecutable al archivo: chmod o+x /etc/openvpn/fix-routes.sh . Cambie el propietario de este archivo a root: chown root:root /etc/openvpn/fix-routes.sh .

Agregue a su configuración dos líneas siguientes:

script-security 2 route-up /etc/openvpn/fix-routes.sh

Explicación

Openvpn agrega rutas para las siguientes redes: 0.0.0.0/1 y 128.0.0.0/1 (estas rutas cubren todo el rango de IP), y la ventana acoplable no puede encontrar un rango de direcciones IP para crear su propia red privada.

Debe agregar una ruta predeterminada (para enrutar todo a través de openvpn) y deshabilitar estas dos rutas específicas. fix-routes script de fix-routes hace eso.

Este script se llama después de que openvpn agrega sus propias rutas. Para ejecutar scripts, deberá establecer script-security en 2 que permite la ejecución de scripts de bash desde el contexto de openvpn.

Gracias

Me gustaría agradecer al autor de este comentario en github , también gracias al https://www.ovpn.com/ .

Recientemente instalé la privacidad vpn, y resulta que openvpn habilitado rompe la ventana acoplable.

Cuando intento ejecutar docker-compose up obtengo el siguiente error

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

Deshabilitar vpn soluciona el problema (sin embargo, prefiero no deshabilitarlo). ¿Hay alguna manera de hacer que estos dos coexistan pacíficamente? Yo uso debian jessie, y mi openvpn tiene la siguiente cadena de versión

OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 26 2017

Mucha gente "resolvió" este problema al deshabilitar el openvpn, así que estoy preguntando específicamente cómo hacer que estos dos funcionen al mismo tiempo.

Referencias:

  1. https://stackoverflow.com/a/45377351/7918
  2. https://stackoverflow.com/a/42499393/7918

Si esto hace alguna diferencia, mi proveedor de vpn es: https://www.ovpn.com/ y aquí está el archivo de configuración (algo redactado):

client dev tun proto udp remote host port remote-random mute-replay-warnings replay-window 256 push "dhcp-option DNS 46.227.67.134" push "dhcp-option DNS 192.165.9.158" remote-cert-tls server cipher aes-256-cbc pull nobind reneg-sec 432000 resolv-retry infinite comp-lzo verb 1 persist-key persist-tun auth-user-pass /etc/openvpn/credentials ca ovpn-ca.crt tls-auth ovpn-tls.key 1


Basado en la respuesta de Anas El Barkani , aquí hay un ejemplo completo paso a paso que usa PostgreSQL.

Mientras VPN no está conectada, cree una red de conexión permanente:

docker network create my-network --subnet 172.24.24.0/24

En el archivo de la ventana acoplable, especifique la red como externa:

version: "2"
services: postgres: container_name: postgres image: postgres volumes: - ./volumes/postgres/data:/var/lib/postgresql/data environment: - POSTGRES_DB=dummy - POSTGRES_USER=user - POSTGRES_PASSWORD=123456 - POSTGRES_HOST=localhost networks: - default ports: - "127.0.0.1:5432:5432"
networks: default: external: name: my-network

Eso es todo. Ahora puede habilitar su VPN e iniciar / detener el contenedor de la forma habitual:

docker-compose up -d docker-compose down

No es necesario activar o desactivar la VPN cada vez, o agregar scripts extraños como root.


Tal vez una forma de hacerlo es agregar todas las rutas, excepto 172.16.0.0/12 para enrutar a través de VPN, por lo que estamos seguros de que todo lo que sale se maneja adecuadamente:

sudo ip route add 192.0.0.0/2 via $route_vpn_gateway sudo ip route add 128.0.0.0/3 via $route_vpn_gateway sudo ip route add 176.0.0.0/4 via $route_vpn_gateway sudo ip route add 160.0.0.0/5 via $route_vpn_gateway sudo ip route add 168.0.0.0/6 via $route_vpn_gateway sudo ip route add 174.0.0.0/7 via $route_vpn_gateway sudo ip route add 173.0.0.0/8 via $route_vpn_gateway sudo ip route add 172.128.0.0/9 via $route_vpn_gateway sudo ip route add 172.64.0.0/10 via $route_vpn_gateway sudo ip route add 172.32.0.0/11 via $route_vpn_gateway sudo ip route add 172.0.0.0/12 via $route_vpn_gateway # And finally delete the default route which handle 172.16.0.0/12 sudo ip route del 128.0.0.0/1 via $route_vpn_gateway


También puede hacer que Docker-Compose funcione si define la subred CIDR en su archivo de redacción de Docker:

networks: your-network: ipam: config: - subnet: 172.16.238.0/24 gateway: 172.16.238.1

Otra opción: cree primero la red con la subred CIDR y luego especifique en el archivo de composición de la ventana acoplable que desea usar esta red:

network create your-network --subnet 172.24.24.0/24

En su docker compose el archivo:

networks: your-network: external: true


Un poco de contexto adicional aquí: las rutas 0.0.0.0 y 128.0.0.0 solo se crean si el servidor OpenVPN (también conocido como Servidor de acceso) está configurado para impulsar rutas para enviar todo el tráfico de Internet del punto final a través de la VPN. Al agregar estas rutas amplias, el tráfico de Internet del usuario se puede enrutar sin interferir con el enrutamiento en la LAN local, y garantizar que el punto final siga siendo capaz de enrutar el tráfico de OpenVPN al enrutador local.

Si enviar todo el tráfico de Internet a través del servidor OpenVPN no es un requisito, es mejor que solicite a su administrador de VPN que cree un perfil que solo enrute el tráfico a los destinos requeridos (como los rangos de direcciones IP privadas) a través de la VPN en lugar de todo. Eso debería evitar tener que meterse con las rutas en el punto final.