J'ai récemment installé Privacy VPN, et il s'avère que l'openvpn activé interrompt le menu fixe.
Lorsque j'essaie d'exécuter docker-compose up
, j'obtiens 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 corrige le problème (toutefois, je préfère ne pas le désactiver). Existe-t-il un moyen de faire coexister ces deux personnes pacifiquement? J'utilise Debian Jessie, et mon openvpn a la chaîne suivante
OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 26 2017
Beaucoup de gens ont "résolu" ce problème en désactivant l'openvpn, je demande donc spécifiquement comment faire fonctionner ces deux en même temps.
Références:
Si cela fait une différence, mon fournisseur de vpn est: https://www.ovpn.com/ et voici un fichier de configuration (quelque peu rédigé):
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
Créez un script /etc/openvpn/fix-routes.sh
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
Ajoutez le bit exécutable au fichier: chmod o+x /etc/openvpn/fix-routes.sh
. Changez le propriétaire de ce fichier en root: chown root:root /etc/openvpn/fix-routes.sh
.
Ajoutez à votre configuration les deux lignes suivantes:
script-security 2
route-up /etc/openvpn/fix-routes.sh
Openvpn ajoute des routes pour les réseaux suivants: 0.0.0.0/1
et 128.0.0.0/1
(ces routes couvrent toute la plage d'adresses IP), et docker ne peut pas trouver une plage d'adresses IP pour créer son propre réseau privé.
Vous devez ajouter une route par défaut (pour tout router via openvpn) et désactiver ces deux routes spécifiques. Le script fix-routes
fait cela.
Ce script est appelé après que openvpn ajoute ses propres routes. Pour exécuter les scripts, vous devez définir script-security
sur 2
, ce qui permet l'exécution de scripts bash à partir du contexte openvpn.
Je voudrais remercier auteur de ce commentaire sur github , également grâce à ovpn support .
Vous pouvez également utiliser docker-compose si vous définissez le CIDR du sous-réseau dans votre fichier de composition:
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 CIDR, puis spécifier dans le fichier de composition de menu fixe que vous souhaitez utiliser ce réseau:
network create your-network --subnet 172.24.24.0/24
Dans votre docker composez le fichier:
networks:
your-network:
external: true
Basé sur réponse de Anas El Barkani , voici un exemple complet pas à pas utilisant PostgreSQL.
Tant que le VPN n’est pas connecté, créez un réseau permanent Menu fixe :
docker network create my-network --subnet 172.24.24.0/24
Dans le fichier docker-compose, spécifiez le réseau comme externe:
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
C'est tout. Vous pouvez maintenant activer votre VPN et démarrer/arrêter le conteneur comme d'habitude:
docker-compose up -d
docker-compose down
Pas besoin d'activer/désactiver VPN à chaque fois, ou d'ajouter des scripts étranges en tant que root.
Une façon de le faire est peut-être d'ajouter toutes les routes, à l'exception de 172.16.0.0/12, pour acheminer via un réseau privé virtuel (VPN) afin que nous puissions nous assurer que toutes les sorties sont correctement traitées:
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
Un contexte supplémentaire ici: les routes 0.0.0.0 et 128.0.0.0 ne sont créées que si le serveur OpenVPN (ou serveur d'accès) est configuré sur Push routes pour envoyer tout le trafic Internet du point de terminaison via le VPN. En ajoutant ces grandes routes, le trafic Internet de l'utilisateur peut être routé sans interférer avec le routage sur le réseau local, et en veillant à ce que le point de terminaison reste capable d'acheminer lui-même le trafic OpenVPN vers le routeur local.
Si l'envoi de tout le trafic Internet via le serveur OpenVPN n'est pas une exigence, il vaut peut-être mieux demander à votre administrateur VPN de créer un profil qui acheminera le trafic uniquement vers des destinations requises (telles que des plages d'adresses IP privées) via le VPN plutôt que pour tout. Cela devrait éviter de gâcher les routes sur le noeud final.