34 votes

Comment faire openvpn travailler avec docker

J'ai récemment installé la vie privée vpn, et il s'avère que les permis openvpn sauts de docker.

Lorsque j'essaie d'exécuter docker-compose up - je obtenir de l'erreur suivante

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

La désactivation de vpn résout le problème (mais je préfère ne pas le désactiver). Est-il possible de faire ces deux co-exister pacifiquement? J'utilise debian jessie, et mon openvpn version suivante de la chaîne

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

Beaucoup de gens "résolu" le problème en désactivant l'openvpn, je suis donc demander spécifiquement sur la façon de faire de ces deux activités en même temps.

Références:

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

Si cela fait toute la différence mon fournisseur de vpn est: https://www.ovpn.com/ et c'est ici (un peu expurgée) fichier de config:

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

41voto

jb. Points 4932

Solution (TL;DR;)

Créer /etc/openvpn/fix-routes.sh script avec le contenu suivant:

#!/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

Ajouter un bit d'exécution dans le fichier: chmod o+x /etc/openvpn/fix-routes.sh. Changer le propriétaire de ce fichier à la racine: chown root:root /etc/openvpn/fix-routes.sh.

Ajouter à votre config deux lignes suivantes:

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

Explication

Openvpn ajoute les routes que pour les réseaux suivants: 0.0.0.0/1 et 128.0.0.0/1 (ces itinéraires de couvrir l'ensemble de la gamme d'adresses IP), et le panneau ne peut pas trouver une plage d'adresses IP pour créer son propre réseau privé.

Vous avez besoin d'ajouter une route par défaut (pour acheminer le tout par le biais de openvpn) et de désactiver ces deux itinéraires spécifiques. fix-routes script ne fait que.

Ce script est appelé après openvpn ajoute ses propres itinéraires. Pour exécuter les scripts, vous aurez besoin de mettre en script-security de 2 qui permet l'exécution de scripts bash de openvpn contexte.

Merci

Je tiens à remercier l'auteur de ce commentaire sur github, également grâce à ovpn soutien.

22voto

Anas El Barkani Points 161

Vous pouvez également obtenir docker-composer de travail si vous définissez le sous-réseau en notation CIDR dans votre panneau de composer fichier:

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

Une autre option: créer d'abord le réseau avec le sous-réseau en notation CIDR et spécifiez ensuite dans le menu fixe composez le fichier que vous souhaitez utiliser ce réseau:

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

Dans votre menu fixe composer fichier:

networks:
  your-network:
    external: true

7voto

Basé sur la réponse de l'Anas El Barkani, voici une étape complète par étape exemple l'utilisation de PostgreSQL.

Alors que le VPN n'est pas connecté, créer un menu fixe réseau:

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

Dans le menu fixe-composition de fichier, spécifiez réseau externe:

version: "2"

C'est tout. Maintenant, vous pouvez activer votre VPN, et de démarrer/arrêter le conteneur comme d'habitude:


Pas besoin d'activer le VPN/off à chaque fois, ou pour ajouter bizarre scripts en tant que root.

0voto

SecurityGuy Points 11

Certains de contexte ici: la 0.0.0.0 et 128.0.0.0 routes ne sont créées que si le serveur OpenVPN (aka Serveur d'Accès) est configuré pour pousser les routes d'envoyer tout le point de terminaison du trafic Internet via le VPN. En ajoutant ces grandes routes, l'utilisateur du trafic Internet peuvent être acheminés en n'interférant pas avec le routage sur le réseau local, et de s'assurer que le point de terminaison reste en mesure de router les OpenVPN de la circulation elle-même pour le routeur local.

Si l'envoi de tout le trafic Internet via le serveur OpenVPN n'est pas une obligation, vous pouvez être mieux de demander à votre VPN à l'administrateur de créer un profil que seules les routes du trafic vers destinations requises (telles que les plages d'adresses IP privées) via le VPN au lieu de tout. Que devrait éviter d'avoir à jouer avec les itinéraires sur l'ordinateur d'extrémité.

0voto

geoffreybr Points 21

Peut-être une façon de le faire est d'ajouter toutes les routes à l'exclusion de 172.16.0.0/12 à la route à travers le VPN afin de nous assurer que tout va bien manipulée:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X